使用 VGG16 进行特征提取以进行聚类

问题描述

我问了很多,但我非常坚持这个......

我有这部分代码,我用来用 SIFT 提取特征,我正在尝试修改它以基于 VGG16 模型提取特征。

无论我多么努力,我都无法通过,并且总是出现错误

因此,如果有人可以帮助以某种方式获取特征,然后将其用于聚类。

这是带有 SIFT 的代码

# identification of key points and associated descriptors
import time,cv2
sift_keypoints = []
temps1=time.time()
sift = cv2.xfeatures2d.SIFT_create(500)

for image_num in range(len(list_photos)) :
    if image_num%100 == 0 : print(image_num)
    image = cv2.imread(path+list_photos[image_num],0) # convert in gray
    image = cv2.GaussianBlur(image,(7,7),cv2.BORDER_DEFAULT) #apply gaussianblur filter
    # image = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
    res = cv2.equalizeHist(image)   # equalize image histogram
    kp,des = sift.detectAndCompute(res,None)
    sift_keypoints.append(des)

sift_keypoints_by_img = np.asarray(sift_keypoints)
sift_keypoints_all    = np.concatenate(sift_keypoints_by_img,axis=0)

这是我如何将它用于我的聚类:

from sklearn import cluster,metrics

# Determination number of clusters

k = int(round(np.sqrt(len(sift_keypoints_all)),0))
print("Nombre de clusters estimés : ",k)
print("Création de",k,"clusters de descripteurs ...")

# Clustering
kmeans = cluster.MiniBatchKMeans(n_clusters=k,init_size=3*k,random_state=0)
kmeans.fit(sift_keypoints_all)

我应该怎么做才能使用 VGG 模型提取特征?

谢谢

解决方法

Keras 官方文档 [1] 中有关于使用 VGG16 进行特征提取的示例。

请注意,卷积网络的层是图片不同维度的连续表示。根据您选择作为输出的层,聚类的结果可能会有很大不同。

[1] https://keras.io/api/applications/