SiamMask
代码中的demo
- 配置环境,加载预训练模型后形成siammask模型,加载图片序列。
- 选择跟踪的对象
- cv2.selectROI(窗口名字,要截取的图片,是否十字画矩形,是否以中心画矩形)。返回(左上角坐标,宽,高)
- 执行跟踪:
for f,im in enumerate(ims)
- 初始化
- 目标中心位置获取
- 目标尺寸获取
- 跟踪器初始化
- 跟踪
- 获得跟踪结果
- 定位目标位置(中心加尺寸)
- 掩码输出:大于阈值的输出1,否则输出0
- 画框
- cv2.polylines(图片,多边形的顶点坐标,是否闭合,颜色,线条粗细)
- 初始化
跟踪器初始化
-
计算模板图像的边长
- 划定比目标( w o l d , h o l d w_{old},h_{old} wold,hold)大一点的尺寸( w n e w , h n e w w_{new},h_{new} wnew,hnew)。
w n e w = w o l d + w o l d + h o l d 2 w_{new}=w_{old}+\frac{w_{old}+h_{old}}{2} wnew=wold+2wold+hold
h n e w = h o l d + w o l d + h o l d 2 h_{new}=h_{old}+\frac{w_{old}+h_{old}}{2} hnew=hold+2wold+hold
- 判断划定的新尺寸是否超出图片
- 在图片中截取新尺寸的图片补丁
- 将图片补丁resize127x127
-
提取模板图像的特征
-
设置汉宁窗矩阵(尺寸为得分图大小)。然后将汉宁窗按行降到一维,一共5行。(5x( w × h w\times h w×h))
跟踪器进行跟踪
- 计算检测图像的边长
- 以前一帧的中心为中心,以前一帧模板边长的2倍为边长,截取图像补丁。
- 先按照比例扩大边长,然后截取,最后resize
- 以前一帧的中心为中心,以前一帧模板边长的2倍为边长,截取图像补丁。
- 将模板图像和检测图像互相关,然后生成2k个cls结果和4k个loc结果和17x17x(63x63)的mask输出。(与RPN网络还是有区别的,RPN是先将通道扩充到2k(4k或(63x63))再求互相关)
- 利用Siam RPN的知识,计算出不同回归框的坐标。利用尺度惩罚和位移惩罚,计算出每个回归框的得分。找到最大得分的回归框索引(第几个回归框)
- 对mask分支的处理
- 利用最大得分的回归框索引,找到该回归框的中心点位置。
np.unravel_index
- 然后以该中心点为中心,以该回归框的尺寸为尺寸截取特征图补丁。
- 利用sharp mask网络,对该补丁进行处理,得到新的特征图补丁。
- 将该补丁输入sigmoid函数,大于0.5阈值的输出255,小于输出0,生成二进制掩码。
- 利用最大得分的回归框索引,找到该回归框的中心点位置。
- 利用二进制掩码生成回归框。比如min-max。实现回归。