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} Framei​∈RW∗H∗3。

  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+h​Z=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+h​C:=127255​CX=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=B1​b=1∑B​i=1∑17∗17​[−gt[i]∗log(s(score[b,i]))−(1−gt[b,i])∗log(1−s(score[b,i]))]s(∙)=softmax(∙)=1+e−∙1​

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

(二)Tracking 部分

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

  1. 第一帧 F 1 F_1 F1​的处理,第一帧作为模板帧,且在跟踪过程中模板帧一直不变
    (1)裁剪F_1区域,与训练部分裁剪模板帧方式一样,得到输入 Z ∈ R 127 × 127 × 3 Z \in R^{127 \times 127 \times 3} Z∈R127×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=C127​size_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=127255​Cscale代表跟踪尺度信息,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​=127255​C×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=scalej​r,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计算方式见。1
    (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​) ↩︎

(一)Siamese目标跟踪——SiamFC训练和跟踪过程:从论文细节角度出发相关推荐

  1. 【目标跟踪 SOT】SiamFC -用于对象跟踪的全卷积孪生网络

    SiamFC - 全卷积孪生网络 $背景知识 SOT(单目标跟踪)和MOT(多目标跟踪)的思想是,在视频中的某一帧中框出你需要跟踪目标的bounding box,在后续的视频帧中,无需你再检测出物体的 ...

  2. Siamese目标跟踪:STMTrack: Template-free Visual Tracking with Space-time Memory Networks(CVPR2021)

    论文 STMTrack: Template-free Visual Tracking with Space-time Memory Networks 代码 Github/STMTrack 参考文章 S ...

  3. 【小白笔记】目标跟踪(Unveiling the Power of Deep Tracking)论文笔记

    文章目录 1.主要贡献 2.主要思路 2.1怎么发挥深度特征的潜能 2.2怎么融合 1.主要贡献 这篇文章18年四月份挂在Arxiv上,现在中了ECCV18,是Martin作为3作的一篇文章,性能比E ...

  4. opencv目标跟踪概述和人脸跟踪

    概述 opencv内部实现了一些单目标跟踪算法,可以很方便的使用. 这里说的目标跟踪不是多目标跟踪,往往是需要人工或程序给定初始目标位置. 资源及跟踪算法介绍 目前看到的比较好的opencv目标跟踪算 ...

  5. SiamFC完整的跟踪过程

    SiamFC 准备两路输入图像:模板图像和检测图像. 设置模板图像和检测图像的边长,分别用z_sz和x_sz表示. 设置content,前后文信息 content=12∗(h+w)=2pcontent ...

  6. 目标跟踪方法--基于区域跟踪

    一.理论 该方法的基本思想是将检测阶段获得的活动区域作为匹配的模板,在系统中设定一个匹配度量值:在相邻帧图像中,全图搜索匹配模板,匹配度量值取极值的位置就是最佳的匹配点.通常对于彩色图像序列而言,可采 ...

  7. 知识跟踪的深度知识跟踪和动态学生分类 Deep Knowledge Tracing and Dynamic Student Classification for Knowledge Tracing

    Deep Knowledge Tracing and Dynamic Student Classification for Knowledge Tracing(译) 知识跟踪的深度知识跟踪和动态学生分 ...

  8. linux单步跟踪命令,dbx调试跟踪的常用子命令

    dbx是UNIX下基于命令行界面的程序调试器. dbx是通过交互执行dbx子命令来达到调试的目的的.在调试程序前,必须先将-g选项包含在编译信息中,编译生成带调试信息的文件,即:cc -o filen ...

  9. 转:WF中的跟踪服务(1):Sql跟踪数据库表,视图,存储过程等相关说明

    使用WF 中的SqlTrackingService 跟踪服务,我们可以记录有关工作流及其关联活动的跟踪信息到Sql Server数据库库中.SqlTrackingQuery 类提供对包含在跟踪数据库中 ...

最新文章

  1. qt向服务器传输文字_Qt 模拟 HTTP 表单提交文字或文件到服务器
  2. 乐在其中设计模式(C#) - 适配器模式(Adapter Pattern)
  3. [ASP.NET 控件实作 Day28] 图形验证码控件
  4. 一个关于用户体验的思考
  5. Kafka集群安装--测试--关闭
  6. onvif学习笔记4:Windows环境使用gsoap生成onvif框架代码
  7. 【ElasticSearch】ElasticSearch 嵌套查询:如何搜索嵌入的文档
  8. SD卡在SPI模式下的初始化和详细的代码分析
  9. linux6.4网络yum 源,CentOS 6.4使用本地yum源
  10. 5.0 java集合框架中的接口collection属于_JAVA集合框架 - osc_cyo2dovg的个人空间 - OSCHINA - 中文开源技术交流社区...
  11. ImportError: IProgress not found. Please update jupyter and ipywidgets.
  12. 读取 wav 格式声音文件
  13. 脉内分析从零开始(持续更新)
  14. 【11月18日截稿】【高校支持】第三届机器人、智能控制与人工智能国际学术会议-RICAI 2021...
  15. sccm可以管理linux补丁,在Linux系统中如何运用SCCM集合?
  16. 用FileExplorer查看android手机中的数据库
  17. IC618的资源分享及IC618电路显示黄色问题
  18. 华为datacom和RS对比有什么区别?
  19. STM32HAL库微秒延时(μs)
  20. 亚马逊上卖毛绒玩具CPC认证注意事项

热门文章

  1. 最详细的微信小程序制作方法
  2. 如何解决收到网监大队信息系统安全等级保护限期整改通知书
  3. 小白学GAN系列2——nn.ReLU与nn.LeakyReLU的区别
  4. DirectX9 10 11对比区别摘抄整理
  5. 【案例分享】项目施工进度报告 – 树形报表
  6. js input 正则保留2位小数中文拼音输入问题 + 限制输入整数的方案
  7. redis:cluster nodes、cluster slaves node-id
  8. AndroidStudio问题XML格式化
  9. 树莓派2 是否值得购买、入手?
  10. Linux 2.6下Driver开发的34个变化[转贴]