刚接触相关的一个图文检索问题 真的解决不了ResNet权重T T请问有什么办法解决吗??
然后图像检索和文本检索也有好多问题 试图叫GPT改一下改的我自己看不明白了T T
用VS Code和Jupyter Notebook跑的
可以帮忙看一下嘛 可能后续也会有问题T T
import pandas as pd
import numpy as np
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity
import os
import tensorflow as tf
from tensorflow.keras.applications import ResNet50
from tensorflow.keras.applications.resnet50 import preprocess_input
from tensorflow.keras.preprocessing import image
# 读取word_test.csv文件
file_path = "此处我害怕报错写了绝对路径"
word_test = pd.read_csv(file_path, encoding='utf-8')
# 图像路径
image_path = "此处我害怕报错写了绝对路径"
# 图像特征提取
model = ResNet50(weights='imagenet', include_top=False)
def image_feature_extraction(image_path):
img = image.load_img(image_path, target_size=(224, 224))
img_array = image.img_to_array(img)
img_array = np.expand_dims(img_array, axis=0)
img_array = preprocess_input(img_array)
features = model.predict(img_array)
return features.flatten()
# 文本特征提取
tfidf = TfidfVectorizer()
word_embeddings = tfidf.fit_transform(word_test['caption'])
# 多模态特征融合
image_features = np.array([image_feature_extraction(os.path.join(image_path, img)) for img in os.listdir(image_path)])
combined_features = np.hstack((image_features, word_embeddings.toarray()))
# 图像检索
result1 = []
for text in word_test['caption']:
text_embedding = tfidf.transform([text])
similarities = []
for i, feature in enumerate(combined_features):
similarity = cosine_similarity([feature], text_embedding)
similarities.append((i, similarity))
similarities.sort(key=lambda x: x[1], reverse=True)
top_five_images = [os.path.basename(os.listdir(image_path)[i]) for i, _ in similarities[:5]]
result1.append(top_five_images)
result1_df = pd.DataFrame(result1, columns=['image1', 'image2', 'image3', 'image4', 'image5'])
result1_df.to_csv('result1.csv', index=False)
# 文本检索
result2 = []
for image_id in image_test['image_id']:
image_text = image_data.loc[image_data['image_id'] == image_id, 'caption'].values[0]
image_text_embedding = tfidf.transform([image_text])
similarities = []
for i, feature in enumerate(combined_features):
similarity = cosine_similarity([feature], image_text_embedding)
similarities.append((i, similarity))
similarities.sort(key=lambda x: x[1], reverse=True)
top_five_texts = [word_test['text_id'][i] for i, _ in similarities[:5]]
result2.append(top_five_texts)