基于孪生卷积网络(Siamese CNN)和短时约束度量联合学习的tracklet association方法

基于孪生卷积网络(Siamese CNN)和短时约束度量联合学习的tracklet association方法

 

一、相关理论

     本篇博文主要讲解2015年CVPR的一篇关于图像相似度计算的文章:《Learning to Compare Image Patches via Convolutional Neural Networks》,本篇文章对经典的算法Siamese Networks 做了改进。学习这篇paper的算法,需要熟悉Siamese Networks(经典老文献《Signature Verification Using a Siamese Time Delay Neural Network》)、以及大神何凯明提出来的空间金字塔池化(2015年CVPR 文献《Spatial Pyramid Pooling in Deep ConvolutionalNetworks for Visual Recognition》),因为文献基本上是在 Siamese Networks的基础上做修改,然后也要借助于空间金字塔池化实现不同大小图片的输入网络。

                                                              

                                                                                 网络总结构

       如上图所示,我们的目的是比较两幅图片是否相似,或者说相似度是多少,因此我们构建的卷积神经网络模型的输入就是:两幅图片,然后网络的输出是一个相似度数值。其实我觉得,用“计算相似度”这个词有点不合适,我觉得应该翻译为匹配程度。因为文献所采用的训练数据中,如果两张图片匹配,输出值标注为y=1,如果两张图片不匹配,那么训练数据标注为y=-1,也就是说,这个训练数据的标注方法,根本就不是一个相似度数值,而是一个是否匹配的数值。我们打个比方,有三样物体:钢笔、铅笔、书包,那么在训练数据中,就把钢笔和铅笔标注为y=1,而不是用一个相似度数值来衡量,比我钢笔和铅笔的相似度我们把它标注为y=0.9……,所以说用于用相似度这个词有点不合理,即使我们最后计算出来的值是一个-1~1之间的数……

paper主要创新点:在创新点方面,我觉得主要是把Siamese 网络的双分支,合在一起,从而提高了精度,如下图所示

                                                            

                                                                                      Siamese 网络

                                                                      

                                                                             paper算法2-channel 网络


先在这里解释下为什么作者要把它称之为:2-channel networks。理解了2-channel这个词,有助于我们后面理解算法。从上面Siamese 网络,我们可以看到这个网络有两个分支组成,因为我们是要比较两张图片patch1、patch2的相似度,所以Siamese 网络的大体思路,就是让patch1、patch2分别经过网络,进行提取特征向量,然后在最后一层对两个两个特征向量做一个相似度损失函数,进行网络训练,这个后面在给进行比较详细的讲解,总的来说Siamese 对于两张图片patch1、patch2的特征提取过程是相互独立的,我们也可以把Siamese 网络称之为“2-branches networks”。那么paper所提出的算法:2-channel networks 又是什么意思呢?本来patch1、patch2是两张单通道灰度图像、它们各不相干,于是作者的想法就是把patch1、patch2合在一起,把这两张图片,看成是一张双通道的图像。也就是把两个(1,64,64)单通道的数据,放在一起,成为了(2,64,64)的双通道矩阵,然后把这个矩阵数据作为网络的输入,这就是所谓的:2-channel。

      OK,这就是文献的主要创新点,懂得了这个,后面看paper就容易多了,可以说已经把paper的总思路领悟了一半了,是不是感觉貌似很简单的样子。

二、Siamese网络相关理论

本部分是为了了解经典的Siamese网络,如果已经知道Siamese网络的结构的,请跳过这一部分。

1、《Learning a similarity metric discriminatively, with application to face verification》

Siamese网络:这个是一个曾经用于签字认证识别的网络,也就是我们平时说笔迹识别。这个算法可以用于判断签名笔迹,n年前的一个算法。算法的原理利用神经网络提取描述算子,得到特征向量,然后利用两个图片的特征向量判断相似度,这个有点像sift,只不过是利用CNN进行提取特征,并且用特征向量进行构造损失函数,进行网络训练。下面引用2005年CVPR上的一篇文献《Learning a similarity metric discriminatively, with application to face verification》,进行简单讲解,这篇paper主要是利用Siamese网络做人脸相似度判别,可以用于人脸识别哦,因为我觉得这篇文献的网络结构图画的比较漂亮,比较容易看懂,所以就用这一篇文章,简单讲解Siamese网络的思想。其网络如下图所示,有两个分支分别输入图片x1、x2(须知:这两个分支其实是相同的,同一个cnn模型,同样的参数,文献只是为了方便阅读,所以才画成两个分支,因为他们采用的是权重共享),包含卷积、池化等相关运算。双分支有点难理解,我们还是用单分支来理解吧,说的简单一点把,siamese 网络分成前半部分、后半部分。前半部分用于特征提取,我们可以让两张图片,分别输入我们这个网络的前半部分,然后分别得到一个输出特征向量Gw(x1)、Gw(x2),接着我们构造两个特征向量距离度量,作为两张图片的相似度计算函数(如公式1所示)。

                                              

                                                                                             Siamese网络 

如上图所示,我们要判断图片X1和X2是否相似,于是我们构建了一个网络映射函数Gw(x),然后把x1、x2分别作为参数自变量,我们可以得到Gw(x1)、Gw(x2),也就是得到用于评价X1、X2是否相似的特征向量。然后我们的目的就是要使得函数:

                                                

然后利用这个损失函数,对网络进行训练,就可以判别两张人脸的相似度了。上面过程中网络的两个分支所用的是同一个函数,也就是权值、网络结构是同一个,我们完全可以把Gw(x)看成是一个特征提取器,因此siamese network网络其实就是一个提取一直图片的特征算子的过程,然后再网络的最后一层,是用于定义了特征向量间相似度的损失函数。

2、Siamese网络

OK,我们回到本篇博文的主题,下面是paper所用的Siamese网络(shared  weights)。在网络的最后顶层,由线性全连接和ReLU激活函数,构成输出层。在paper中,采用的最后是包含两个全连接层,每个隐层包含512个神经元。                                                                                                  

除了Siamese网络,文献还提了另外一种Pseudo-siamese网络,这个网络与siamese network网络最大的区别在于两个分支是权值不共享的,是真正的双分支网络模型。Pseudo-siamese在网络的两个分支上,每个分支是不同的映射函数,也就是说它们提取特征的结构是不一样的,左右两个分支,有不同的权值、或者不同的网络层数等,两个函数互不相关,只是在最后的全连接层,将他们连接在一起了。这个网络相当于训练参数比Siamese网络的训练参数多了将近一倍,当然它比Siamese网络更加灵活。

其实到了这里,我们提到了原始的Siamese、以及Pseudo-siamese,都只是为了衬托后面作者所提出的算法:2-channel networks,因为最后我们要做算法精度对比,所以作者就啰嗦了这么多。这一部分我觉得啰嗦的太多反而会乱掉,所以还是不细讲,以为这个不是重点。下面要讲解的2-channel 网络才是paper的主要创新点,所以才是我们需要好好细读的部分。因为paper的讲解方法,是根据一步一步改进网络的,所以我就根据文献的思路进行讲解,以siamese network为基础:paper首先提出了把siamese 改成2-channel ,这个是第一次对算法的进化,提高了精度。接着提出Central-surround two-stream network,这个算法只是在网络的输入上做了改变,没有改变网络的结构,可以与2-channel、siamese 结合在一起,提高精度。
 

--------------------- 

Siamese CNN

Temporally Constrained Metrics

Tracklet Association

MTT

MOT

读 'B. Wang, L. Wang, et.al. Joint Learning of Siamese CNNs and Temporally Constrained Metrics for Tracklet Association[j], arXiv:1605.04502v2 [cs.CV] 25 Sep 2016'笔记

这篇文章主要提出了一种借助孪生卷积网络的度量学习方法,用以提升tracklet association 的性能。另外文章还给出了一个具有40段标注序列的数据集。

该方法的主要框架如下:

enter description here

 

对于一段待跟踪的视频数据,首先使用pre-trained检测子检测出每一帧中的目标。然后使用dual-threshold strategy [1]生成一些比较可靠的小轨迹段。这段过程和基于层次关联的鲁棒多目标跟踪方法类似。接下来使用一些辅助数据预训练孪生cnn网络。然后将预训练得到的孪生卷积网络与短时约束度量结合训练出分别适用于每个轨迹段的度量矩阵,最后通过使用对应的度量矩阵计算轨迹片段之间的相似关系,再利用softassign 算法关联对应的轨迹片段以期得到更长的轨迹段。

Siamese CNN

 

enter description here

 

siamese CNN共享参数。上图给处了孪生CNN中任一个CNN的结构,首先对于一幅待输入的图像,缩放到大小传递给CNN,CNN包含5层(2个卷积层、2个池化层和1个全连接层)。卷积层和池化层的通道数都是96(即卷积模板有96种),最终的输出层是512维向量。卷积层C1和C2滤波器的大小分别是,在每个池化层包含cross-channel normalization操作。卷积方式:zero padding, 激活函数 ReLu。

损失函数

使用马氏距离刻画样本将的相似性,是半正定矩阵。

这个时候不考虑时间上的差异性,也就是说所有的轨迹片段都用同一个度量矩阵的条件下,得到损失函数

其中是正则化系数,是经验损失函数的权重,是决策边界,是示性函数,第一项是正则项,希望样本各向同性,即马氏距离接近于欧氏距离。

考虑到,目标的表观特性随着时间变化也发生显著变化,如上使用同一个度量函数显然并不合适,所以文章中将度量矩阵分为两类:一类是整个视频序列时间段内公用的,反映通用的鉴别信息;另一类是针对于小段时间内的度量矩阵,反映的是特异性。而且考虑到短时约束(时间上相近的sequences应该具有相似的信息),所以损失函数可以定义如下:

写到这里忽然想起一件事,我们使用Siamese CNN不是用来获得tracklets的度量的嘛,为什么输入的是图像而不是轨迹呢?这是因为文章中使用的是具有代表性的图像来表示对应的轨迹,后面会进一步介绍,这里提一下是为了更好理解损失函数。
上面公式中是正则化系数,第一项表示公共度量矩阵的正则化限制,第三项是对每一个单独度量矩阵的正则化约束,第二项是temporally constraints,第四项时经验损失函数,定义如下:

为什么这里,而,我觉得是因为希望

Temporally Constraint如下图所示:

enter description here

 

在执行时,使用初始化.

使用BP算法调整网络参数,先对求梯度,然后将该梯度传递给CNN,调整CNN的连接参数。(3)式对
求导

那么对于两个CNN总的梯度为

是示性函数。

的梯度调整:

其中
对应的更新策略:

是学习步长。

训练样本
在每个tracklets中选择个可信度较高的measurements,然后随机选择2个配对,组成正样本和负样本进行训练,下面的算法1给出了度量矩阵更新的过程,至于CNN的训练就直接按照通用训练方法。

 

enter description here

 

算法里面有一个需要注意的地方就是对的正定投影,保证M的半正定性。这个可以通过SVD分解,对奇异值滤波实现。

Tracklet Association

轨迹片段的关联可以形式化为如下形式:

表示关联关系,这里没要求行列和为0,是因为存在全不关联的情形

分别是基于运动模型和基于表观模型的相似性

这里参见层次关联的鲁棒多目标跟踪算法.

对于基于表观的相似性,首先在每一个tracklet中选取一个执行读最高的measurement作为代表,组成探针集,是该段时间内的tracklets个数,那么

其中表示tracklet的第k个观测值, 分别表示对应轨迹上观测值的个数

这里需要特别注意的是:1. 不是对称计算的;2. normalization过程中并不是时间上的规范化,而是与所有tracklets相似性上的规范化。

得到了相似矩阵P,为了进一步实现关联的快速精确收敛,对P进行部分约束

然后再进行列归一化。

可以使用匈牙利算法对上述分配问题求解,求解之后关联tracklet之间可能存在gap,这个时候采用linear interpolation进行连接。

Experiments

文章中给出了新的benchmark数据集,但我没有找到网址,所以这里就不说了,我们就来看看在已有的一些benchmark上,该方法的性能如何
为了对比所提算法中每一个component(pre-trained Siamese CNN, Temporal Constraint metric等)的有效性,设置了几个baseline
baseline1:Siamese CNN的参数是独立学习的,即没有经过Temporal Constraint Metric的微调阶段,损失函数使用(2)式,且其中M=I,即欧氏距离。然后训练M,不使用即(2)式作为loss function。验证Joint learning的有效性。
baseline2:使用(2)式作为损失函数,同时训练Siamese CNN和M,可以验证Temporally Constraint Metric的有效性。
baseline3: Siamese CNN is pretrained且不进行微调,验证微调的有效性
baseline4: 不使用这一项,验证common metric的有效性

在PETS 2009数据集上的结果如下:

enter description here

 

 

在MOTChallenge 2015数据集上与当前公布代码的教新的方法对比结果如下:

enter description here

 

转载地址:https://www.cnblogs.com/YiXiaoZhou/p/6110865.html

转载地址:https://blog.csdn.net/hjimce/article/details/50098483

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值