unsupervised leaning of visual representation using videos-特征表示方法 学习笔记

特征表示方法 学习笔记

unsupervised leaning of visual representation using videos

根本思想:

用一个图片(patch)三元组(a, b, c)来训练网络,
其中a和b是同一个视频中内容相近的patch, c是从其他视频中任意采样得到的patch,
让网络能学习到a, b, c的特征并满足a,b之间的距离尽量小,a,c之间的距离尽量大。

主要步骤:

第一个阶段 用传统的数字图像处理算法来得到一组相同内容的patch(a, b)

  1. 用SURF算法在第一帧上寻找兴趣点(需要检测的、分类等的主要物体,主要是与背景区分)
  2. 用IDT算法来消除兴趣点上的相机抖动,使得后续的追踪能有更好的效果,此处结束后得到三元组中的第一个query patch,就是上述的a
  3. 用KCF追踪器来追踪之后30帧内与query patch相同内容的第二个patch,即上述b

用以上方法得到大量的pair of patch (a, b),下面就进入深度学习的阶段,用这组patch来训练cnn

第二个阶段 用上述patch组合训练cnn(siamese triplet network)学习到一种论文认为的较好的visual representation

4.用上述的大量pair of patch来训练一个random initialization的AlexNet;
5.用Pascal VOC数据 fine-tune上述网络;
6.为了实现transfer learning,将fine-tuned的网络再次在步骤4中的方式中再训练一次,即热re-adapt the triplet task;
7.再次用 VOC数据 fine-tune上述网络

(感觉相当于4,5重复了两次,论文认为这样能够达到更好的效果吧,但个人认为这样其实就相当与在用voc训练网络了吧,说完全是unsupervised感觉名不符实,不过后面也证明了没有fined-tune的网络也是有提升的,只是没有后面fine-tune之后的那么明显)

第三个阶段 将这个网络接上全连接层输出一个特征向量,后面就可以用SVM等各种方法来利用这个representation进行其他的具体任务了

以上步骤中没有说到三元组中的c patch,实际上是在步骤4中训练过程中sample并通过一种类似hard negative mining的方法来得到这些negative sample的。
因为相对a和b,c是作为负样本的
对于训练过程中顺便筛选副样本的内涵,我是这样理解的(且看看吧):
作者构建了一个ranking loss function:
这里写图片描述
其中第一项是正则化项,论文开头就说很这个方法很容易过拟合
第二项就是用距离来表示hinge loss的部分,距离还特意采用了cosine distance(余弦距离)
这里写图片描述
**余弦距离相比于欧式距离的差别在于,对绝对距离不敏感,更适合表征方向上的距离,也就更适合表示这种图像之间的距离吧

训练中,采用mini batch SGD,对于每个pair of patch,在每个batch中随机抽样K个patch,
分别都计算其loss,选择loss最大的那个patch作为三元组中的负样本c,这样就得到了triplet

而所谓的siamese-triplet network的三个网络是共享参数的,只是分别用于计算三个patch而已
由于反正都要在网络中forward propagation一次,所以在最后筛选K个patch时并没有增加太多计算量,还是很划算的。

其实相比现在的auto-encoder总觉得这样的方法确实有些落后了,但是在有些任务中可能仍旧是有用武之地的,毕竟如何获得好的representation将会一直是CV 中的重点。

你可能感兴趣的:(计算机视觉基础)