siamfc代码解读_分析SiamFC

siamfc代码解读_分析SiamFC训练过程训练过程,网络的最终输出是17×17的responsemap.网络的输入需要保证两条支路上目标物体在输入图片的中心位置,且目标物体在整幅图像中有一定的占比。对于模板图片模板图片大小:127×127×3。以目标中心为裁剪中心,确定一个稍大的正方形(记边长为C)裁剪区域(可能会超出原图片,以图片颜色均值填充),然后再将裁剪区域resize到127×127大小。根据paper,C…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

89909348823af7783e93f541b671eced.png

训练过程

训练过程,网络的最终输出是 17×17 的response map.

网络的输入

需要保证两条支路上目标物体在输入图片的中心位置,且目标物体在整幅图像中有一定的占比。

对于模板图片

模板图片大小: 127×127×3。以目标中心为裁剪中心,确定一个稍大的正方形(记边长为 C )裁剪区域(可能会超出原图片,以图片颜色均值填充),然后再将裁剪区域resize到127×127大小。根据paper,C 的计算公式如下(设目标框的大小为w×h):

$$

\begin{array}{ll}

w’ =w+(w+h)·0.5 \\

h’ =h+(w+h)·0.5 \\

C = \sqrt{w’*h’}

\end{array}

$$

对于搜索图片

搜索图片大小:255×255×3。以目标中心为裁剪中心,需要先确定上面的 C ,然后在按比例(127:255)确定搜索图片的正方形裁剪区域边长 C‘。

训练的细节

维度问题

具体实现上,卷积后的通道数和paper描述的不同。

卷积操作

训练batch中每个输入样本对的卷积操作可以用groups参数实现。

batch norm

添加 batch norm 层,否则loss会出现nan的情况。要对其进行初始化。

label

训练网络的输出是一个 17×17 的 2D response. 由于SiamFC是全卷积网络,所以不用关心物体在图片中的位置,将以物体为中心的图像输入两条支路。这样可以直接将 ground truth 设为中心响应最大的 17×17 2D response:根据输入和网络缩放情况,将 response 中心点及其 Manhattan Distance 距离为2的点设为1,其余点设为0(与paper中稍不同,因为采用的是binary_cross_entropy_with_logits损失函数)。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18labels:

[[0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]

[0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]

[0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]

[0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]

[0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]

[0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]

[0. 0. 0. 0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0.]

[0. 0. 0. 0. 0. 0. 0. 1. 1. 1. 0. 0. 0. 0. 0. 0. 0.]

[0. 0. 0. 0. 0. 0. 1. 1. 1. 1. 1. 0. 0. 0. 0. 0. 0.]

[0. 0. 0. 0. 0. 0. 0. 1. 1. 1. 0. 0. 0. 0. 0. 0. 0.]

[0. 0. 0. 0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0.]

[0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]

[0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]

[0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]

[0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]

[0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]

[0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]]

Manhattan Distance = 16 / 8, 8是网络stride的总步长, 16是超参数。

normalize response1responses_maps = 0.001 * responses_maps

Score adjustment is simply normalizing response to the range (e.g. [-10, 10]) where sigmoid is not saturated. Without it, the scale of the response will be on the order of 1e3 and the gradients vanish.

For most of the time, set the scale to 1e-3 and the train_bias to True should be fine.

lr_decay_factor这是根据作者的 learning rate schedule 得到的。作者在 50 个 epoch 内,learning rate 从 1e-2 下降到 1e-5,设 x = lr_decay_factor, 则有 1e-2 * x ^ (50 -1) = 1e-5, 求解得到 x = 0.8685113737513527.

关于augmentation

为了增强鲁棒性,对输入图片加入干扰。由于response map 上相邻的两点在输入的搜索图片上对应区域中心的间隔为2×2×2=8. 所以,可以让模板图片和搜索图片的中心(也就是目标物体)在8×8的区域内随机取点(保证二者的最大间隔不超过8)。

测试过程

网络的输入

模板图片是第一帧上crop和resize的区域,搜索图片则根据上一帧的预测bbox确定,具体方法和训练过程一样。

确定物体中心和大小

要注意如何确定输入的 search 区域上目标框的中心和大小:

找到 一号最大响应点 ,确定尺度:三个17*17的 2D response 分别经过16倍双三次插值上采样变成三个272*272大小的2D response。

对于第一个和第三个非正常尺度的 2D response 乘以一个惩罚值(这里是 0.9745 )。第二个是正常尺度(与原图1:1),可以将惩罚值看做 1.0 。

选取惩罚后的三个 2D response 中最大值所在的那一个 response 对应的尺度作为目标的最佳尺度 best scale ,将这个 response 称为 best response (272×272)。

找到 二号最大响应点 ,将此最大相应点对应到输入的 search 区域,确定目标框的中心:对 best response (272×272) 进行归一化处理,然后用一个对应大小的余弦窗(hanning window)进行惩罚(余弦窗中心位置的值最大,往四周方向的值逐渐减小。因为目标物体靠近区域中心,这样做可以看做是对预测时出现较大位移的惩罚)。

找到处理后的 best response (272×272) 中最大值的坐标,将这个坐标对应到输入的 search 区域上的一个点(通过和中心的距离来对应),作为 search 区域中预测的目标物体中心位置。

确定目标框的大小:由 best scale 和初始帧中的目标框大小确定当前预测框的大小,宽高比保持不变 。

测试的细节

关于加窗

具体计算过程:

1response = (1 – 0.176) * response + 0.176 * hanning_window

0.176 (22/125) 这个超参数的由来并没有特别说明。

关于尺度的选择

d088c6c3d8a6769f99d81a6aaa7b10fd.gif

3尺度情况下

输入crop:

将原crop边长(记为 C ) 乘以下面的尺度,得到三个新的crop边长,按新边长进行区域裁剪:

$$

scales = [1.0375^{-1}, 1.0375^{0}, 1.0375^{1}]

$$

1.0375 (83/80) 这个超参数的由来并没有特别说明。

惩罚:

对于三个尺度上的最大值,分别乘上 [0.9745, 1, 0.9745] 作为惩罚,然后再比较三者中的最大值,作为最终尺度。

0.9745 这个超参数的由来并没有特别说明。

bbox更新:

确定最终bbox的尺度:

1

2update_scale = (1 – 0.59) * 1.0 + 0.59 * new_scale

bbox_w_h *= update_scale

0.59 这个超参数的由来并没有特别说明。

中心点到输入图片的映射

backbone采用的是AlexNet,共有3次stride操作,所以 response map 上相邻的两点在输入的搜索图片上对应区域中心的间隔为2×2×2=8. 从距离中心的位置可以推断 scaled crop 上的位置,进一步推断出原图上的位置。

ada7beef39f93570d76cfc45ae85c7b4.png

s 是选择出来的 best scale.

$(x_4, y_4)$ 是预测的目标中心$(x_p, y_p)$相对于上一帧的目标中心$(x_l, y_l)$的偏移量,有:

$$

\begin{array}{ll}

x_p = x_l + x_4 \\

y_p = y_l + y_4

\end{array}

$$

改进模板图像始终是第一帧,未涉及更新。

bbox纵横比不能改变。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/186993.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 《MySQL45讲》读书笔记(三):内存数据刷盘机制

    《MySQL45讲》读书笔记(三):内存数据刷盘机制此文为极客时间:MySQL实战45讲的12节的学习笔记一、mysql的刷盘机制而之前提到过,mysql使用了WAL技术,即更新的时候先更新内存中的数据,然后必要的时候再将内存中的数据刷入磁

    2022年8月16日
    5
  • include用法及搭配(include相关短语)

    iostream与iostream.h#include<iostream.h>//这个就是1998年标准化以后的标准头文件#include<iostream>//这个就是标准化以前的头文件更本质上的区别就是iostream把标准C++库的组件放在一个名位std的namespace里面。而相对的iostream.h则将这些标准组件放在全…

    2022年4月14日
    70
  • kafka批量删除topic_kafka清空数据

    kafka批量删除topic_kafka清空数据一般情况下,是不会删除数据的。到达一定时间后,kafka会自动删除。如果一定要删除可以删除topic在重建topic了No.1:如果需要被删除topic此时正在被程序produce和consume,则这些生产和消费程序需要停止。因为如果有程序正在生产或者消费该topic,则该topic的offset信息一致会在broker更新。调用kafkadelete命令则无法删除该topi…

    2022年10月17日
    2
  • HDU 3415 Max Sum of Max-K-sub-sequence(单调队列)

    HDU 3415 Max Sum of Max-K-sub-sequence(单调队列)

    2022年1月12日
    45
  • MySQL常用命令大全(完整)

    MySQL常用命令大全(完整)打开Linux或MacOS的Terminal(终端)直接在终端中输入windows快捷键win+R,输入cmd,直接在cmd上输入1、mysql服务的启动和停止netstopmysqlnetstartmysql启动失败可按快捷键win+R,输入services.msc,找到MySQL服务器的名称启动2、登陆mysqlmysql(…

    2022年6月30日
    24
  • 逻辑与(&&)、逻辑或(||)、按位与(&)、按位或(|)、按位异或(^)、按位取反(~)

    逻辑与(&&)、逻辑或(||)、按位与(&)、按位或(|)、按位异或(^)、按位取反(~)按位与计算方法:转换为二进制后,不够的位数补齐,然后通过0为false1为true的规则,对每一位之间进行与的运算(只有true+true才为true),最后再将数转回十进制。按位或计算方法:转换为二进制后,不够的位数补齐,然后通过0为false1为true的规则,对每一位之间进行或的运算(只有false+false才为false),最后再将数转回十进制。异或运算这是一种可以不用加号…

    2022年6月6日
    38

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号