摒弃Transformer,全卷积网络也可以实现E2E检测,实现良好的端到端物体检测效果。目标检测是计算机视觉中的一个基础研究课题,它利用每个图像的预定义类别标签来预测边界框。大多数主流检测器使用手动设计,例如基于锚点的标签分配和非最大抑制(NMS)。最近,许多研究人员提出了通过距离感知和基于分布的标签分类来消除预定义锚框集的方法。尽管这些方法取得了显着进步和卓越的性能,但放弃手动设计的NMS后处理可能会阻碍完整的端到端训练。基于这些问题,研究人员相继提出了LearnableNMS、SoftNMS、CenterNet等,可以提高去重效果,但仍无法提供有效的端到端训练策略。后来,FacebookAI研究人员提出的DETR在目标检测任务中使用了Transformer,取得了媲美FasterR-CNN的效果。但是DETR的训练时间大大延长,在小物体上的表现相对较低。因此,在这篇论文中,旷视科技和西安交通大学的研究人员提出了一个新颖的问题:全卷积网络能否取得良好的端到端目标检测效果?并从标签分配和网络架构两个方面回答和验证了这个问题。论文链接:https://arxiv.org/pdf/2012.03544.pdf项目代码:https://github.com/Megvii-BaseDetection/DeFCN(内部代码迁移+审核,后续发布)具体来说,研究人员基于FCOS,首次在denseprediction上使用全卷积结构,实现E2E,即无需NMS后处理。研究人员首先分析了常见的稠密预测方法(如RetinaNet、FCOS、ATSS等),认为一对多的标签分配是依赖NMS的关键。受DETR的启发,研究人员设计了一种预测感知的一对一分配方法。此外,研究人员还提出了3DMaxFiltering来增强特征在局部区域的表示能力,并提出使用一对多的辅助损失来加速收敛。本文方法基本不修改模型结构,不需要更长的训练时间,可以在现有的稠密预测方法的基础上平滑过渡。在没有NMS的情况下,本文的方法在COCO数据集上实现了与带有NMS的FCOS相当的性能;在表示密集场景的CrowdHuman数据集上,本文方法的召回率超过了依赖NMS的方法的理论上限。整体方法流程如下图所示:One-to-manyvs.one-to-one从anchor-free方法出现以来,NMS作为网络中最后的启发式链接,一直是最大的障碍到端到端密集预测的实现。但实际上可以发现,从RPN、SSD、RetinaNet等开始,大家一直遵循这样一个过程:先对每个目标生成多个预测(一对多),然后对多个预测(多-对多)-一个)。因此,如果不使用上一步的标签分配,则必须保留去重链接。即使去重方法不是NMS,也会是NMS的替代品(比如RelationNet,比如CenterNet的maxpooling)。有没有办法直接做一对一的赋值?其实有。古代有一种方法叫MultiBox,对每个目标和每个预测做二分匹配。DETR其实是把这种方法的网络换成了一个Transformer。另外,还有一个比较著名的方法:YOLO,YOLO也是对每个目标只匹配一个grid[1],但是它使用中心点进行匹配,并且有忽略区域。Prediction-awareone-to-one那么接下来的问题是,我们能否仅依靠密集预测上的一对一标签分配来完美去除NMS?基于去掉centernessbranch的FCOS,研究者首先统一了网络结构和训练方式,使用FocalLoss+GIoULoss做了如下分析实验:研究者设计了两种手工制作的一对一分配方式,分别模仿RetinaNet(基于anchorbox)和FCOS(基于中心点),尽可能做最小的改动,发现有无NMS的mAP差距都可以缩小到4个点以内。然而,研究人员认为,人工设计的标签分配规则会极大地影响一对一的性能。例如,中心规则对一个偏心的对象不够友好,在这种情况下一对一规则会比一个好。-to-many规则不太健壮。所以我认为规则应该是预测感知的。研究人员首先尝试了DETR的思路,直接使用loss作为bipartitematching的cost[2],发现无论是绝对性能还是有无NMS的差距都得到了进一步提升。但是他们知道loss和metrics往往是不一致的,它往往要针对优化问题做出一些妥协(比如做一些加权等)。换句话说,损失不一定是二分匹配的最佳成本。因此,研究人员提出了一个非常简单的代价:看起来有点复杂,但实际上是用网络输出的prob来表示分类,用网络输出的IoU和gt来表示回归。在做了加权几何平均之后,再加上一个类似内部gt框的空间先验。加权几何平均数和空间先验均在稍后分别消融。这就是研究人员提出的POTO策略,在没有NMS的情况下进一步提升了性能,也验证了loss不一定是最好的代价[3]。但是从表1中也可以发现,POTO的性能仍然比不上一对多+NMS的组合。研究人员认为问题出在两个方面:一对一要求网络输出的特征非常尖锐,这对CNN提出了更严格的要求(这也是Transformer的优势);一对多带来更强的监督和更快的收敛。所以使用3DMaxFiltering和一对多的辅助损失来缓解以上问题。3DMaxFiltering如图3所示,这个模块只用到了卷积,插值,maxpooling3d,速度非常快,不需要写cudakernel。One-to-manyauxiliaryloss针对监督不够强、收敛速度慢的第二点,研究者仍然采用one-to-manyassignment来设计auxilityloss进行监督。损失只包括分类损失,不包括回归损失。assignment本身没什么好说的,附录实验也说明了各种方法都能奏效。这里要提醒大家的是要注意图2中的乘法,这是辅助损失发挥作用的关键。乘法前一路加上一对多的辅助损失,乘法后加上一对一的正则损失。由于1*0=0,1*1=1,所以只需要大致保证一对一赋值的正样本仍然是一对多的正样本即可。实验的主要实验结果如表1所示,还有一些消融实验。这里有几点需要强调:α越低,分类权重越大,NMS与NMS的差距越小,但绝对性能也会降低[4];α太高不好,后面所有实验都用α=0.8;在α合理的情况下,空间先验不是必须的,但空间先验有助于在匹配过程中排除不良区域,提高绝对性能;研究人员在COCO实验中使用centersamplingradius=1.5,在CrowdHuman实验中使用inside。gt框[5];加权几何平均数(Mul)[6]优于加权算术平均数(Add)[7]。去掉NMS最大的好处其实就是人群场景,这在COCO身上并没有很好的体现。于是又在CrowdHuman上做了如下实验:请注意CrowdHuman的ground-truth做NMSthreshold=0.6,只有95.1%的Recall,这也是NMS方法的理论上限。但是本文的方法没有使用NMS,所以很容易超过这个上限。研究人员还做了一些其他的实验和分析,欢迎阅读原文。经过上述可视化的改进,研究人员成功地将一对一的性能提升到与一对多+NMS方法相当的水平。此外,将分数图可视化,可以发现FCN能够学习到非常清晰的表示,这也让研究人员感到非常惊讶。结果图中的明显改进出现在多模态案例中。例如,两个对象有一定的重叠(但不是特别重叠)。这时候往往会出现一对多+NMS的方式,除了两个对象有一个frame,两个object之间还有一个frame。有一个框,这个框和前两个框的IoU不足以达到NMS阈值,但是置信度比较高。这种典型的多模态问题在POTO中得到了很大程度的缓解。其他人可能更关心训练时间,因为下意识地在denseprediction上做bipartitematching应该是很慢的。但是依靠scipy对linear_sum_assignment的优化,实际训练时间只减少了10%左右。如果你对这个时间还敏感,可以用topk(k=1)代替二分匹配;在密集预测中,top1实际上是二分匹配的近似解[8]。同样,k>1的情况对应的是一对多的新方法,研究人员也对此做了一些工作,可能会在稍后发布。参考如果大家有兴趣,可以尝试在YOLO上去掉NMS,可以接近30mAP。注意这里没有使用DETR的CE+GIoU+L1组合,而是直接使用loss本身(Focal+GIoU)。研究人员认为,这更符合DETR将损失作为成本的初衷。其实这里给大家提供一个思路,因为cost不需要推导,所以甚至可以直接计算AP作为cost。侧面证实分类和回归之间的冲突在检测任务中是显着的。原因很简单,CrowdHuman的遮挡问题太严重了,中心区域经常被完全遮挡。其实加权几何平均的负对数就是CE+IoULoss,加权算术平均没有明显的物理意义。NoisyAnchor在assign中使用了类似的公式,但是使用了anchorIoU。更具体地说,top1(即argmin)是Hugarian算法第一次迭代的结果;由于在密集预测下几乎没有冲突,所以一次迭代就已经接近最优匹配,这就是匈牙利算法实际上很快就在这里运行的原因。
