type
status
date
slug
summary
tags
category
icon
password
1.Siamese Network
孪生神经网络(Siamese Network),用于在相同的隐空间对不同输入进行度量的方法,不同输入经过相同变换到同一个隐空间,类似对具象进行抽象的过程,
具象表征可能不同,但抽象层面是相同的
。常用于面部比对,相似度测算。2.Siamese-FC
本文中提出的全卷积的siamese network本质上也是寻找给定的模板图像z(论文中的exemplar image,类似于你在测试时框出的第一个bounding box中的图像)在搜索图像x(search image,其他视频帧)上的位置,从而实现单目标追踪。这其实是类似于人的视觉感官常识的,人在进行目标追踪的时候,前一秒记住该目标的一些特征(身高,长相,衣着等),后一秒在另一张视频帧中根据这些特征找到该目标。
以当前模板图像z中心点为原点,截取255*255的搜索范围,分别送入相同的卷积网络提取特征,最后生成两个深度相同大小不同的featuremap,使用模板featuremap对搜索图像的进行卷积(互相关)
最后17*17的置信度图中置信度最高的一点,映射到x的一个区域,这个区域就是跟踪的目标,
显然SiameseFC没有拟合尺度变换的能力,映射出的区域大小是固定的,但可以通过对搜索图像多尺度采样来增加尺度适应。
多尺度检测通常是将目标先进行不同尺度的采样(如生成图像金字塔),再对不同尺度的图像分别进行检测。在SiameseFC中,
对图像先进行不同尺度的采样、再resize到固定的分辨率
,可以合并为一个步骤,因此可以并行地生成多张分辨率相同但尺度不同的目标图像(将尺度不同的目标图像resize到同一分辨率即可),集合成一个mini-batch,送进网络进行多尺度检测,从而实现SiameseFC的尺度适应性。SiameseFC在预测的时候,
不在线更新模板图像
(模板图像只计算一次)。这使得SiameseFC的计算速度很快,但同时也要求SiameseFC中使用的特征需要具有足够的鲁棒性(通常是高层特征,分辨率较低,计算复杂度较大)
,以便在后续帧中能够应对各种变换。而在另一方面,不在线更新模板图像的策略,可以确保跟踪目标的不变性和纯净性,在long-term跟踪算法上具有天然的优势。还有一类visual tracker,在预测时,使用的是在线更新模板图像的策略。这种策略的优点是对特征的鲁棒性要求较低(通常是低层特征,分辨率较高,计算复杂度较小),能适时地学习到目标和背景的变化,但也带来了其他的缺点:在目标跟踪的过程中,如果中间跟丢或跟错了目标(由于遮挡或失败等原因,会导致学习到背景,而不是目标),就无法再恢复到正确的跟踪目标上了;而如果在目标跟踪的过程中,学习到了错误的特征(如来自外界的噪声),则会导致跟踪目标被污染,在后续帧中,跟踪能力降低,甚至逐渐丧失(跟踪目标的累积污染增加)。因此这种更新策略更多地用于short-term跟踪算法上。
box框扩展p个像素,引入上下文,以比例系数s缩放到127*127,再调整到正方形,代码实现为直接截取面积为A^2的正方形区域再缩放。
模板图像Z与搜索图像X都剪切调整为以边界框中心为中心的图像,这样就直接对齐了模板图像与搜索图像。标签将目标中心周围半径为R的范围都设为1,其余为0,
意为R内的响应点都视为正样本,就是Z与X二者有交集时的响应视为有效响应
(因为认为设定的中心也不一定准确)。需要注意的是,训练时是作为度量网络来训练的
,目的是:1.只保留相似度较大的响应区域9o
2.促使X框与Z框重叠部分的响应值增大
因为互相关操作没有参数,score-map误差的反向传播只会影响到特征提取器,使对提高相关度有利的部分特征值更大,促使CNN提取这部分特征
代码实现细节
训练:
考虑到视频流数据过多,读取时i/o较为浪费时间,首先对所有视频帧进行预处理(截取(255,255)的搜索图像)并编码,存放在数据库中,读取的时候再进行解码。
- 处理ImageNet VID数据集,将所有训练视频放入一个文件夹
前六位表示顺序,00/01表示目标序号(可能有多目标)
注意这里:
worker是处理函数,有两个参数,当使用多进程+map函数映射时,如果有某个参数想固定,可以使用functools.partial(func,args1)构建新的函数
worker函数输入文件夹路径,对路径下所有图片进行处理,输出
trajs:dict, 用于存放跟踪目标[trkid]对应的文件名,后面可以根据id读出对应的文件名,在数据库中索引出数据。
返回一个tuple,形式为(video_name,trajs:dict),序列化后存入 pkl文件
在读取时转换为dict:key→video_name,value→trajs:dict
然后将输出的图像进行编码,并存入数据库中
以图像路径的字符串(注意
string.endode()
,转换为二进制编码)的MD5值作为key,图像编码作为value存储注意搜索图片处理函数:
首先在bbox周围扩展,获得模板图像大小s_z,然后再扩展到搜索图像大小s_x,需要满足:
s_z缩放到examplar_size(127)时,s_x缩放到instance_size(255),即保证模板与搜索图像的缩放比相同,才能正确匹配
计算scale_z,计算缩放后延申差值pad,逆缩放后放在s_z两边即可
剪裁和补丁函数:根据box中心坐标与剪裁大小(s_z/s_x)进行剪裁
dataload:
init函数中读取pkl文件,获得tuple,转成字典,再删除序列长度小于2的目标
训练时每次根据索引读出两张图片,都是(255,255)大小的搜索图像,其中一张剪裁后作为模板图像,每次只训练一个目标(随机选取)。
self.video_names:视频文件夹(split拆分后)名称
self.meta_data:key→文件夹名称,value→文件夹内数据名
数据名也是字典,key→跟踪目标序号,value→对应存在该目标的数据名
主要观察getitem的实现:
idx = idx % len(self.video_names)结果范围为(0,len-1)
且idx的最大值与len差距越大,结果越接近均匀分布,用来随机选择某个视频注意变换函数
examplar使用随机拉伸+中心剪裁,instanse使用随机拉伸+随机剪裁
随机拉伸的幅度不大,为0.05,模拟小幅度的尺度变换
拉伸后以图象中心为中心,centrecrop()截取(127,127)的模板图像
搜索图像随机剪裁,模拟中心点偏移,偏移范围在0~3像素之间
图片读取使用路径的md5值索引数据库即可
model中对两种图像的处理:
训练时没有多尺度,instance大小为(B,C,H,W),转换为(1,BC,H,W),用examplar(B,C,h,w)进行分组(共B组)卷积,得到(1,B,H,W)的得分图,计算BCE损失即可
测试:
测试阶段主要注意模板图像与instance图像的获取,与训练不同的是,训练图像是在处理过的图像数据库(都已经转换成instance图像的形式)上截取(127,127)部分,而测试时是在bbox周围截取
s_z
并缩放到(127,127)首先用第一帧bbox对追踪器初始化,self.scales=[scale^-1,1,scale] ,scale=1.0375 ,用于多尺度缩放
并获得初始搜索范围s_x :
self.s_x = s_z + (config.instance_size-config.exemplar_size) / scale_z
model中对模板图像的处理:
转换成(N,256,H,W)的分组卷积核(cout,cin/group_num,h,w),N为尺度个数
更新时:
1.计算三种尺度的s_x,crop+pad获得多尺度图像金字塔
2.对三个尺度的图像计算互相关
3.获得score最大的scale与其对应的map,求出最大值坐标
4.计算坐标与中心的位移,换算成原图尺度
5.更新pos,s_x,target_sz
需要注意的是,s_x与框box的大小必须保持同比例变化,如果s_x一直不变,框会一直在变小/变大,因为scale是由s_x与模板的尺度差距决定的,如果搜索目标变大,则需要scale也变大,这样缩放到255,相对来说搜索目标就变小了scale,和模板图像就能匹配上了。此时,框的大小应该也变化scale倍,因为搜索目标变小scale与模板匹配,说明原box放大scale才能与搜索目标匹配。我们需要保持box在s_x内的比例不变,所以s_x也需要变化scale倍。
对于尺度变化,采用线性函数
((1 - config.scale_lr) + config.scale_lr * scale)
缓冲每次update更新:pos(当前box中心)、s_x(搜索范围)、target_sz(当前box大小)
model对instance的处理:
instance = instance.view(1, -1, H, W)
将(N,C,22,22)的特征图转换成(1,N*C,22,22),进行分组卷积- Author:Lfy
- URL:https://lfymay23ustc.xyz/article/10fa89ac-4c2b-8021-9d4e-ea891a6738c3
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!
Relate Posts