机器之心专栏
本专栏由机器之心SOTA!模型资源站出品,每周日于机器之心公众号持续更新。
本专栏将逐一盘点自然语言处理、计算机视觉等领域下的常见任务,并对在这些任务上取得过 SOTA 的经典模型逐一详解。前往 SOTA!模型资源站(sota.jiqizhixin.com)即可获取本文中包含的模型实现代码、预训练模型及 API 等资源。
本文将分 3 期进行连载,共介绍 17目标检测任务上曾取得 SOTA 的经典模型。
  • 第 1 期:R-CNN、SPP-Net、Fast R-CNN、Faster R-CNN、OHEM
  • 第 2 期:R-FCN、Mask RCNN、YoLo、SSD、FPN、RetinaNet
  • 第 3 期:RRC detection、CornerNet、M2Det、FOCS、ObjectBox
您正在阅读的是其中的第 3 期。前往 SOTA!模型资源站(sota.jiqizhixin.com)即可获取本文中包含的模型实现代码、预训练模型及 API 等资源。
本期收录模型速览
模型SOTA!模型资源站收录情况模型来源论文
RRC detection
https://sota.jiqizhixin.com/project/rrc-detection
收录实现数量:1
Accurate Single Stage Detector Using Recurrent Rolling Convolution
CornerNet
https://sota.jiqizhixin.com/project/cornernet
收录实现数量:5
支持框架:PyTorch、PaddlePaddle
CornerNet: Detecting Objects as Paired Keypoints
M2Det
https://sota.jiqizhixin.com/project/m2det
收录实现数量:2
支持框架:PyTorch
M2Det: A Single-Shot Object Detector based on Multi-Level Feature Pyramid Network
FOCS
https://sota.jiqizhixin.com/project/fcos
收录实现数量:5
支持框架:PyTorch、TensorFlow等
Fully Convolutional One-Stage Object Detection
ObjectBox
https://sota.jiqizhixin.com/project/objectbox 
收录实现数量:1
支持框架:PyTorch、TensorFlow
ObjectBox: From Centers to Boxes for Anchor-Free Object Detection
目标检测
作为计算机视觉的基本问题之一,是许多其他计算机视觉任务的基础,如实例分割、图像字幕、对象跟踪等。简单来说,目标检测就是对图片中物体正确分类,同时找到物体的具体位置,具体是指识别图片中有哪些物体以及物体的位置(坐标位置)的技术。在互联网、大数据、人工智能等技术的发展浪潮下,目标检测展现出巨大的应用价值,受到工业界、学术界越来越多的关注。


目标检测的发展大致经历了两个历史时期:“ 传统的目标检测时期 ” ( 2014年以前 ) 和 “ 深度学习的目标检测时期 ” ( 2014年以后 )。本文重点回顾深度学习时代的经典模型。在深度学习时代,目标检测可以分为两类:“ two-stage detection ” 和 “ one-stage detection ”,前者将检测框定为一个 “ 从粗到细 ” 的过程,而后者将其定义为 “ 一步完成 ”。我们在介绍过程中,将分两类进行分析。两阶段模型(two-stage detection)因其对图片的两阶段处理得名,也称为基于区域(Region-based)的方法,R-CNN系列工作就是这一类型的代表。单阶段模型(one-stage detection)没有中间的区域检出过程,直接从图片获得预测结果,也被称为Region-free方法。


本文回顾目标检测中必备的TOP模型,包括one-stage模型和two-stage模型
一、two-stage 模型

1、 RRC detection

很多成功的精确物体检测和定位方法都使用了
R-CNN
型两级卷积神经网络(CNN)的一些变体,在第一阶段提出合理的区域;第二阶段用于决策细化。这些方法尽管训练简单,部署效率高,但在基准测试中考虑mAP的高IoU阈值时,one-stage检测效果并不好。本文提出了一种one-stage端到端可训练物体检测网络来克服这一局限。作者通过在多尺度特征映射上引入循环滚动卷积( Recurrent Rolling Convolution ,RRC)架构来构建对象分类器和“深入上下文”的边界框回归器来实现这一点(deep in context)。

一个鲁棒性较强的检测系统能够检测不同尺寸及大小的物体。在Faster R-CNN中,依赖于在最后一层卷积层上进行3x3的重叠区域的较大的感受野同时检测大尺寸及小尺寸的物体。由于pooling 层的使用,最后一层的Feature map要比输入图片的分辨率要小的多。这在小目标的检测任务中是有问题的。因为,低分辨率的feature map对小目标的细节表示是较弱的。将多尺寸的图片送入网络是解决上述问题的一种方式,但计算效率仍不足。SSD提出了一种有效的替换措施。利用大多数CNN网络中存在的一种情况进行目标检测,不同层的中间feature maps由于pooling操作而具有不同的尺寸。因此,可以利用高分辨率的feature maps检测相对小的目标,而利用低分辨率的feature maps检测相对较大的目标。然而,SSD仍无法超越two-stage的处理方法。实际上当在较高IOU的比较上,二者之间的差距还会加大。

本文对SSD进行改进,
对SSD 嵌入 contextual information 使其可以同时检测大目标和小目标。在SSD中使用多尺度特征图可以在数学上定义如下:

这里Φ_n表示feature map中的层n,fn(·)是在feature map中将第(n-1)层转换为第n层的非线性块。fn(·)可以是卷积层、池化层、ReLU层等的组合,f1(I)是将输入图像转移到第一层特征映射的第一个非线性块。τn(·)是将第n层特征图转换为特定比例范围的检测结果的函数。D是聚合所有中间结果并生成最终检测的最终操作。SSD中强假设就是:每一层特征对于检测目标是足够复杂的 ,包含的信息是足够的。即,Φ满足:1)特征的尺寸足够大,包含足够的目标细节;2)将原始输入图像映射到当前特征的特征提取函数足够的层深,这样可以得到合适的 high level abstraction ,即得到目标的抽象信息;3)特征层包含合适的contextual information,基于这些信息可以解决 overlapping objects, occluded objects, small objects, blur 或是saturated objects等问题。

为了克服SSD的这些约束,本文提出了一个 Recurrent Rolling Convolution。替换方法为设计一个迭代的处理过程,每一步都改变一点,但一直保持增长。处理过程可以用如下表达式进行描述:


如果对每个feature map 应用上式,就是本文提出的RRC结构。具体的过程如图18所示:

图1. RRC图示。该图示出了两次连续迭代的RRC。在每个阶段中,箭头表示自上而下/自下而上的特征聚合。这些特征聚合的所有权重都是跨阶段共享的。箭头所选择的特征被连接到相邻的特征图并由虚线框示出。在各阶段之间,还有额外的1x1卷积运算符将聚合特征映射转换为其原始大小,以便它们为下一个RRC做好准备。这些权重也在迭代中共享。每个RRC迭代都有自己的输出,并在训练期间连接到自己的损失函数

图1显示了如何使用简化的VGG-16骨干模型将RRC应用于KITTI数据集。输入图像的大小为1272x375,有3个通道,因此原始conv4_3层和FC7层的大小分别为159x47x512和80x24x1024,其中512和1024是通道数。在特征聚合之前,使用额外的3x3卷积层来进一步将它们的通道减少到256。在SSD之后,还使用了层conv8_2,conv9_2和conv10_2进行多尺度检测,不同之处在于conv8_2层有256个而不是512个通道。作者发现多尺度特征图中的统一通道编号可以促进更一致的特征聚合。

作者使用一个卷积层和一个反卷积层来向下聚合特征。例如,对于层conv8_2,使用具有1x1内核的卷积层来生成大小为40x12x19的feature map。经过ReLU和反卷积层后,它们连接到FC7。同样,图中的所有左箭头指示这种向下操作。使用一个卷积层和一个最大池化层来执行向上特征聚合。另外以图层conv8_2为例,1x1卷积跟在ReLU和最大池化层的后面,得到的20x6x19feature map连接到conv9_2。同样,图中所有右箭头指示这样的向上操作。作者将这一特征聚合过程称为“rolling”。一旦第一次完成rolling,分别对每一层执行1x1卷积,以减少到原始设置的通道数。在该通道减少之后,整个特征聚合在第一次迭代中完成。这种通道缩减很重要,因为它确保了两个连续的特征聚合之间的每个特征映射的统一形状。它还使循环rolling成为可能。在训练期间,对应于每个箭头的卷积内核以及通道缩减都在迭代之间共享。作者将此迭代过程称为循环rolling卷积。
图2. 递归特征聚合图示
最后,图层中的一组feature map(例如conv4_3)对特定尺寸范围的边界框进行回归。因为RRC结构为feature map带来了更多的上下文信息,所以它将使feature map更加丰富,基于该feature map,对于原始对象范围,边界框回归可能更难。为了克服这个问题并使边界框回归更加稳健,作者通过为特定要素图分配多个回归器来进一步离散特定要素图中的边界框回归空间,以便每个回归量对更简单的任务负责。
当前 SOTA!平台收录 RRC detection 共 1 个模型实现资源。
项目SOTA!平台项目详情页

RRC detection

前往 SOTA!模型平台获取实现资源:https://sota.jiqizhixin.com/project/rrc-detection

2、 CornerNet

本文
提出了CornerNet,该方法使用一个单一的卷积神经网络将物体的bounding box(BB)检测为一对关键点,即左上角和右下角。通过将物体作为成对的关键点进行检测,无需设计一组anchor box。此外,作者还引入了corner pooling作为一种新型的pooling层,帮助网络更好地定位corner。


CornerNet检测流程如下:(1)
输入一张图像;(2)采用特殊的CNN结构提取特征;(3)将特征分别送入两个检测网络,一个用来检测物体的左上角点,一个用来检测物体的右下角点;(4)将角点映射到同一个空间中,将距离比较近的角点看作是属于同一个物体的角点;(5)将属于同一个物体的左上角点和右下角点绘制在图像中,得到物体的边界检测框。
图3. 将一个物体检测为一对组合在一起的bounding box anchor。卷积网络输出所有左上角的热力图、所有右下角的热力图,以及每个检测到的角落的嵌入向量。将该网络训练为预测属于同一物体的角的类似
在CornerNet中,我们将一个物体检测为一对关键点—bounding box的左上角和右下角。卷积网络预测了两组热力图来表示不同物体类别的角的位置,一组是左上角,另一组是右下角。该网络还为每个检测到的角预测一个嵌入向量,使来自同一物体的两个角的嵌入之间的距离很小。为了生成更紧密的bounding box,该网络还预测了偏移量,以稍微调整角的位置。有了预测的热力图、嵌入和偏移,作者应用一个简单的后处理算法来获得最终的bounding box。图4提供了CornerNet的概况。作者使用hourglass network作为CornerNet的主干网络。Hourglass network后面有两个预测模块。一个模块用于左上角,而另一个模块用于右下角。每个模块都有自己的corner pooling module,在预测热力图、嵌入和偏移之前,汇集来自hourglass network的特征。
图4. CornerNet概述。主干网络之后是两个预测模块,一个用于左上角,另一个用于右下角。利用这两个模块的预测结果,对Anchor进行定位和分组
预测两组热力图,一组用于左上角角点,一组用于右下角角点。每一组热力图有C个通道,其中C是类别数(不包括背景),并且大小为H×W。每个通道都是一个二进制掩码,用于表示该类的角点位置。对于每个角点,有一个 ground-truth 正位置,其他所有位置都是负位置。在训练期间,我们没有同等地惩罚负位置,而是减少对正位置半径内的负位置给予的惩罚。这是因为如果一对假角点检测器靠近它们各自的 ground-truth 位置,它仍然可以产生一个与 ground-truth 充分重叠的边界框,如图22所示。通过确保半径内的一堆点生成的边界框和 ground-truth 边界框的IOU>=t(在所有实验中把tt设置为0.7)来确定物体的大小,从而确定半径。给定半径,惩罚的减少量由非标准化的 2 维高斯分布给出,其中心位于正位置,σ 是半径的1/3。

图5. 用于训练的 "ground truth "热力图。方框(绿色虚线矩形)的四角在正面位置(橙色圆圈)的半径范围内,仍然与ground truth注释(红色实线矩形)有很大的重叠
p_cij为预测图中c类位置(i,j)的得分,ycij为用非标准化高斯分布增强的 ground-truth 热力图。论文设计了一个 Focal Loss 的变体损失:

其中,N表示图像中目标的数量,α和β控制每个像素点贡献的超参数(在所有实验中将α设为 2,β设为 4)。利用ycij中编码的高斯凸点减少了 ground-truth 像素点周围的惩罚权重。同时,图像中的位置(x,y)被映射到热力图中的位置为([xn],[yn]),其中n表示下采样因子。当我们将热力图中的位置重新映射回输入图像时,可能会存在像素偏移,这会极大影响边界框和 ground-truth 之间的 IOU 值。为了解决这个问题,论文提出预测位置偏移,微调角点位置,然后再将它们映射回输入分辨率,如下式所示:
其中,o_k表示偏移量,x_k和y_k是角点k的x和y坐标。特别地,预测所有类别的左上角共享一组偏移,另一组由右下角共享。对于训练,在 ground-truth 角点位置应用 Smooth L1 Loss:
图像中可能出现多个目标,因此可能会检测到多个左上角和右下角。我们需要确定左上角和右下角的一对角点是否来自同一目标边界框。论文受Newell 等人提出的用于多人姿态估计任务的关联嵌入方法的启发,Newell 等人检测人的关节点,并为每个检测到的关节生成嵌入向量。他们根据嵌入向量之间的距离将节点分组,关联嵌入的思想也适用于我们的任务。网络预测每个检测到的角点的嵌入向量,使得如果左上角和右下角属于同一个边界框,则它们的嵌入之间的距离应该小。然后,可以根据左上角和右下角嵌入之间的距离对角点进行分组。嵌入的实际值并不重要,我们仅使用嵌入之间的距离来对角点进行分组。论文使用 1 维嵌入,e_tk表示角点k的左上的嵌入,e_bk表示右下的嵌入。使用 "pull" 损失来训练网络对角点进行分组,并且用 "push" 损失来分离角点:
作者提出 Corner Pooling 通过编码显式先验知识来更好地定位角点。假设我们要确定位置(i,j)的像素是不是左上角角点,设f_tij和f_lij分别为(i,j)位置中f_t和f_l 的特征向量。对于H×WH×W 的特征图,Corner Pooling 层首先最大池化f_t中在(i,j)和(i,H)之间所有的特征值,使之成为特征向量t_ij。另外,最大池化f_l 中在(i,j)和(W,j)之间的所有特征值,使之成为特征向量l_ij。最后把t_ij和f_ij加在一起:
在这里,作者应用了一个 element wise 最大化操作。动态规划可以有效地计算tij和lij,如图5所示。作者以类似的方式定义右下角池化层。最大池化(0,j)与(i,j)之间所有的特征值,(i,0)(和(i,j)之间的所有特征值,然后将池化结果相加。Corner Pooling 层用于预测模块来预测热力图,嵌入和偏移量。预测模块的第一部分是残差模块的修改版,修改后的残差模块中,将第一个3×3 卷积替换为一个 Corner Pooling 模块。这个残差模块首先通过具有128个通道的2个3×3卷积模块的主干网络进行特征提取,然后应用一个 Cornet Pooling 层。残差模块之后,将池化特征输入到具有256个通道的3×3的 Conv+BN 层,同时为这一层加上瓶颈结构。修改后的残差模块后面接一个具有256个通道的3×3卷积模块和256个通道的3个Conv-ReLU-Conv 来产生热力图,嵌入和偏移量。
图5. 左上角的池化层可以非常有效地实现。我们从右到左扫描水平的最大集合,从下到上扫描垂直的最大集合。然后添加两个最大池化的特征图
CornerNet 的 Backbone 使用 Hourglass 网络,这个网络最早在人体姿态估计任务中引入。Hourglass 网络是全卷积网络,包含一个或者多个 Hourglass 模块。输入图片的尺寸是511×511×3,经过一个conv(7x7-c128-s2-p3)的卷积模块,以及一个residual(其中卷积层的核为3x3-cl256-s2-p1),特征图大小变为128×128×256,这个特征图作为 Hourglass 网络的输入。而在 Hourglass 网络中首先使用一些卷积核池化层对输入特征进行下采样,然后再上采样使得特征图的分辨率回到原始大小,由于 Max-Pooling 层会丢失细节信息,所以增加跳跃连接层将低级特征信息带到上采样特征图中,因此 hourglass 不仅仅结合了局部特征还结合了全局特征,当堆叠多个 hourglass 模块时就可以重复这个过程,从而捕获高级的特征。
当前 SOTA!平台收录 CornerNet 共 5 个模型实现资源。
项目SOTA!平台项目详情页
CornerNet前往 SOTA!模型平台获取实现资源:https://sota.jiqizhixin.com/project/cornernet

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

5、 ObjectBox

本文提出了 ObjectBox,一种one-stage Anchor-free且高度通用的目标检测方法。与现有的Anchor-based和Anchor-free的检测器相比,原有方法在标签分配中更偏向于特定的目标尺度,ObjectBox仅使用目标中心位置作为正样本,并在不同的特征级别平等对待所有目标,而不管物体的大小或形状。具体来说,ObjectBox的标签分配策略以Anchor-free的方式将目标中心位置视为与形状和大小无关的Anchor,并允许在每个目标的所有尺度上进行学习。为了支持这一点,作者将新的回归目标定义为从中心单元位置的2个角到边界框4个边的距离。此外,为了处理尺度变化的目标,作者提出了一种定制的 IoU 损失来处理不同大小的框。因此,本文提出的目标检测器不需要跨数据集调整任何依赖于数据集的超参数。
图11. ObjectBox计算中心单元的两个角到bounding box的距离。一个大物体和小物体分别显示在(a)和(b)中。在(b)中,小物体完全位于一个单元格内,这通常发生在较大的步长中(例如,s_i=32)。然而,ObjectBox并没有抛弃这些情况,因为它对所有具有不同尺度的物体都回归到边界框的四边
如上图, 对应于尺度 i的回归目标如下:
网络的预测值定义如下,
与YOLO、FCOS相比, ObjectBox 将所有尺度的所有目标框都视为正样本。因此,无论目标大小如何,它都从所有尺度中学习,以从多个级别实现更可靠的回归。

本文感兴趣的是最小化两个box之间的距离,这两个box分别由四个距离值给出。由于我们对具有不同尺寸的物体从不同的尺度进行学习(不区分尺度等级),bounding box回归损失函数应该是尺度不变的。SDIoU 考虑非重叠区域、重叠或交叉区域以及覆盖这2个框的最小框。其中:
通过计算交叉区域对角线长度的平方来获得交叉区域 I:
覆盖预测框和真实框的最小面积C,由其长度的平方计算为:
通过最小化C,预测框可以在4个方向向真实框移动, 因此将SDIoU定义为:
其中,ρ表示一个有利于重叠区的正的权衡值(在文中所有的实验中都设定ρ=1)。作者在分子中同时使用I和(-S)来对交叉区域进行评分,同时对非重叠区域进行惩罚。因此,预测的4个距离值被强制要求与ground-truth距离更快匹配。SDIoU的损失最终被定义为LIoU = 1 - IoU。图12展示了SDIoU损失中所考虑的区域。
图12. box regression的SDIoU损失区域
当前 SOTA!平台收录 ObjectBox 共 1 个模型实现资源。
项目SOTA!平台项目详情页

ObjectBox

前往 SOTA!模型平台获取实现资源:https://sota.jiqizhixin.com/project/objectbox
前往 SOTA!模型资源站(sota.jiqizhixin.com)即可获取本文中包含的模型实现代码、预训练模型及API等资源。 
网页端访问:在浏览器地址栏输入新版站点地址 sota.jiqizhixin.com ,即可前往「SOTA!模型」平台,查看关注的模型是否有新资源收录。 
移动端访问:在微信移动端中搜索服务号名称「机器之心SOTA模型」或 ID 「sotaai」,关注 SOTA!模型服务号,即可通过服务号底部菜单栏使用平台功能,更有最新AI技术、开发资源及社区动态定期推送。
继续阅读
阅读原文