个人理解-Feature Selective Anchor-Free Module for Single-Shot Object Detection(FSAF)

0.文章思想

目前的目标检测算法大多采用了FPN思想并且也使用anchors机制,其实FPN中各个层的anchors主要区别是size的大小,高分辨率特征图的anchors的size小,低分辨率的特征图的anchors的size大。那么目前的目标检测网络是如何将ground-truth (真实目标框)分配到不同层特征图去检测呢?一般的思想就是通过计算ground-truth 和anchors的IoU,筛选出IoU比较大的用于预测ground-truth也就是将对应的anchors设置为正样本 。但是FPN层与层之间的anchors唯一区别是size的不同,长宽比是一样的。那么通过IoU的大小来决定ground-truth 给哪个anchors去预测其中隐含的意思是:anchors的size(不同层的anchors的size是不一样的)与ground-truth 的size非常接近的情况下IoU就会比较大,那么间接的含义是ground-truth 的size决定自己将会被分配到哪个特征层去预测这个目标。(个人理解).。那么这种做法就是启发式的,但是这种做法是否合理呢?

         如图1,三个目标的尺寸是60*60,50*50,40*40,。如果按照启发式的思想,60*60和50*50目标会被分配到不同的特征层去预测,而50*50,40*40,目标会分配到同一个特征层去预测。但是这样是否合理呢?FSAF认为是不合理的,所以提出Feature Selective Anchor-Free Module去解决-----在不使用anchors情况下ground-truth到底应该分到哪个特征层去预测比较合适。

                                          个人理解-Feature Selective Anchor-Free Module for Single-Shot Object Detection(FSAF)

                                                                                                          图1

 

1.提出问题

      FSAF是在RetinaNet基础上改进的(FSAF还可以集成到其他single-stage模型中,比如SSD、DSSD等

       第一:如何在原有网络的基础上创建一个 anchor-free branches?

       第二:如何为 anchor-free branches产生一个监督信号(标签)?

       第三:如何动态的选择FPN中哪个特征层去预测某个目标(Instance)?

       第四:在训练和测试时,如何将anchors-free brances和anchors-base brances结合?

2.如何在原有网络的基础上创建一个 anchor-free branches?

         FSAF模块让每个instance自动的选择FPN中最合适的特征层,在这个模块中,anchors的size不再决定选择哪些特征层进行预测,也就是说anchor (instance) size成为了一个无关的变量,这也就是anchor-free的由来。因此,feature 选择的依据由原来的instance size变成了instance content,实现了模型自动化学习选择FPN中最合适的特征层。

          FSAF以RetinaNet为基础结构,添加一个FSAF分支和原来的classification subnet、regression subnet并行,可以不改变原有结构的基础上实现完全的end-to-end training。FSAF同样包含classification(使用的是sigmoid函数)box regression两个分支,用于预测目标所属的类别和坐标值,如图2所示。

个人理解-Feature Selective Anchor-Free Module for Single-Shot Object Detection(FSAF)

                                                                                                                   图2

3.如何为 anchor-free branches产生一个监督信号(标签)?

第一:一个目标(Instance),假设它的类别是lable = c,并且边界框坐标是个人理解-Feature Selective Anchor-Free Module for Single-Shot Object Detection(FSAF),(x,y)是目标的中心坐标,

            (w,h)是目标的宽和高。

第二:此目标在FPN中的第个人理解-Feature Selective Anchor-Free Module for Single-Shot Object Detection(FSAF)特征层投影的坐标是个人理解-Feature Selective Anchor-Free Module for Single-Shot Object Detection(FSAF),其中个人理解-Feature Selective Anchor-Free Module for Single-Shot Object Detection(FSAF)

第三:定义投影的有效目标框坐标是个人理解-Feature Selective Anchor-Free Module for Single-Shot Object Detection(FSAF),也就是图3中的"car"class的白色区域,其中                                                          个人理解-Feature Selective Anchor-Free Module for Single-Shot Object Detection(FSAF),式中的个人理解-Feature Selective Anchor-Free Module for Single-Shot Object Detection(FSAF)

第四:定义投影的忽略目标框坐标是个人理解-Feature Selective Anchor-Free Module for Single-Shot Object Detection(FSAF),也就是图3中的"car"class的灰色区域,其中                                                          个人理解-Feature Selective Anchor-Free Module for Single-Shot Object Detection(FSAF),式中的个人理解-Feature Selective Anchor-Free Module for Single-Shot Object Detection(FSAF)

                                                  个人理解-Feature Selective Anchor-Free Module for Single-Shot Object Detection(FSAF)

                                                                                                  图3

细看图3

class output:class output是和anchor-base brances并行结构,它的维度是W×H×K,K是总的类别数(应该包含背景类别),                                   class output总共有K个feature maps,在上面我们假设此目标的类别是c(图中的车类别),那么class output                                   的标签维度是W×H×K的张量,在K个feature maps中的第c个feature map的定义是图3中的“car”class。其中白                                   色区域就是正的目标区域个人理解-Feature Selective Anchor-Free Module for Single-Shot Object Detection(FSAF)定义值是1,灰色是忽略区域个人理解-Feature Selective Anchor-Free Module for Single-Shot Object Detection(FSAF)也就是不进行梯度反向传播,黑色是负的目标                                   区域定义值是0. 采用的损失函数是Focal Loss。

box output:box output是和anchor-base brances并行结构,它的维度是W×H×4,4代表偏移量。举例说明偏移量的含义:box                              output的标签是对于有效区域个人理解-Feature Selective Anchor-Free Module for Single-Shot Object Detection(FSAF)中像素点个人理解-Feature Selective Anchor-Free Module for Single-Shot Object Detection(FSAF),4个维度的值是个人理解-Feature Selective Anchor-Free Module for Single-Shot Object Detection(FSAF),其中个人理解-Feature Selective Anchor-Free Module for Single-Shot Object Detection(FSAF),                                         个人理解-Feature Selective Anchor-Free Module for Single-Shot Object Detection(FSAF)是像素位置个人理解-Feature Selective Anchor-Free Module for Single-Shot Object Detection(FSAF)分别相对于个人理解-Feature Selective Anchor-Free Module for Single-Shot Object Detection(FSAF)的 top, left, bottom, right,如图4,此外S=4.0。采用的损失函数                               是IoU Loss。

                          在像素点个人理解-Feature Selective Anchor-Free Module for Single-Shot Object Detection(FSAF),如果预测的偏移量是个人理解-Feature Selective Anchor-Free Module for Single-Shot Object Detection(FSAF),那么个人理解-Feature Selective Anchor-Free Module for Single-Shot Object Detection(FSAF)个人理解-Feature Selective Anchor-Free Module for Single-Shot Object Detection(FSAF)的距离是个人理解-Feature Selective Anchor-Free Module for Single-Shot Object Detection(FSAF),预                            测个人理解-Feature Selective Anchor-Free Module for Single-Shot Object Detection(FSAF)的左上角和右下角的坐标分别是个人理解-Feature Selective Anchor-Free Module for Single-Shot Object Detection(FSAF)个人理解-Feature Selective Anchor-Free Module for Single-Shot Object Detection(FSAF),则预测的边界框坐标就是将

                           个人理解-Feature Selective Anchor-Free Module for Single-Shot Object Detection(FSAF)个人理解-Feature Selective Anchor-Free Module for Single-Shot Object Detection(FSAF)分别乘上个人理解-Feature Selective Anchor-Free Module for Single-Shot Object Detection(FSAF)

                                                                                        个人理解-Feature Selective Anchor-Free Module for Single-Shot Object Detection(FSAF)

                                                                                                                         图4

4.如何动态的选择FPN中哪个特征层去预测某个目标(Instance)?

在anchor-based算法中,通常是基于目标的size分配到指定的特征层,而FSAF模块是基于目标的内容选择最优特征层。记目标个人理解-Feature Selective Anchor-Free Module for Single-Shot Object Detection(FSAF)分配到第个人理解-Feature Selective Anchor-Free Module for Single-Shot Object Detection(FSAF)个特征层的分类损失和定位损失分别如下:
                                                     个人理解-Feature Selective Anchor-Free Module for Single-Shot Object Detection(FSAF)

其中个人理解-Feature Selective Anchor-Free Module for Single-Shot Object Detection(FSAF)是有效区域个人理解-Feature Selective Anchor-Free Module for Single-Shot Object Detection(FSAF)像素点的个数。

那么预测目标个人理解-Feature Selective Anchor-Free Module for Single-Shot Object Detection(FSAF)最优的特征层个人理解-Feature Selective Anchor-Free Module for Single-Shot Object Detection(FSAF)是由下式得到,也就是联合损失函数最小。

                                                        个人理解-Feature Selective Anchor-Free Module for Single-Shot Object Detection(FSAF)

5.在训练和测试时,如何将anchors-free brances和anchors-base brances结合?

在inference中,FSAF可以单独作为一个分支输出预测结果,也可以和原来的anchor-based分支同时输出预测结果。两者都存在时,两个分支的输出结果结合然后使用NMS得到最后预测结果。在training中,采用multi-task loss,即公式如下。

                                                                            个人理解-Feature Selective Anchor-Free Module for Single-Shot Object Detection(FSAF)

权重系数为0.5.

实验结果可以看论文。

文章中难免会有理解错误的地方,欢迎交流讨论。

 

,