首页 > 解决方案 > 卷积神经网络(CNN)可以用于无监督学习中的特征提取吗?

问题描述

我正在做一个用 ANN 学习 AI 的辅助项目,我想制作一个无监督模型,提取视频中每一帧的特征,以便将来比较它们并检测图像重复。

我的想法是使用 CNN 为每一帧提取特征,但我似乎无法让它发挥作用,因为我正在学习我的直觉告诉我有些东西我只是不理解。

如何创建一个提取图像数组特征的无监督模型?

这就是我得到的:

img = load_image_func(???) # this loads a video and return a reshaped ordered list of frames 

input_shape = (150, 150, 3)

# The model
model = Sequential()
model.add(Conv2D(32, (3, 3), activation='relu', padding='same', name='conv_1', input_shape=input_shape))
model.add(MaxPooling2D((2, 2), name='maxpool_1'))
model.add(Conv2D(64, (3, 3), activation='relu', padding='same', name='conv_2'))
model.add(MaxPooling2D((2, 2), name='maxpool_2'))
model.add(Conv2D(128, (3, 3), activation='relu', padding='same', name='conv_3'))
model.add(MaxPooling2D((2, 2), name='maxpool_3'))
model.add(Conv2D(128, (3, 3), activation='relu', padding='same', name='conv_4'))
model.add(MaxPooling2D((2, 2), name='maxpool_4'))
model.add(Flatten())
model.add(Dropout(0.5))
model.add(Dense(512, activation='relu', name='dense_1'))
model.add(Dense(128, activation='relu', name='dense_2'))
model.add(Dense(67500, activation='sigmoid', name='output'))

optimizer=keras.optimizers.Adam(learning_rate=0.001)

model.compile(loss = 'sparse_categorical_crossentropy', optimizer= optimizer, metrics=['accuracy'])

#model.summary()

model.fit(vidcap, vidcap, batch_size=64, epochs=20)

我觉得我应该训练模型,但由于它是无人监督的,我没有训练数据。

另外,我应该在输出层中放入多少个单元,因为我没有检测到多少特征?

谢谢你的时间

标签: tensorflowmachine-learningkerasdeep-learningconv-neural-network

解决方案


事实上,CNN 模型将提取图像的几个特征(例如颜色、形状、边缘、图案等)

但是,您将什么定义为图像重复?您是否正在寻找一种可以找到相似图像的算法?如果是这种情况,那么您可能想查看Siamese Networks,这正是他们所做的: https ://www.cs.cmu.edu/~rsalakhu/papers/oneshot1.pdf

这里的主要思想是有 2 个神经网络一起训练!然后,在训练完成后,您使用两个神经网络分别提取相同图像的特征并比较结果以找出相似度。


推荐阅读