小编给大家分享一下Segmentation中anchor free方法怎么实现的,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
3. 基于Segmentation的方法
按照FCOS的说法,它是把每个location都当做一个样本,如下图所示,可以看到,最左面的橙色点在棒球运动员的box内,这个点的gt实际上是该点到box的四个边缘的距离以及box的obj类别,所以最后预测出来的output是HxWxC以及HxWx4,C和4分别代表每个特征图的每个location要预测的该点所属于的类别和该点到box的边界距离。在通过这种方式得到box后,FCOS回合anchor based的方法一样进行NMS等:实际上如果不考虑Classification下面的Center-ness分支,怎么样,会不会觉得非常熟悉?在这里贴一下retinanet的网络图:可以发现,两者最大的差别是最后输出的通道,Retinanet输出的是KA和4A(A代表anchors数量,K代表类别数量),是对每个location位置的A个anchors预测它们的类别和相对偏移量,而FCOS则直接对格子所在的类别和产生box进行预测了,完全没有box的概念,整体上也非常接近语义分割的segmentation思想。这样做的方法会有一个问题,就是box里面,越接近中心的位置往往效果越好,但是越靠近Box边缘,虽然理论上应该仍然是正类,但是因为往往落在obj外,预测效果不佳,对此,FCOS的解决方法是引入一个新的分支centerness,它的gt计算如下:
可以看到,如果location距离box的左边界距离和右边界距离相同,根号内第一项应该是1,同理,当距离上下边界距离一样时候,根号内第二项是1,此时,gt值为1,location恰好处于中心位置。而如果location非常接近边缘,则gt会非常小。这个分支训练以后,在inference阶段将会和classification预测的值相乘作为最终scores得分,从而抑制接近中心点的位置。此外,FCOS还引入了多尺度的概念,如果在FPN的某个level上,t/b/l/r中的最大值大于某个阈值,则认为这个box不适合当前level的feature,从而进行排除。在了解了FCOS之后,认识foveabox也比较简单了。foveabox的不同首先在于多尺度策略和encoding的方法。foveabox的多尺度策略是将不同大小的box根据面积分配到不同level的feature map上,且有重叠。FPN的P3~P7的每个leval的Pl分别有一个基数Sl,取l=3的时候,P3对应的S3是3232,取l=4的时候,P4对应的S4是6464,一直倍增。每个level负责的box的面积范围为,其中n^2是可变化的参数,可以看到,不同leval预测的范围会有重叠,这可以增加一定的鲁棒性:而考虑到不同level预测的box大小不同,预测的box位置坐标也是经过编码的,编码方式如下(z代表系数,具体计算方式见论文):最后,也就是foveabox名称的由来,对于box内部离中心点比较远的抑制方法,foveabox没有centerness那样的分支,而是用了另一个思路,那就是只有box内部比较靠近中心的点才被视作正样本(下图带黑色点的红色区域),如果该点在Box内部但是离边缘比较近,则往往被视作灰色区域,即不算正样本,也不算负样本,梯度回传的时候不考虑(红色box内部白色区域)。正样本所在的矩形框和灰色区域的矩形框大小是由两个不同的伸缩系数控制的。关于FSAF,就没有太多需要介绍的内容了,只需要知道以下三点:1. FSAF在每个location预测box的方式也是预测点到box四个边界的距离,类似FCOS 2. FSAF抑制box内部远离中心点的干扰的方法类似Foveabox,同样把非常靠近中心的矩形区域视作正样本,在box内又离得比较远的不计入梯度计算 3. FSAF的多尺度策略比较特殊,它不会手动分配level预测某个box(这一点和FCOS和Fovea不同,这两本本质上多尺度都用了手动分配的方法),而是在各个尺度上同时计算,看box在哪个level上得到的loss最小,就在这个level的特征上计算,由此实现针对不同obj的特征选择自动化。以上是“Segmentation中anchor free方法怎么实现的”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!