大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺
一 SiamFC++
网络结构及处理流程如下:
注意
- 大多数算法对于分类损失都采用交叉熵损失,而SiamFC++在分类分支中计算cls_score与center-ness score采用了不同的损失函数,cls_score采用focal loss,这样做是为了缓解正负样本不均衡问题;center-ness score则采用交叉熵loss。最终用这两部分对应元素相乘得到的结果是更加合理的分类结果,center_ness的作用就是对每一个正样本位置施加权重,离中心近的权重高,离中心远的权重低使得分类更加合理,增强了鲁棒性。
- 对于feature map映射问题,由于采用改进的Alexnet(no-padding),所以得到的feature map是中心对称的,而feature map上的一个像素的移动对应原图上8个像素移动(网络步长是8),因此只需计算feature map上所有像素在原图所占的区域,然后用原图大小减去映射回去的尺寸大小再除以2得到了offset,这样就确定了每一个点的位置,方便计算,至于映射回去的点是感受野的中心,验证过程如下:
最终的感受野是175,中心是87.5,这与代码中是相对应的。
二 SiamBAN
网络结构及处理流程如下:
注意
- 首先这篇文章的backbone与SiamRPN++是一样的,Resnet50,设置后2层stride为1,conv4 atrous rate=2,conv5 atrous rate=4,并且后续的处理也一致,都对后三层的特征进行融合。
- 不同之处就在于SiamBAN是anchor-free,不需要设置anchor,那么自然正负样本的判别也要改变,在基于anchor-based的方法中,正负样本的判定依据是anchor与GT之间的IOU,若满足一个阈值就判定为正样本;而对于anchor-free,比如SIamFC++中,若feature map上的像素点映射回原图上落在了GT中则判定为正样本;本文创新点就在于对正负样本的判别,如图:
作者提出新的正负样本判别方法,使得划分更加准确,提升了性能;当feature map上的像素映射回原图落在椭圆E2中则判别为正样本,落在椭圆E1之外判为负样本,落在E1和E2之间则忽略。 - 对于feature map映射问题,SiamBAN的映射回原图的计算与SiamFC++的映射计算不同,根据代码得到的第一个映射点为31,计算感受野:
可与看到感受野的大小已经超过了原图,但在计算感受野中心的时候需要注意网络的padding,这是我之前忽略的点,由于Resnet的网络特性,padding是必要的,所以在计算的时候需要考虑全局padding,计算得到的全局padding为206,所以相当于输入尺寸为255+2062=667,最终的1717的feature map也就相当于是在尺寸为667大小的输入上以感受野大小475为kernel,全局stride=8为步长进行卷积运算。与SiamFC++处理方法不同的主要原因还是因为padding的问题。此外在该网络的template分支的neck部分对15×15的feature map进行了crop操作,只取中间7×7的部分,这么做就是为了消除padding的影响。而对于search分支没有这一步,个人理解为:网络从template分支提取特征,而search分支只是用来搜索相应的特征,有padding的地方自然不会存在相应的特征,就不会对结果产生影响,因此也就不需要crop操作。
三 个人想法
对于Siamese网络,目前的方法都是想办法提高分类分支的性能,比如用更深的网络,增加center-ness分支,精细正负样本的划分等,而对于回归分支都是计算映射点与GT四条边之间的offsetm,没有太大改变,思考对于网络更进一步的改进的想法,则还需要更多的积累。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/189134.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...