”
计算机视觉研究院专栏
作者:Edison_G
目标检测发展已经到了一个瓶颈,但是依然有很多优秀的产出,比如最近比较火热的“Anchor—Free”,貌似在该机制下精度有一定程度的提升,今天博主基于之前积累的知识,为大家分享基于Anchor的优化,主要涉及动态特征选择Anchor,增加深度特征的表示,最终精度大幅度提升。
1.前言
基于无anchor机制的特征选择模块,是一个简单高效的单阶段组件,其可以结合特征金字塔嵌入到单阶段检测器中。FSAF解决了传统基于anchor机制的两个限制:
(1) 启发式的特征选择
(2) overlap-based anchor采样
FSAF的通用解释是将在线特征选择应用于与anchor无关的分支的训练上。即无anchor的分支添加到特征金字塔的每一层,从而可以以任意层次对box进行编码解码。训练过程中,将每个实例动态的放置在最适合的特征层次上。在进行inference时,FSAF可以结合带anchor的分支并行的输出预测结果。FSAF主要包含无anchor分支的实现及在线特征选择两部分。FSAF结合RetinaNet在COCO检测任务上实现更高的准确率及速度,获得了44.6%的mAP,超过了当前存在的单阶段检测网络。
但是,除了Anchor-Free,其实大部分检测框架中使用的还是Anchor机制,在详细分享今天的干货之前,和大家预热下 Anchor refinement module (ARM)。
RefineDet中使用ARM模块对anchor进行微调,然后将微调后的anchor送到ODM模块中进一步的预测。但是,对比ODM模块和SSD就会发现。ODM中输入的anchor尺寸不在是固定的,而是经过调整之后的。也就是说,在SSD中anchor的W,H是一个标量,但在ODM却成了一个变量。更为重要的是,anchor成为一个变量后,ODM中的输入并没有发生变化,依旧是原始未经过调整anchor对应的feature-map,这种不对等性限制了网络的性能。
所以Anchor的设计对One-Stage网络的性能至关重要!
就如上述所说,ARM被提出来调整默认anchor的初始化,为检测器提供了更好的anchor参考。然而,这个模块带来了另一个问题:特征映射中的所有像素都具有相同的感受野,而与每个像素相关联的anchor具有不同的位置和大小。这种不一致可能导致不太有效的检测结果。
于是,我想是不是应该有一个动态特征选择操作,在一个特征映射中选择新的像素,从中获取最佳的anchor。根据新的anchor点位置和大小选择像素,使这些像素的感受野能够很好地适应anchor区域,这使得检测器,特别是回归部分更容易优化。此外,为了提高所选特征像素的表达能力,还设计了一个双向特征融合模块,将早期和深层特征相结合。
在One-Stage中,SSD和Yolo是大家常见的检测框架,今天我就以SSD为例,和大家详细说下具体细节!
ARM是One-Stage检测器中使用的类似RPN模块,是[Shifeng Zhang, Longyin Wen, Xiao Bian, Zhen Lei, and Stan Z Li. Single-shot refinement neural network for object detection. In Proceedings of the IEEE conference on computer vision and pattern recognition, 2018]首先提出的。它在多尺度检测框架下,在每个 detection source layer上附加两个卷积核。ARM的主要目的是为每个anchor分配背景/前景分数和预测调整的位置。利用二进制分类分数筛选出负样本,并将细化的anchor发送到最终的目标检测模块(ODM),与SSD中的检测器头完全相同。为了更好地分析ARM对探测器的影响,首先给出了探测器头的边界框回归和分类的定义。
Bounding box regression
从上面的分析可以看出,ARM将导致输入特征点的感受野与其相关的新细化anchor之间的不一致。这种不一致可能导致次优检测器,特别是对于回归部分。
一种简单的解决方案是基于anchor的新形状动态采样检测器头的特征点。这样,特征点就能够感知anchor的存在。特征选择函数可以写成如下:
整体的框架就差不多了,之后进行简单的实验测试,验证其是否具有较好的性能!
上表是在VOC数据集中测试,使用的是SSD512网络。
© THE END