(一)Siamese目标跟踪——SiamFC训练和跟踪过程:从论文细节角度出发
发布日期:2021-06-18 12:11:45 浏览次数:35 分类:技术文章

本文共 5902 字,大约阅读时间需要 19 分钟。

SiamFC 简单介绍

SiamFC基于深度学习的方法在速度上已经超过传统的相关滤波算法,实时性极强。SiamFC基于孪生网络,该网络有两个输入,一个是模板样本Z,另一个搜索样本X。而在单目标跟踪任务中,模板样本通常选取的是视频序列第一帧中的目标,而候选样本则是之后每一帧中的图像搜索区域(search image)。孪生网络的目的是在后续帧中找到与模板帧Z最相似的候选区域,该区域即为这一帧中的目标。

在这里插入图片描述

SiamFC 实现方法

SiamFC网络设计结构如上图所示,其中 φ \varphi φ 代表特征提取方法,原文中作者采用了AlextNet, ⋆ \star 代表深度互相关操作。

(一)Training 部分

数据输入:SiamFC的输入是pair< F r a m e i Frame_i Framei, F r a m e j Frame_j Framej>,其中 F r a m e i Frame_i Framei, F r a m e j Frame_j Framej是来自同一组视频的2帧,间距不超过T帧, F r a m e i ∈ R W ∗ H ∗ 3 Frame_i \in \mathcal{R}^{W*H*3} FrameiRWH3

  1. 对模板帧 Z Z Z和搜索帧 X X X进行裁剪,使其符合上图的输入形式。不妨设 Z = F r a m e i Z = Frame_i Z=Framei, X = F r a m e j X = Frame_j X=Framej
    裁剪方法
    (1)模板帧 F r a m e i Frame_i Framei的裁剪:以目标中心center为裁剪中心,确定一个正方形裁剪区域,该正方形的边长设为C(该C可能会超过原图片,超过部分以图片颜色均值填充),然后resize到127边长大小。从而得到输入 Z Z Z。过程如下:
    C = ( w + 2 p ) ( h + 2 p ) , p = w + h 4 Z = g e t P a t c h ( F r a m e i , C , c e n t e r ) Z : = r e s i z e ( Z , 127 ) C=\sqrt{(w+2p)(h+2p)}, p = \frac{w+h}{4} \\ Z = getPatch(Frame_i,C,center) \\ Z := resize(Z,127) C=(w+2p)(h+2p) ,p=4w+hZ=getPatch(Framei,C,center)Z:=resize(Z,127)
    (2)模板帧 F r a m e i Frame_i Framei的裁剪:以目标中心为裁剪中心,确定一个正方形裁剪区域,该正方形的边长设为C(该C可能会超过原图片,超过部分以图片颜色均值填充),然后resize到255边长大小。从而得到输入 X X X。过程如下:
    C = ( w + 2 p ) ( h + 2 p ) , p = w + h 4 C : = 255 127 C X = g e t P a t c h ( F r a m e i , C , c e n t e r ) X : = r e s i z e ( X , 255 ) C=\sqrt{(w+2p)(h+2p)}, p = \frac{w+h}{4} \\ C := \frac{255}{127}C \\ X = getPatch(Frame_i,C,center) \\ X := resize(X,255) C=(w+2p)(h+2p) ,p=4w+hC:=127255CX=getPatch(Framei,C,center)X:=resize(X,255)
  2. 提取X和Z的特征,并对他们进行深度互相关操作,得到置信图score;
    s c o r e = φ ( Z ) ⋆ φ ( X ) + b score=\varphi(Z) \star \varphi(X) + \mathcal{b} score=φ(Z)φ(X)+b
    实现中,b可以是一个可学习的数字,初始值为0。
  3. 计算loss,实现反向传播
    loss的输入有3部分:score( B × 17 × 17 B \times 17 \times 17 B×17×17), gt ( B × 17 × 17 B \times 17 \times 17 B×17×17), weight(( 1 × 17 × 17 1 \times 17 \times 17 1×17×17))。其中,B代表bacth size,gt代表ground truth,对于每个通道值都一样,靠近中心位置全部置1,代表是正样本。其余位置都是0,代表负样本。所有gt通道结果如下:
    在这里插入图片描述
    weights是为了应付正负样本不均衡提出的,其计算方法如下:
    w e i g h t s [ m a s k = = 1 ] = 0.5 / n p . s u m ( m a s k = = 1 ) w e i g h t s [ m a s k = = 0 ] = 0.5 / n p . s u m ( m a s k = = 0 ) weights[mask == 1] = 0.5 / np.sum(mask == 1) \\ weights[mask == 0] = 0.5 / np.sum(mask == 0) weights[mask==1]=0.5/np.sum(mask==1)weights[mask==0]=0.5/np.sum(mask==0)
    有了这3个部分,可计算最终的损失值loss,采用二值交叉熵计算:
    l o s s = 1 B ∑ b = 1 B ∑ i = 1 17 ∗ 17 [ − g t [ i ] ∗ l o g ( s ( s c o r e [ b , i ] ) ) − ( 1 − g t [ b , i ] ) ∗ l o g ( 1 − s ( s c o r e [ b , i ] ) ) ] s ( ∙ ) = s o f t m a x ( ∙ ) = 1 1 + e − ∙ loss = \frac{1}{B}\sum_{b=1}^{B} \sum_{i=1}^{17*17} [-gt[i]*log(s(score[b,i]))-(1-gt[b,i])*log(1-s(score[b,i]))] \\ s(\bullet) = softmax(\bullet) = \frac{1}{1+e^{-\bullet} } loss=B1b=1Bi=11717[gt[i]log(s(score[b,i]))(1gt[b,i])log(1s(score[b,i]))]s()=softmax()=1+e1

训练部分完毕,其余更多的训练细节可参考原文。下面介绍跟踪部分 。

(二)Tracking 部分

数据输入:输入来自同一个视频下面的每一帧, F i ∈ R W ∗ H ∗ 3 F_i \in \mathcal{R}^{W*H*3} FiRWH3

  1. 第一帧 F 1 F_1 F1的处理,第一帧作为模板帧,且在跟踪过程中模板帧一直不变
    (1)裁剪F_1区域,与训练部分裁剪模板帧方式一样,得到输入 Z ∈ R 127 × 127 × 3 Z \in R^{127 \times 127 \times 3} ZR127×127×3。其中,对应代码文档处的细节化参数如下:
    s _ z = C = ( w + 2 p ) ( h + 2 p ) s c a l e _ z = 127 C s i z e _ z = 127 s\_z = C = \sqrt{(w+2p)(h+2p)} \\ scale\_z = \frac{127}{C} \\ size\_z = 127 s_z=C=(w+2p)(h+2p) scale_z=C127size_z=127w,h 来自F_1的宽,高
    (2) 给出后续帧的跟踪信息:
    s c a l e = 1.037 5 [ − 1 , 0 , 1 ] s _ x = 255 127 C scale = 1.0375^{[-1,0,1]} \\ s\_x = \frac{255}{127}C \\ scale=1.0375[1,0,1]s_x=127255Cscale代表跟踪尺度信息,pos = bbox的中心,target_sz = bbox的宽和高。
  2. 跟踪后续帧
    (1)以上一帧预测bbox的中心为当前帧中心,裁剪当前帧区域,与训练部分裁剪搜索帧方式一样,最终得到X。由于存在尺度关系,scale存在3个值代表有3个尺度信息,于是提取的边长信息分别如下:
    C i = 255 127 C × s c a l e i C_i = \frac{255}{127}C \times scale_i Ci=127255C×scalei接着将其resize到255。
    (2)对多个尺度的X分别进行特征提取,得到多个特征图score(1717),并进行上采样到272272。
    S c o r e i = φ ( Z ) ⋆ φ ( X i ) S c o r e i : = u p s a m p l e ( S c o r e i , 272 ) Score_i = \varphi(Z) \star \varphi(X_i) \\ Score_i := upsample(Score_i ,272) Scorei=φ(Z)φ(Xi)Scorei:=upsample(Scorei,272)
    (3)找出Score_i中最大值所对应的位置以及对应的尺度;
    j = a r g m a x i ( S c o r e i ) , j = [ 0 , 1 , 2 ] r , c = a r g m a x r , c ( S c o r e s ) s = s c a l e j j= argmax_i(Score_i), j=[0,1,2] \\ r,c = argmax_{r,c}(Score_s)\\ s = scale_j j=argmaxi(Scorei),j=[0,1,2]r,c=argmaxr,c(Scores)s=scalejr,c代表最大响应值对应的行列坐标
    (4)计算r,c对应C*C图片的偏差,可得到rb,cb,从而当前帧的中心为:
    p o s : = p o s + [ r b , c b ] pos:=pos+[rb,cb] pos:=pos+[rb,cb]。rb,cb计算方式见。
    (5)更新s_x和目标框大小; s _ x : = s _ x × ( ( 1 − λ ) + λ ∗ s ) s\_x := s\_x \times ((1 - \lambda) + \lambda * s) s_x:=s_x×((1λ)+λs); t a r g e t _ s z = ( ( 1 − λ ) + λ ∗ s ) ∗ t a r g e t _ s z target\_sz = ((1 - \lambda) + \lambda * s) * target\_sz target_sz=((1λ)+λs)target_sz;
    (6)操作下一帧,goto(1)。

SiamFC可改进的方向

  1. 模板帧永远都不变,可以尝试改进;
  2. 尺度信息只有3个,可以考虑增加尺度;
  3. 正负样本类间不平衡问题可以扩充。

参考文献

[1] Fully-Convolutional Siamese Networks for Object Tracking

[2] http://geyao1995.com/SiamFC/#more


  1. 272 × 272 272 \times 272 272×272的response map我们有了当前r,b的值,如何计算出对应原先正方形中心的偏差呢?

    解释:backbone采用的是AlexNet,共有3次stride操作,所以 response map 上相邻的两点在输入的搜索图片上对应区域中心的间隔为2×2×2=8. 从距离中心的位置可以推断 scaled crop 上的位置,进一步推断出原图上的位置。
    在这里插入图片描述
    方法:
    最左边的图中,红色点代表当前的(r,c)坐标,黑色点代表中心点。该步骤的目的就是计算出红色点距离中心点的偏差,将偏差加后上一帧的中心位置就可以得到更新过的位置结果了。
    (1)设( x 1 , y 1 x_1, y_1 x1,y1)代表在response map(272272)的偏差;
    (2)那么在response map(17,17)中的偏差,自然就是( x 1 16 , y 1 16 \frac{x_1}{16} , \frac{y_1}{16} 16x1,16y1);因为response map(272
    272)是response map(1717)上采样16倍得到的。
    (3)response map(17,17)是seach region在AlexNet上操作3次stride得到的,相当于缩小了 2 3 2^3 23倍,所以还原到search region (255,255)上面,需要将第(2)中的偏差 × 2 3 \times 2^3 ×23,即在search region 上得到的偏差( x 1 16 × 8 , y 1 16 × 8 \frac{x_1}{16} \times 8 , \frac{y_1}{16} \times 8 16x1×8,16y1×8);
    (4)最后将其还原到裁剪区域上的偏差。可以知道,裁剪区域边长C
    s进行resize操作后可以得到255的search region。于是很容易得到最终的偏差: ( x 1 16 × 8 × C × s 255 , y 1 16 × 8 C × s 255 \frac{x_1}{16} \times 8 \times \frac{C \times s}{255}, \frac{y_1}{16} \times 8 \frac{C \times s}{255} 16x1×8×255C×s,16y1×8255C×s

转载地址:https://blog.csdn.net/BearLeer/article/details/115050445 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:(二) Dynamic Siamese (DSiam)——从论文角度综述
下一篇:Hyperspectral Image Semantic Segmentation in Cityscapes 介绍

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2024年03月22日 22时23分19秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章