资讯详情

2019 CVPR目标检测论文精读:从Anchor-Free到Cascade R-CNN的核心演进

📅 2026/10/17 9:36:26 | 华诺云谱 👁 阅读
2019 CVPR目标检测论文精读:从Anchor-Free到Cascade R-CNN的核心演进
如果让我只挑一届CVPR来读目标检测论文我会选2019。那一年的录用列表里检测方向的文章质量密度高到有点离谱Anchor-Free从概念验证走向系统化Cascade R-CNN把高质量检测讲成一套完整方法论GIoU在损失函数层面补上IoU的硬伤ScratchDet则开始挑战ImageNet预训练的必要性。对做视觉算法的人来说2019 CVPR目标检测论文基本就是后来几年检测器演化的地基哪怕放到现在去翻依然能挖出不少被低估的思路。这篇整理适合两类人一类是想系统入门目标检测的新人另一类是已经在跑检测器、想快速了解当年有哪些关键工作值得补课的工程师。我尽量不贴大段公式而是把每篇论文解决的核心矛盾、方法以及复现时容易忽略的细节讲清楚。文章中会提到一小部分不是CVPR2019的同期工作因为它们和这一年的核心话题深度绑定我会特别标注出来免得大家查论文时对不上年份。1. 2019年的目标检测战场Anchor与Anchor-Free的正面碰撞1.1 那时候的检测器卡在哪儿了在2019年之前绝大多数检测器都绕不开anchor。anchor可以理解成一组预先摆好的候选框模板——你告诉模型“目标大概长这样”模型再去微调它。Faster R-CNN在每个位置放9个anchorSSD在不同层放不同尺度的框RetinaNet的FPN也是围绕anchor设计正负样本的。这套机制在当年很有效但问题也很明显尺度、纵横比、数量全靠经验调换一个数据集可能就得重新聚类anchor参数。更让人头疼的是正负样本定义。训练时anchor和真实框的IoU超过某个阈值才算正样本低于另一个阈值就是负样本中间的直接忽略。这意味着检测器的性能天花板很大程度取决于anchor的密度、尺度和匹配策略。你能在COCO上调好一套参数换到小目标多的遥感图或者人脸密集场景性能下降得飞快。于是2019年最热闹的争论就来了能不能不预设anchor让模型直接从特征图里回归出框这个方向上CornerNet在2018年已经靠关键点配对证明了“没有anchor也能检测”但它需要做角点分组逻辑繁琐。而CVPR2019的FCOS直接把检测重定义成逐像素预测到四条边的距离FSAF则尝试让特征层自己选不再按尺寸硬性分配。这两个工作把Anchor-Free往前推了一大步也正式拉开了和Anchor-Based方法的正面对话。1.2 站在2019看三条演进路线如果把2019 CVPR目标检测论文按解决的问题来分我习惯把它们归成三条路线路线代表论文核心在解决什么去锚框化FCOS、FSAF摆脱anchor引入的手工设计与正负样本定义高质量检测Cascade R-CNN、Libra R-CNN解决IoU阈值不一致、训练样本与特征不平衡损失函数与训练范式GIoU、Cluster Loss、ScratchDet让回归更可优化、让特征更有判别性、摆脱预训练依赖另外NAS-FPN也出现在这一年的CVPR里它用神经网络搜索的方式设计特征金字塔结构训练成本高但对后来自动化结构搜索的启发很大。总体来看2019是一个从“怎么把框调得更准”转向“为什么框要这样定义”的节点。读这一届论文最好带着“它在挑战哪个默认假设”的视角去看收获会大很多。2. 一阶段新势力FCOS、FSAF和同期特征表达工作2.1 FCOS把anchor丢掉多尺度还在FCOS是CVPR2019里我最推荐精读的一篇一阶段检测器。它把目标检测建模成逐像素的密集预测只要某个位置落在某个真实框内部它就作为正样本直接回归该位置到框四条边的距离也就是论文里的l、t、r、b。没有anchor没有IoU匹配也没有聚类先验干净得有点像语义分割。但逐像素预测会带来一个直接问题同一个位置可能同时落在两个重叠的真实框里该跟谁走FCOS的三个解法都很务实。第一利用FPN不同金字塔层负责不同尺度范围比如浅层管小目标、深层管大目标从结构上减少尺度歧义。第二每个位置只回归距离它最近的框降低重叠目标的混乱。第三引入centerness分支惩罚离目标中心较远的像素。centerness的计算方式是sqrt(min(l,r)/max(l,r) * min(t,b)/max(t,b))这个值在目标中心是1越往边缘越接近0。推理时把它乘到分类分数上相当于告诉模型即使你预测出框如果这个位置离目标中心太远最终分数也要降下来。这个设计非常聪明它不改变网络结构只是用一个小分支压制了大量低质量的离中心预测。复现FCOS的时候要注意它的正样本数量比Anchor-Based方法多很多因为每个框内的所有像素都参与训练。这意味着计算量和显存占用会上涨backbone稍微大一点就得调batch size。另外centerness分支虽然好用但训练不稳时容易误杀一些高IoU的边缘预测损失权重不要一开始就给太高。后来ATSS出来之后很多FCOS的改进都集中在样本选择上反而说明FCOS底子足够干净。2.2 FSAF让目标自己抢特征层FSAF的全称是Feature Selective Anchor-Free Module一句话概括就是让每个实例自己选择最适合的特征层而不是由FPN按尺度硬性分配。传统FPN做多尺度检测时大目标固定分给深层小目标固定分给浅层这个规则基于经验但不一定最优。有些中等尺寸、纹理复杂的目标可能放到更高层语义更强的地方精度反而更高。FSAF的做法是在原有anchor分支旁边加一个anchor-free分支每个实例在每一层金字塔上先算一遍分类和回归损失然后选择损失最小的那一层来训练。这就是所谓的在线特征选择。推理时anchor分支和anchor-free分支的结果可以做soft fusion让两条分支互补。这个思想后来被ATSS吸收ATSS里的样本选择和FSAF一脉相承都是在回答“哪个特征层、哪些位置应该学这个目标”。我觉得FSAF最值得学的是它对“尺度分配”问题的思考方式。以前大家把尺度分配当超参来调FSAF把它变成一个可优化的选择问题。代价是训练时每个实例都要在所有层上算一遍损失训练开销会变高。实际复现中它的精度提升不是爆发式的但在一些尺度分布特别不均匀的数据集上能明显看到它对中尺度目标的改善。2.3 为什么绕不开M2Det、RFBNet这些同期非CVPR2019工作严格来说M2Det发在AAAI2020RFBNet发在ECCV2018但它们和2019 CVPR讨论的特征表达问题深度绑定经常被放在同一批读物里。M2Det的核心是MLFPN也就是多级特征金字塔网络。它不像FPN那样只做一次自顶向下的融合而是把多个不同尺度的特征层反复融合、反复提炼形成一个更厚的特征金字塔。效果确实好但网络很重显存消耗大训练速度也慢。如果你在刷比赛这种结构还能用得上如果是做工业落地性价比一般。RFBNet则从感受野角度切入受人类视觉系统启发设计了一个射频模块。它用不同大小的卷积核加空洞卷积组合出不同尺度的感受野再通过shortcut保留原始信息和Inception的思路有点像但加了空洞卷积让感受野更大。这个模块可以直接嵌进SSD类检测器里在保持实时性的前提下提升精度。读这两篇工作能帮你理解一个点检测器的特征表达不只是“深不深”的问题还有“广不广”和“融不融”的问题。FPN解决的是尺度融合RFBNet解决的是感受野覆盖M2Det解决的是多级信息复用它们是可以同时使用的互补手段。3. 两阶段与高质量检测Cascade R-CNN、Libra R-CNN的提分逻辑3.1 Cascade R-CNN级联重采样才是关键Cascade R-CNN在2018年首次提出2019年CVPR版本扩展到了实例分割但它的核心思想一直没变一个检测器只能擅长一个IoU阈值。训练时你用0.5的IoU阈值匹配正样本检测器就会变成0.5阈值下的专家推理时RPN给出的候选框其实分布更分散想让它直接输出高质量框它反而不太会打分。很多人以为Cascade就是把三个检测头串起来每个头阈值不断提高0.5、0.6、0.7一直让框越来越准。但其实关键的细节是resampling也就是重采样。前一个stage回归出来的框到了下一个stage不能直接当输入用要重新和真实框计算IoU重新定义正负样本再训练下一个检测头。只有这样每一级检测器接收到的候选框分布才能匹配它自己的训练阈值。如果不重新采样而只是反复用一个检测头回归同一个框那是iterative bounding box regression效果差很多还容易过拟合。Cascade R-CNN在COCO上的提升非常稳定尤其是AP75这种高质量检测指标比单阈值检测器高出好几个点。这背后的直觉其实很好理解一个人做复杂任务不可能一步到位先粗调再细调每一级都只处理上一级留下的误差分布。2019年版本还加了mask分支在级联框上做实例分割效果也顺带涨了。复现时我建议直接用mmdetection里现成的cascade_rcnn_r101_fpn等配置跑一遍重点体会每个stage的RoI是怎么重采样出来的。把这一点看懂了两阶段检测器基本就懂了一半。3.2 Libra R-CNN三处不平衡一起治Libra R-CNN的出发点是检测任务不是一个单独的不平衡问题而是三处不平衡叠在一起。第一是样本不平衡训练时大量简单负样本淹没少量难样本第二是特征不平衡浅层特征分辨率高但语义弱深层特征语义强但分辨率低第三是目标边界不平衡回归损失里outlier样本贡献太大inlier样本被压得抬不起头。针对样本不平衡Libra R-CNN提了IoU-balanced Sampling。普通随机采样让低IoU的样本更容易被抽到难的正样本反而出现得少。IoU-balanced的做法是把IoU范围分成均匀的区间每个区间都保证有样本被抽到这样可以显著提高高质量正样本在训练中的比例。特征层面它提出Balanced Feature Pyramid。做法很简单把金字塔各层resize到同一尺寸逐像素相加取平均得到一个包含全局语义的融合特征再把它广播回每一层。这个过程相当于把全局信息注入到每一层缓解低层特征语义不足的问题。第三块是Balanced L1 Loss把回归损失函数设计成分段形式让小梯度样本的贡献增强大梯度样本的贡献被限制。这样模型不会只盯着几个LeCun难样本在COCO这种长尾分布的数据集上尤其有用。Libra R-CNN是可以直接加在Faster R-CNN或Cascade R-CNN上的训练配方。它的修改点都不是伤筋动骨的大改但每一处都踩在痛点累积提升明显。我自己复现时感觉它比很多花哨的新模块更实用因为你可以在现有代码上快速验证而不需要重写整个网络。3.3 同期补充CBNet这类复合骨干为什么会出现虽然CBNet发在AAAI2019但如果你想了解2019年检测器刷分的完整拼图它绕不开。CBNet的思路非常直接把多个backbone串联起来前一个backbone输出的特征喂给后一个backbone相当于让检测器有一个“复核”的特征提取过程。配合Cascade R-CNN它在一段时间里把COCO的指标推得很高代价是计算量也翻倍甚至更多。这类工作在我眼里属于“用计算换精度”的典型代表。它不改变检测器的学习逻辑只是让特征更强。对比赛刷分有意义但工业落地时通常会被砍掉。从原理层面看CBNet提醒我们一件事骨干网络的选择和设计对检测器的影响往往比检测头里的trick更直接。到了2020年之后大家更倾向于用更强的预训练模型或者自监督表征来提升骨干而不是简单叠加两个backbone。4. 损失函数与训练技巧GIoU、Cluster Loss、ScratchDet的实操价值4.1 GIoU给不相交的框一条梯度出路在GIoU之前目标检测的回归损失大多是Smooth L1也就是先算坐标差的绝对值再决定用L1还是L2。但L1类损失和最终评估指标IoU并不一致。你优化的是坐标绝对值评估的是框的重叠程度于是可能出现损失降低但IoU没涨的情况。更尴尬的是IoU损失本身也有问题如果两个框完全不相交IoU恒为0梯度无法引导框向对方靠近。GIoU的改进很优雅。它先算两个框的最小闭包区域C然后用公式GIoU IoU - (C - union) / C如果两个框不相交闭包区域C会比并集大很多第二项变成负值GIoU就小于0。框离得越远惩罚越大梯度会先把两个框推近。一旦有重叠第二项趋近0GIoU又平滑过渡回IoU。你可以把它理解成一场考试IoU只告诉你及格还是不及格GIoU则会给“你离及格还差多远”一个连续分数。实际使用GIoU时有个细节容易被忽略闭包面积C在极端情况下可能非常小或者接近0低精度训练时容易出现除零问题。我在FP16混合精度训练里遇到过NaN后来给分母加了一个极小值常数才稳住。另外当两个框有包含关系时GIoU会退化成IoU收敛速度变慢。这个问题后来被DIoU和CIoU解决但GIoU作为把几何度量引入回归损失的里程碑依然值得好好读。4.2 Cluster Loss人脸检测里的嵌入约束Cluster Loss这篇来自CVPR2019论文名是Detection with Clustering Loss应用场景集中于人脸检测。它的动机是检测器训练时只关心框的位置和分类标签训练出来的特征对于“判断两个人是不是同一个身份”这种任务帮助有限。如果你做的是人脸检测下游经常还要接人脸识别那就希望检测器提的特征本身就有区分度。Cluster Loss的思路是在检测框架里增加一个度量学习分支。同一张人脸的样本特征被拉向同一个聚类中心不同身份的聚类中心互相推开。这样检测器不只在学“这里有没有人”还在学“这个人是谁的特征表达”。在WIDER FACE这类数据集上它比纯检测损失收敛得更稳同时提升了后续人脸验证的精度。这篇论文给我的启发是损失函数不一定只能做分类和回归它可以承载另一个子任务的目标。后来很多多任务检测网络也是这个思路比如同时预测关键点、分割掩码或者嵌入向量。不过对通用目标检测来说Cluster Loss直接套用的收益不如人脸检测明显因为它依赖训练集中有明显的身份语义。想尝试的话我建议把它理解成“辅助度量损失”而不是把希望全压在聚类分支上。4.3 ScratchDet从零训练时如何稳住BN和初始化ScratchDet是那一届里非常特别的一篇——它问了一个大家习以为常但很少质疑的问题检测器真的需要ImageNet预训练吗长期以来做检测默认要用分类任务预训练好的backbone否则收敛很慢精度也差。但预训练和检测场景之间存在领域差异而且很多实际任务的数据分布和自然图像差很远迁移未必是最优解。ScratchDet发现从零训练检测器并非不行关键在三点合理的BN使用、合适的优化器、以及足够强的数据增强。论文里用RMSProp替代SGD让ResNet从零训练时更容易稳住同时把BN广泛接入backbone各层解决深层网络梯度动荡的问题。在VOC和COCO上它的SSD系列从零训练效果能接近甚至达到预训练版本的精度。这篇论文的实操价值在于如果你面对一个数据隐私要求很高或者领域差异很大的任务完全可以试试不加载预训练权重。我在实际项目中试过从零训练一个检测器loss波动确实比预训练版本大尤其是前几个epoch所以需要更长的warmup学习率也不能给太猛。另外从零训练对小batch size特别敏感BN的统计量很容易偏建议至少保证batch size在16以上否则优先使用Group Normalization。5. 复现与避坑随记哪些论文值得深读哪些坑我替你踩过了5.1 精读优先级与复现难度评估把这几篇CVPR2019的论文按“影响力和复现性价比”排个序我的建议是这样的论文精读理由复现难度是否建议跑源码FCOSAnchor-Free一阶段的标杆后续很多工作都基于它中等建议代码量适中Cascade R-CNN高质量检测的核心思想影响深远中等建议mmdetection里有现成配置GIoU损失函数设计教科书级别的案例低可以自己实现10分钟就能验证Libra R-CNN训练平衡方法论通用性强中等建议能直接加在baseline上FSAF特征选择思想有启发但本身已逐步被融合中等偏高可选ScratchDet训练范式特殊不建议从零实战高了解思路即可Cluster Loss度量学习与检测结合人脸检测专用中等按需复现我的个人体会是不要平均用力。想快速建立一个检测器知识框架FCOS加Cascade R-CNN加GIoU这三篇足够搭起主干。Libra R-CNN可以帮你理解训练配方的重要性。剩下的按自己方向挑着看就行。5.2 复现时最容易翻车的三个细节第一个坑是Cascade R-CNN的re-sampling。很多人实现级联时只把上一个stage输出的框微调了一下没重新和真实框计算IoU就送进下一个stage结果精度不涨反降。一定要记住级联的每一步接收的候选框分布都要和当前stage的训练阈值匹配这是级联有效的根本原因。第二个坑是GIoU的数值稳定性。计算闭包区域时如果两个坐标值在浮点逼近下产生微小误差面积可能变成负数或者极小值。混合精度训练中尤其容易出现NaN。我习惯在计算面积时对长宽做一个clip下限同时在分母上加上一个很小的大于0的常数比如0.0001。第三个坑是FCOS的centerness。推理时要把centerness和分类分数相乘作为最终置信度这在目标尺度差异极大的数据集上很容易误杀高质量预测。如果你发现召回率没有问题但AP不高大概率是centerness把一些离中心稍远的正样本分数压得太低。这时候可以试着降低centerness分支的损失权重或者在验证阶段先不乘centerness对比一下再决定。5.3 从2019往后看哪些思想留了下来如果站在现在回看2019这届CVPR会发现很多争论的答案已经溶解在今天的检测器里。FCOS的逐像素预测和centerness成了YOLOX等新一代一阶段检测器的默认组件ATSS把FSAF的在线选择和FCOS的密集预测整合成了一套完整的样本分配策略GIoU之后出现了DIoU、CIoU在YOLO系列和各类工程框架里成为标配Cascade R-CNN的高质量检测思想也被各种SOTA模型以不同形式吸收比如用两阶段甚至多阶段的方式逐级优化候选框。NAS-FPN所代表的搜索式结构设计后来演变成NAS、可微搜索、自动增广等一系列自动化方法论。ScratchDet的从零训练实验虽然没让大家都放弃预训练但它推动大家重新审视预训练和下游任务之间的领域差距。这些思想的共同点是它们都在回答检测器里“每个设计决策到底为什么存在”这个问题。理解了这个逻辑你再看任何一篇新检测论文都会习惯性地把它拆回这几个维度。我自己现在读论文仍然会习惯性先把2019这批工作拉出来对照。遇到一个新检测器我会问它有没有anchor样本怎么定义回归用什么loss特征层怎么选这几个问题的答案基本都能从FCOS、FSAF、GIoU、Cascade R-CNN这些论文里找到对应。如果让我给一个最实在的建议那就是别只啃摘要至少把FCOS的centerness和Cascade的re-sampling亲手实现一遍比读十篇论文都管用。那一年大家为Anchor-Free吵得不可开交几年后再看争论的答案早就长进了每个检测器的默认配置里。
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑