tensorflow - 卷积神经网络(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)
我觉得我应该训练模型,但由于它是无人监督的,我没有训练数据。
另外,我应该在输出层中放入多少个单元,因为我没有检测到多少特征?
谢谢你的时间
解决方案
事实上,CNN 模型将提取图像的几个特征(例如颜色、形状、边缘、图案等)
但是,您将什么定义为图像重复?您是否正在寻找一种可以找到相似图像的算法?如果是这种情况,那么您可能想查看Siamese Networks,这正是他们所做的: https ://www.cs.cmu.edu/~rsalakhu/papers/oneshot1.pdf
这里的主要思想是有 2 个神经网络一起训练!然后,在训练完成后,您使用两个神经网络分别提取相同图像的特征并比较结果以找出相似度。
推荐阅读
- vb.net - 从解码的 Base64 字符串中删除二进制标头(VB.net)
- intellij-idea - 如何在 PhpStorm 2020.3 中查看我排除的文件夹?
- python - Selenium XPath 不工作:无法定位元素错误
- node.js - 使用 Koa 2 向 3rd 方提供动态 JS 文件?
- c++ - 如何根据变量类型创建向量
- css - 反应引导程序中的表。我怎样才能使它适合容器内?
- python - 关于使用 Tensor Flow 自定义对象检测微调模型以增加具有附加数据的类数量的问题
- html - 粘性导航栏的粘性问题
- python - 如何配置正则表达式搜索字符串以匹配字符串或字符串加上附加字符串?
- javascript - 元素 ID 可见时执行功能