3、 M2Det
特征金字塔(Feature pyramids)被广泛利用在最先进的one-stage目标检测器(例如RetinaNet)和twe-stage目标检测器(例如Mask R-CNN)中,以应对由对象实例的比例变化引起的问题。虽然这些具有特征金字塔的目标检测器取得了很好的结果,但它们有一些局限性,因为它们只是简单地根据backbone的多尺度金字塔结构构造特征金字塔,而backbone最初是为目标分类任务诞生的。基于以上问题,本文作者提出了多层特征金字塔网络(Multi-Level Feature Pyramid Network ,MLFPN)来构建更有效的特征金字塔,用于检测不同尺度的对象。其特点包括:1)融合由backbone提取的多级特征(即多层)作为基本特征。2)将基本特征送入交替联合的细化U形模块和特征融合模块,并利用每个U形模块的解码器层作为检测对象的特征。3)收集具有等效比例(大小)的解码器层,以构建用于物体检测的特征金字塔,其中,每个特征图包含来自多个等级的层(特征)。
图6. M2Det(320 × 320)。M2Det利用骨干和多级特征金字塔网络(MLFPN)从输入图像中提取特征,然后生成密集的边界框和类别分数。在MLFPN中,FFMv1融合了骨干网的特征图来生成基础特征。每个TUM生成一组多尺度特征,然后由TUM和FFMv2交替联合提取多层次多尺度特征。最后,SFAM将这些特征聚合成一个多级特征金字塔
如图24所示,首先将backbone提取的多级特征(即多层)融合为基础特征,然后将其输入MLFPN中。MLFPN包含交替连接的Thinned U-shape Modules(TUM)、Feature Fusion Module(FFM)和Scale-wise Feature Aggregation Module (SFAM)。其中,TUMs和FFMs提取出更具代表性的多级多尺度特征。SFAM最后利用scale-wise拼接和channel-wise attention来聚合收集具有等效尺度的特征图,构建目标检测的最终特征金字塔。显然,构成最终特征金字塔的decoder层要比backbone中的层深得多,也就是说,它们更具代表性。此外,最终特征金字塔中的每个特征映射都由来自多个级别的decoder层组成。因此,作者将这个特征金字塔结构称之为MLFPN。
特征融合模块FFM
FFM用于融合M2Det中不同级别的特征,先通过1x1卷积压缩通道数,再进行拼接。具体而言:FFMv1使用两种不同scale的backbone里的feature map作为输入,所以在拼接操作之前加入了上采样操作来调整大小。FFMv2把相同尺度的base feature 和 前一个TUM的输出的最大feature作为输入,并产生融合了的feature送入下一个TUM。具体细节如下图所示。
图7. FFMv1和FFMv2细节
细化U型模块TUM
TUM使用了比FPN和RetinaNet更薄的U型网络。在上采样和元素相加操作之后加上1x1卷积来加强学习能力和保持特征平滑度。TUM中每个解码器的输出共同构成了该TUM的multi-scale输出。每个TUM的输出共同构成了multi-level&multi-scale特征,前面的TUM提供low level feature,后面的TUM提供high level feature。计算如下:
TUM的细节如下图所示:
图8. TUM细节
尺度特征聚合模块SFAM
SFAM聚合TUMs生成的多级多尺度特征,以构造一个多级特征金字塔。第一步,SFAM沿着通道channel维度将拥有相同scale的feature map进行拼接,这样得到的每个尺度的特征都包含了多个level的信息。第二步,加入channel-wise attention,以更好地捕捉有用的特征。SFAM的细节如下图所示:
图9. 尺度特征聚合模块的说明。SFAM的第一阶段是沿通道维度将具有同等尺度的特征串联起来。然后,第二阶段使用SE关注,以自适应的方式聚集特征
具体的,在squeeze步骤中使用全局平均集合来生成 channel-wise 的统计数据z∈RC。而为了充分捕捉channel-wise 的依赖性,下面的激励步骤通过两个全连接层来学习注意力机制:
最后的输出是通过对输入的X进行重新加权来获得的,激活s:
M2Det的主干网络采用VGG-16和ResNet-101。MLFPN的默认配置包含8个TUM,每个TUM包含5个卷积核5个上采样操作,所以每个TUM的输出包含了6个不同尺度的特征。在检测阶段,为6组金字塔特征每组后面添加两个卷积层,以分别实现位置回归和分类。后处理阶段,使用soft-NMS来过滤无用的候选框。
当前 SOTA!平台收录 M2Det 共 2 个模型实现资源。
项目 | SOTA!平台项目详情页 |
M2Det |
前往 SOTA!模型平台获取实现资源:https://sota.jiqizhixin.com/project/m2det |
4、FCOS
本文提出了一个全卷积的one-stage物体检测器( fully convolutional one-stage object detector ,FCOS),以每像素预测的方式解决物体检测,类似于语义分割。几乎所有最先进的物体检测方法,如RetinaNet、SSD、YOLOv3和Faster R-CNN,都依赖于预先定义的anchor box。而FCOS是anchor box free的,也是proposal free的。通过消除预定义的anchor box,FCOS完全避免了与anchor box有关的复杂计算,如在训练期间计算重叠度。更重要的是,还避免了所有与anchor box有关的超参数,这些参数往往对最终的检测性能非常敏感。
FCOS 方法是第一个使用逐个像素点来预测的目标检测方法,并且提出了 centerness 分支,来抑制 low-quality bbox 并提升检测效果。FCOS 的主要工作过程如下:首先,将图像输入骨干网络,然后将 8 倍、16 倍、32 倍下采样的特征图送入 FPN,得到 FPN 的 5 层输出特征(8/16/32/64/128 倍下采样);接着,在 FPN 的每一层后面都使用分类和回归head(不同分辨率特征的 head 参数是共享的),对 FPN 特征图上的每个位置都进行得分和位置的预测,得分是属于类别的得分,位置是该特征点到 gt 框的左、上、右、下四条边的距离;然后,将FPN 的每层特征图中的点都当做初始 anchor point,并将 anchor point 映射回原图中,根据 anchor point 是否落入 gt 框内部(或 3x3 区域内)来判断是否为正 anchor,其他的特征点赋值 80,作为负样本;接着,对所有正 anchor 分配对应的 gt,并根据 gt 的真实面积大小将这些 anchor 分配到不同的 FPN 特征图上去 (每层特征图负责对应大小的目标,((-1, 64), (64, 128), (128, 256), (256, 512), (512, INF))),如果某个 anchor 属于多个 gt 框内部,则选择面积最小的作为对应的 anchor。
图10. FCOS网络结构,其中C3、C4和C5表示骨干网络的特征图,P3到P7是用于最终预测的特征等级。H×W为特征图的高度和宽度。'/s'(s=8,16,...,128)是该级别的特征图对输入图像的下采样率。作为示例,所有的数字都是用800×1024的输入计算的
对于特征图F_i中的任意位置(x, y),可以将其推回到该层特征图的输入特征图的位置 ( ⌊ s /2 ⌋ + x s , ⌊ s /2 ⌋ + y s ) 。本文提出的检测器直接回归每个位置上的目标的bbox,也就是将每个像素位置看做一个训练样本,而非将每个 anchor box 看做训练样本。如果某个像素位置落入真实的 bbox 内,而且类别和真实的类别相同,则定义为正样本,否则判定其为负样本,且类别为 0 (background class)。t^* = (l^* , t^* , r^* , b^* ) 是每个像素位置(sample)所要回归的目标,分别表示从 sample 的位置到 bbox 的四个边的距离,如图 28 左侧所示。当一个点同时落入多个框的时候,被认为是 “ambiguous sample”,也就是 “模棱两可” 的框,选择最小面积的框作为回归目标。如果一个像素位置 (x, y) 和 bounding box B_i是相关的,则训练时的回归目标可以被格式化为如下形式:
在骨干网的后面连接了 4 层卷积层,来进行分类和回归,并且由于回归的目标总数正的,所以,作者在回归分支的后面使用exp(x)来将任何(0,∞) 的实数进行映射。所采用的分类器就是C 个二分类分类器。所采用的损失函数如下:
进一步,作者分析了FOCS可能存在的两个问题:(1)在 anchor-based 检测器中,由于降低分辨率导致的低 recall 可以通过使用低 IoU 阈值来得到补偿。但对于 FCOS,可能第一眼会觉得低分辨率会造成其 recall 比 anchor-based 方法低的原因在于其不可能恢复在最终的特征图上没有对应sample的目标。(2)在训练过程中,到底该位置应该回归哪个框?这个模棱两可的问题可能降低 FCN based 检测器。
为了解决上述问题,FCOS 直接限制 bbox 回归的数值的范围。
首先,在每个特征图的每个位置上计算回归目标值 t^* = (l^* , t^* , r^* , b^* );接着,如果某个位置的结果满足max(l^* , t^* , r^* , b^*)>m_i或 max(l^* , t^* , r^* , b^*)<m_{i-1},则认定该位置为负样本,也不用回归 bbox。m_i是在 level i 的特征图需要回归的最远距离。m_2, m_3, m_4, m_5, m_6分别设置为 0, 64, 128, 256, 512 和 ∞。由于不同大小的目标被分配到了不同 level 的特征图上,而且有重叠的目标一般大小都不一样,可以被分配到不同尺度的特征图上去,所以,多尺度金字塔特征能够很好的解决 FCOS 的前景模棱两可问题;最后,作者对不同尺度特征共享 head,可以提高检测效果,并提升了效率。但是,由于不同 level 的特征图需要回归不同尺度的目标,所以使用一个共享head是不太合理的。故此,作者没有使用标准的exp(x),而是使用了 exp(s_ix),s_i也是一个可训练的参数,可以根据特征图的 level 自动调节尺度。
虽然使用 FPN 可以弥补不同尺度目标的识别问题,但 FCOS 还是和 anchor-based 方法的效果有一定的差距。主要原因在于,预测生成了很多距离目标中心点很远的低质量 bbox。作者在原来的两个 branch 的基础上,添加了一个 centerness 分支,来预测每个位置的 “centerness”,即该位置和真实目标中心点的位置。Centerness 是给所有判定为正样本的样本点来计算的,判定为负样本的样本点是不会被计算 Centerness 的,可以看做是对所有的正样本,按其距离 gt 中心点的距离来设置权重,距离越近,则质量越高,权重越大,越有可能被 NMS 排序的时候排到前面。下面的公式展示了 centerness 真值的计算方法,loss 使用的是二值交叉熵损失函数。
从 anchor-based 检测器的角度来看,anchor-based 方法使用两个 IoU 阈值 T_{low}和T_{high}来将 anchor 分为 negative、ignore、positive。centerness 可以被看做一个 soft threshold。
当前 SOTA!平台收录 FOCS 共 5 个模型实现资源。
项目 | SOTA!平台项目详情页 |
FOCS | 前往 SOTA!模型平台获取实现资源:https://sota.jiqizhixin.com/project/fcos |