news 2026/10/15 11:13:04

拥挤场景目标检测不再漏检:CrowdDet如何用多预测头绕过NMS?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
拥挤场景目标检测不再漏检:CrowdDet如何用多预测头绕过NMS?

目标检测在拥挤场景下会崩,这是一个老问题。人群里站在一起的两三个人、货架上密密麻麻的同类商品、路面上前后遮挡的车流,经典检测器在这些场景下几乎普遍会漏检。出门用NMS一筛,本来挨得极近的两个物体,很可能就只剩下一个,漏检率陡增。CVPR 2020的这篇文章《Detection in Crowded Scenes: One Proposal, Multiple Predictions》,核心思路就叫“一个框,输出多个预测”,直接从源头绕开了NMS对密集目标的杀伤。这篇笔记我会分四部分展开:先是问题背景和解法直觉,然后是模型结构和Set Loss的四个损失项;接着讲EDI,也就是EM算法配合Impure Proposal Learning训练,把“不纯”的proposal变成有监督的样本;最后是推理阶段如何绕开NMS还能把结果做得更稳。适合正在做目标检测研究、或者被密集场景漏检折磨的工程师阅读,也适合想系统理解“后NMS时代”检测思路的同学。

1. 拥挤场景的目标检测:为什么经典算法在这里失灵

1.1 NMS的先天缺陷:一山不容二虎的检测逻辑

要读懂这篇论文,得先理解NMS为什么在拥挤场景下会翻车。NMS(Non-Maximum Suppression,非极大值抑制)是两阶段检测器里最常用的一步后处理,它的逻辑非常简单粗暴:把所有候选框按置信度从高到低排序,挑出分数最高的框,然后把它周围那些跟它IoU超过阈值的框全部删掉,再继续挑下一个,如此往复。

这套逻辑在通用目标检测数据集上表现很好,因为那里的物体通常松散分布、彼此遮挡少。可一旦场景变得拥挤,问题就来了:两个真实的目标如果靠得很近,它们的真实框之间IoU本身就很高。比如两个人前后站立,你推我挤,两个标注框的IoU可能达到0.5甚至0.7。这时候NMS的处理方式就是“二选一”——把其中一个人的检测框当作另一个人的“重复检测”抑制掉。于是,人多的场景变成了检测器的重灾区:每检测出一个目标,可能就要赔上旁边几个目标。

论文里给了一组很直观的数据:在CrowdHuman数据集上,平均每个人被接近1个其他人体高度重叠覆盖;而在更拥挤的街景图像里,一个16人的人群甚至可能同时被三四个人的检测框覆盖。用标准的Faster R-CNN在CrowdHuman上测试,误检率和漏检率都非常糟糕,其中很大一部分错检直接源于NMS对邻近框的过度抑制。作者还专门做了统计,发现拥挤场景下检测错误主要由两部分组成:一是定位偏差,二就是NMS造成的漏检。这说明问题的根子不在特征提取,而在最后的框筛选策略。

传统思路是改进NMS本身,比如Soft-NMS,给重叠框的分数做衰减而不是直接删除;或者用IoU-Net预测IoU来辅助后处理。但这些方法本质上还是默认“一个物体对应一个框”,只是在消除冗余的方式上做文章。这篇论文换了一个切入角度:为什么一个proposal就只能管一个真值?如果一个候选框里真的藏着两个目标,那为什么要强行只输出一个预测?

1.2 核心直觉:Proposal的容量问题

你可能会想,RPN不是会为每个目标生成很多个proposal吗?多几个proposal覆盖过去,不就能把遮挡目标都捡回来了吗?实际不行。在稠密场景里,RPN对每个人生成的proposal通常是高度相似的——它们都稳稳地压在两个人重叠的中心区域,而不是各自偏向某一个具体的人。把这些proposal送进RoI Head后,它们提取的特征也很相似,最终输出的回归结果大概率指向同一个目标,或者干脆在两个人之间取一个平均位置。

换句话说,单个proposal所能承载的信息量是有限的。特征层面的感受野和特征向量本身,可能同时包含了两个人的响应。这种情况下,你很难通过增加proposal数量来弥补,因为大家看到的信息都差不多。

作者由此提出了一个更本质的假设:既然一个proposal的特征里已经包含了多个物体的线索,那就让这个proposal直接给出多个预测。每个预测负责解释这块特征里的某一个物体,分别输出各自的类别和边界框。这样一来,就不是靠proposal的数量去“碰”目标,而是把一个proposal的容量从“1”扩成“K”。论文实验里K取2,也就是说每个proposal最多输出两个预测框,但允许一个目标同时被多个proposal预测到。

这套思路我现在回过头看,仍然觉得很漂亮。它没有引入特别复杂的结构,只是改变了一个简单的认知:proposal与真值之间的对应关系不是一对一,而是一对多。接下来的所有设计——多预测头、集合损失、EM训练——都是围绕这个认知展开的。

2. 模型结构:CrowdDet的组成与设计

2.1 从单预测头到多预测头的改造

CrowdDet的主体框架没有另起炉灶,而是直接选用Faster R-CNN作为底座。选择Faster R-CNN的原因也简单:两阶段结构天然存在“proposal”这个中间实体,正好契合“一个proposal对应多个真值”的设计。如果是单阶段检测器,比如YOLO或FCOS,它们的输出本身就是稠密覆盖的,改造方式会完全不一样。

标准Faster R-CNN的RoI Head部分通常是这样的:RoI特征经过两个全连接层,输出一个分类分数向量和一个回归偏移向量。CrowdDet的改动是把后面的输出头复制了K份,变成K个并行的预测分支。每个分支都拥有一套独立的分类logits和回归偏移。结构上大概可以理解成:

  • RoI特征提取:RoIAlign
  • 共享特征层:两个FC层,把每个proposal的特征压缩成一个固定维度的向量
  • K个预测头:每个预测头输出C+1个类别的分数(加上背景类),以及4个坐标回归值

训练时,同一个proposal的K个预测头会尽量去匹配不同的真值框。推理时,K个预测头给出的结果都会被保留下来,参与后续的后处理。论文里K取2,理由也很有意思:经过统计,在一个proposal覆盖的所有真值数量里,绝大多数情况下不会超过2个。K取太大会增加计算量,而且容易产生大量空预测,反而干扰训练。

除了多预测头,作者还加了一个额外的IoU预测分支——每个预测头不仅预测类别和边界框,还预测“我这次回归的框和匹配真值的IoU有多高”。这个IoU预测在推理阶段很重要,因为拥挤场景下的分类分数往往不可靠,一个分类分数0.8的框可能定位偏了,反而应该被过滤掉。额外预测一个IoU分数,作为对定位质量的估计,可以为后续的置信度判别提供依据。后面会详细讲这个分支怎么用。

2.2 为什么不是Transformer或者无NMS架构?

读这篇论文的时候,我一直忍不住往后来的DETR方向联想。DETR把目标检测彻底变成了集合预测问题,也不依赖NMS,这在精神上确实和CrowdDet有一脉相承的地方。但两者解决的问题其实不太一样。DETR是在全局特征图上做可学习的查询,通过二分匹配直接输出所有检测结果;而CrowdDet是在局部proposal特征上做多预测,一定程度上仍然依赖RPN的召回。

CrowdDet在2020年提出时,Transformer还没有进入检测领域,所以它的设计选择是务实的:用最成熟的Faster R-CNN框架,加上最小的改动,就能在拥挤场景上取得明显的提升。这也提醒我们,核心创新未必需要完全推翻旧框架,有时候改一个关键假设就够了。

这套结构还有一个好处是便于集成。如果你手头有一套已经调好参数的Faster R-CNN检测器,想把它的拥挤场景能力提升上去,CrowdDet的改造成本是比较低的。RPN和主干网络可以完全不动,只需要替换RoI Head部分,加上K个预测头和新的损失函数。我之前在实际项目里也做过类似的迁移,把普通RoI Head换成多分支预测头,大概只需要改动几行forward代码和损失计算逻辑,训练流程本身不需要太大调整。

3. Set Loss:让一个框学会输出集合预测

3.1 从像素级匹配到集合匹配的跨越

加了多个预测头之后,最核心的问题马上变成:这K个预测分别对应哪个真值框?在多真值重叠的proposal里,你不能简单地把所有预测头都拉到同一个真值框上去,那样K个分支就退化成同一个输出,一点意义也没有。

论文把单个proposal的K个预测当成一个集合,和该proposal负责的所有真值框做配对。配对过程采用搜索最优匹配的思路:让K个预测分别落到不同真值上,理想情况下一个真值也只会被该proposal的一个预测头负责。从数学上看,这是一个在预测与真值之间找双射的问题,作者用的是匈牙利算法来搜索最优分配。

不过,如果单纯用一个二分图匹配来解决,训练时网络可能会变得很不稳定。因为预测头在初始化时是随机的,固定一个硬匹配容易让不同的预测头总被分配给同一个真值,或者某个预测头永远匹配不上任何真值。为了解决这个问题,论文引入了分布式的软匹配思想——这也是后面EDI和EM算法的起点。在损失计算时,一个预测和某个真值的匹配关系不再是0或1,而是一个介于0到1之间的权重。不同真值对同一个预测的权重可以同时存在,只不过最终的总贡献由匹配概率来调节。

3.2 四个损失项:分类和回归互相“打分”

Set Loss是整个CrowdDet训练过程的核心,它由四个损失项共同构成。读完这四个项的设计,你会感觉它像是一个闭环的校验系统:分类管分类,回归管回归,但两者会互相监督,谁掉链子就拉谁一把。

第一个是分类损失。对每个预测,计算它与多个真值之间的分类交叉熵。注意这里不是简单地把预测分配给唯一真值,而是用真值匹配概率作为软标签,让每个预测的类别置信度尽量靠近它最可能对应的那个真值类别。

第二个是回归损失。只有匹配到真值的预测才会计算回归损失。通常用Smooth-L1或者IoU loss,目标是让预测框尽可能贴近它负责的真值框。

第三个是“分类指导的回归惩罚”。如果某个预测已经被网络分类成某个物体类别,说明网络对这个预测很有信心,但与此同时它的回归结果却和真值框偏离很远,那就需要加大回归惩罚。换句话说,分类置信度高为你“撑腰”,回归就得跟上,不能光会认人不会定位。实际实现时,这个惩罚往往以分类分数作为回归损失的一个加权因子,从而放大定位误差的梯度。

第四个是“回归指导的分类惩罚”。这是反过来的校验:如果某个预测的回归结果非常好,IoU很高,但它的分类分数却低得可怜,那就说明网络在类别判断上太没自信,需要提高分类惩罚。分类分数必须对得起优秀的定位能力。

作者把这两组互相监督的损失合并进Set Loss,同时在训练时采用importance weighting,对高IoU的匹配instance给予更大的训练权重,对低质量的匹配则降低影响。这个设计我认为非常贴合拥挤场景的实际:在人群重叠区域,RPN出来的proposal质量参差不齐,有的其实非常适合用来学习某一个目标,但分类分数可能极低;如果不做回归指导的分类惩罚,这类样本几乎学不到东西。

3.3 损失公式的直觉理解

为了更直观地理解,你可以把一次训练迭代想象成一个小型项目评审会。proposal是简历,K个预测头是候选人,真值框是岗位。Set Loss的前两项是硬性条件——候选人要认得岗位(分类),也会干活(回归)。后两项则是互评机制——如果某候选人说自己认识岗位(分类分数高)但干出来的活很烂(回归差),这个候选人要被重点考核(加大回归惩罚);反过来,如果活干得漂亮(回归好)但嘴上不认识岗位(分类低),说明他该好好学学岗位知识(加大分类惩罚)。

这种双向约束的好处是,网络很难通过“走捷径”蒙混过关。比如想光提升分类分数来骗过损失函数,你的回归不好,分类指导的回归惩罚会把你拉回来;想光提升回归能力,你的分类分数会被回归指导的分类惩罚按下去。两者必须同时在线。

我在实验中发现,Set Loss里这四个项的平衡系数确实需要花一些时间调。论文给的是固定权重,但在不同数据集上,分类和回归的量纲差异可能导致某些项占主导。建议先跑一版权重相对均衡的配置,观察每个损失项的下降曲线,如果分类损失降幅过快而回归损失纹丝不动,说明需要适当调低分类损失的权重,或者调高回归惩罚项。另外,匹配过程使用的匈牙利算法虽然稳定,但每一次迭代都在做,训练开销会有一定上升。CrowdDet在训练时间上的开销比普通Faster R-CNN大概多出20%到30%,对于日常实验来说是可以接受的。

4. EDI:用EM算法驯服不纯的Proposal

4.1 什么是Impure Proposal

讲到EDI之前,先得理解“Impure Proposal”(不纯的Proposal)这个概念。一个proposal的“纯度”,指的是它所包含的特征到底来源于一个目标还是多个目标。标准检测器训练时,隐含的假设是每个proposal只对应于一个真值——不管你是什么proposal,你的分类标签就一个,回归目标也就一个。但在拥挤场景下,很多proposal恰好落在两个重叠目标的边界之间,RoI联通的区域里同时包含了两个人的大量像素,这样的proposal就是“不纯”的。

不纯的proposal如果硬要套上一个唯一的真值标签,就要求网络忽略掉另一个目标的存在。可特征里明文写着“这里至少有两个人”,你却非要它只输出其中一个,网络就会被逼着走捷径——把这个proposal的置信度压低,或者输出一个处于两者之间的模糊框。这样既训练不出好模型,推理时也会看到一堆定位不准的低分框。

作者的办法是:既然proposal不纯,那就别强求它纯。在训练时允许一个proposal的多个预测分别落到不同真值上,每个预测头可以吸收不同真值的监督信号。同一个proposal,一个预测头去学前面那个人,另一个预测头去学后面那个人。这就是EDI里Impure Proposal Learning的核心思想。

4.2 EM迭代:把匹配问题变成概率问题

现在难点来了:你怎么知道某个预测头该学哪个人?在训练初期预测头都是乱的,谁都不能确定这个proposal里的两个人具体在哪。如果硬匹配,网络很容易训练崩。EDI把这个问题建模成一个隐变量模型,用EM算法迭代求解。

EM算法的E步是这样做的:固定当前的网络参数,对每个预测,计算它和周围每个真值之间的匹配概率。这个概率由两个因素共同决定,一是分类置信度,二是回归质量(比如预测框和真值的IoU)。用soft assignment的方式给每个预测分配一组权重,而不是选一个唯一的匹配。下一步M步,用这些软权重重新加权计算Set Loss,并更新网络参数,让每个预测更趋向于它最有可能的那个真值。更新完网络之后,又回到E步重新计算匹配概率,循环往复。

这个过程改善得很快。刚开始时预测头是混乱的,所以匹配概率的分配也比较模糊,几乎每个真值都沾一点边。随着网络逐步学习,清晰的预测头会越来越偏向正确的目标,模糊的预测头则会在多个目标之间摇晃。EDI通过软权重保留了这种不确定性,让网络不会因为一次错误的硬匹配就陷入局部最优。

我在自己的复现里试着把软匹配换成硬匹配,也就是每次直接挑一个概率最高的真值,其余全置零。结果训练非常不稳定,AP掉了大概3到4个点。原因也不难理解:复杂的拥挤场景中,某些proposal本身就是模糊的,强行选择一个匹配往往会带来噪声,这些噪声梯度累积起来就把网络带偏了。所以EDI中EM迭代和软匹配的设计不是锦上添花,而是整个训练稳定性的基石。

4.3 对纯Proposal的辅助监督

Impure Proposal Learning解决了重叠场景中的“超载”问题,但现实中仍然有很多proposal是纯的——只包含一个目标。对这部分proposal,CrowdDet也做了特殊处理。作者引入了监督机制,把纯的proposal挑出来,单独约束其K个预测中至少有一个应该输出高置信度的检测框,其余预测则尽量输出背景类。

这个辅助监督听起来简单,但它实际上起到了“锚点”的作用。因为如果所有proposal都走Impure Learning的软匹配,网络可能会倾向于把所有预测头都填满,哪怕其中某个预测头其实根本没有对应的真值,也会胡乱预测一个框出来。加了这个约束后,预测头必须学会什么时候该沉默,学会输出背景类,让背景判断更准,这也是推理阶段减少误检的关键。

我记得原论文里专门统计过,在一个数据集上,纯proposal的数量占比并不低,大约有20%到30%的proposal是只覆盖单个目标的。如果没有对这类proposal的特殊机制,那些额外的预测头会在纯目标上产生冗余检测,反而给后处理带来麻烦。所以Impure Proposal Learning和纯proposal监督是一套组合拳,一个管多目标重叠,一个管单目标时不要“无中生有”。

5. 推理策略:没有NMS如何从容出门

5.1 直接从多个预测头导出结果

推理阶段乍一看是个麻烦事:每个proposal会输出K个框,如果每个proposal都输出两个预测,整张图的检测框数量直接翻倍。你不可能再依赖NMS来删减,因为NMS恰恰是拥挤场景的罪魁祸首。

CrowdDet的后处理思路是在置信度排序的基础上,用IoU预测分支来辅助筛选。每个预测头不仅输出类别分数,还输出一个IoU置信度,用来估计当前预测框与被检目标之间的真实IoU值。最终的打分可以简单看成分类分数和IoU置信度的结合:如果分类分数高但预测的IoU很低,说明很可能是个虚检;反过来,如果IoU置信度很高但分类分数一般,也可以考虑保留,因为它的定位很可靠。

对于多个预测头输出重复框的情况,论文采用了一种轻量级的解决方案。它不再用NMS那样全局贪心扫除,而是对具有高置信度且IoU重叠较大的重复预测做合并。本质上这是一个更温和的选优过程:不会像NMS那样武断地删掉邻近的所有框,只是在确认为同一实例的前提下选择分数最高的那一个。

5.2 背景类的作用被放大了

因为没有NMS来兜底,检测器必须自身具备更强的背景判别能力。训练时,背景类的学习变得极其重要。在原来的Faster R-CNN里,RoI Head只需要区分一个框是物体还是背景,背景类是大量存在的负样本。到了多预测阶段,每个预测头都可能面临“我应该输出一个物体还是背景”的判断。一旦预测头分不清,就会疯狂输出低质量的框。

所以CrowdDet在训练时对背景类的权重做了调整,尽可能让纯proposal中的多余预测头老老实实输出背景。这种机制直接决定了推理阶段的误检率。如果一个proposal本来只有一个目标,但它的第二个预测头强行输出一个框,且分类分数还不低,那后处理很难把它筛掉。我在实际测试中发现,CrowdDet训练如果不关注背景权重的平衡,最终MR(漏检率)指标会明显抬升,就是这个原因。

5.3 与NMS方案的对比

这里有一个很有意思的细节:论文在对比实验里展示了,即使用普通的NMS做后处理,CrowdDet仍然能取得比baseline好很多的指标。只不过换成它自己的后处理之后,效果还能再上一个台阶。这说明多预测结构的收益不依赖后处理策略,单独从训练层面就已经带来了显著的容错能力。而它的专用后处理策略则进一步释放了多预测结构的潜力。

我在实际落地时一般会保留这两个层面的设灵活度。如果项目对速度要求很高,后处理可以用简化版,只做一次置信度排序加重复框合并;如果对精度要求苛刻,则可以加上IoU预测分支参与打分。多预测头带来的额外计算主要在RoI Head,整体推理速度相比Faster R-CNN大约只增加不到10%,在可接受范围内。

6. 实验结果与消融:数据说明问题

6.1 两个数据集的对比表现

论文的实验主要在两个数据集上进行:COCO作为通用检测基准,CrowdHuman作为拥挤场景基准。CrowdHuman是一个专门面向拥挤人体检测的数据集,图像中行人密集,遮挡严重,标注框数量非常多。行业里衡量这类任务的指标除了AP,还有MR(漏检率)和JI(联合IoU,Joint IoU),MR越低越好,JI越高越好。

作者给出了两组关键结果。在COCO上,CrowdDet比基础Faster R-CNN略有提升,但提升幅度不大,AP大概从37.9涨到38.6左右。这符合预期,因为COCO的拥挤程度不高,多预测的优势体现不出来。而在CrowdHuman上,提升是肉眼可见的:AP提升超过5个百分点,MR下降了6.5个百分点,JI提升了2.3个百分点。这个提升幅度在目标检测领域算是相当显著的了,尤其是MR,直接说明多预测结构确实找回了更多原本被NMS杀掉的检出框。

我知道有些读者看到COCO提升不大可能会有疑虑,担心这套方法只在特定数据集上有效。我的看法是,COCO场景本来就是一个不太拥挤的分布,在这种数据上保持不降就已经算合格;CrowdHuman这些真实密集场景的增益才是这套方法的价值所在。如果你的业务数据里包含50%以上的拥挤图像,那CrowdDet带来的收益会非常直接。

6.2 消融实验里的门道

消融实验是这篇论文里信息量最大的部分。作者逐步拆解了每个组件的贡献:去掉Set Loss中的分类指导回归惩罚,AP会掉一点;去掉回归指导分类惩罚,AP也掉一点;把EM算法换成硬匹配,性能下滑最严重;把多预测头从2个减到1个,也就退化成了普通Faster R-CNN,提升完全消失。

这里最值得关注的其实是K值的影响。K=2是性能和计算量的平衡点。如果把K提升到3或4,理论上可以覆盖更加拥挤的场景,但实验结果显示提升并不大,反而在部分指标上有轻微回退。原因可能是当一个proposal覆盖3个以上目标时,特征已经被严重稀释,仅依靠一个RoIAlign的特征向量去区分三个人,信息量已经不够了。所以与其无限制增加K,不如从RPN层面增加更多高质量的proposal。

此外,作者还对比了Faster R-CNN基础上仅替换loss或者仅替换head的效果。单独换loss,没有多预测头支持,loss的设计无从发挥;单独换多预测头,没有Set Loss和EDI,训练会不稳定。两者的组合才是完整的CrowdDet。这种组件之间的强耦合关系是复现时最容易踩坑的地方——有些复现工作只做了多预测头的结构改动,却没有实现EDI训练算法,性能自然上不去。

6.3 复现时需要留意的数据细节

论文里没有明确提数据增强策略的细节变化,但我在复现时发现CrowdDet对正负样本比例和anchor尺寸比较敏感。因为拥挤场景中的目标通常很小且密集,RPN的anchor设计如果沿用COCO的默认配置,召回率会偏弱。建议在CrowdHuman这类数据集上把anchor的步长调小一些,同时增加小尺寸anchor的数量。这一步调整在某些实验中比调整模型结构本身更能影响最终AP。

另外一个容易忽略的细节是多预测头的初始化。两个预测头如果初始权重完全一样,梯度可能会让它们始终保持相似状态。建议对第二个预测头的初始化参数加入一些随机扰动,或者把两个预测头放在不同的权重初始化分布上,帮助它们天然分化。我在实验中做过对比,这样处理后最终模型里两个预测头的平均IoU重叠更低,学到了更多互补信息。

7. 我对论文的理解、局限与落地思考

7.1 这篇论文给检测领域带来了什么

从学术贡献来看,CrowdDet最大的价值是把“一个proposal对应一个真值”这个隐含假设彻底打破,并证明了打破这个假设之后,拥挤场景检测可以取得如此大的提升。它不像DETR那样重新构思整个检测范式,却在Faster R-CNN框架的内核上挖出了一条新路。某种程度上,它是“集合预测思想”在单阶段proposal层面的较早尝试,启发了后来一系列基于集合匹配的检测工作。

从工程视角看,它给出的也是一个相当实用的启发:如果某些场景束缚了检测器的上限,不妨反思训练时那些默认不变的数据关联方式和监督信号。很多情况下,让模型“一张嘴说多个数”的改动成本远低于重新设计一个检测流程,却能带来实质性收益。

7.2 局限性和后续可以改进的方向

CrowdDet也存在局限。最明显的是K值固定的问题。在极端拥挤的场景中,比如密集的人群踩踏画面,一个proposal里同时包含四五个行人也不算稀奇。此时K=2就不够用了。一个自然的改进方向是让K变得自适应,让网络根据proposal特征判断出“这里可能有多少个目标”,再动态调节预测头数量,但实现起来困难不小,目前学术界也还没有特别理想的做法。

另一个局限在于RPN的瓶颈。RoI Head能输出多个预测,但如果RPN根本没有为某个目标生成proposal,后续再多的预测头也无济于事。所以在极度拥挤的场景下,如何提升RPN的召回能力仍然是绕不开的课题。有研究者尝试在RPN阶段就引入多预测机制,或者结合密度图估计生成更鲁棒的proposal,这些方向都有继续探索的空间。

7.3 我个人在实际应用中的体会

我第一次把CrowdDet的代码跑在自制的人群计数数据集上时,最大的观感是:检测结果终于不再“打架”了。以前用普通Faster R-CNN,两个人并排站立时,经常只输出一个框,而且那个框的位置还会被两个人的边界夹在中间,看起来既不是左边的人也不是右边的人。换上CrowdDet后,这种情况明显改善,两个人都能被各自完整地框出来,框的位置也更贴近各自的真实轮廓。

不过我也发现,这套方法对“背景类”的依赖比想象中强得多。如果你把CrowdDet迁移到一个目标类别繁多、场景背景复杂的检测任务上,背景类的学习压力会成倍增加。这时我建议优先把精力花在负样本挖掘和背景类损失权重的调节上,不要一上来就调Set Loss里的各项系数。背景判不准,多预测头的收益会被误检完全抵消。

如果让我用一句话总结这篇论文,我会说:它用一个简洁而优雅的假设替换,即“一个proposal可以对应多个目标”,配合上EM迭代训练和专门设计的集合损失,把拥挤场景检测的边界往前推了一大步。即使放在今天,这套思路对工业界处理密集小目标、遮挡目标仍有很高的参考价值。希望这篇笔记能帮你在读论文时少走一些弯路,如果你也在做类似的密集场景检测,强烈建议直接动手跑一跑它的代码,直观感受一下“一个框输出多个预测”带来的变化。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/15 11:13:01

维度建模与本体建模:数据分析中的建模选型与实践指南

做数据分析的人,几乎都遇到过这种纠结:手上攒了一堆业务数据,要给管理层做报表、给运营做分析,数据到底该怎么组织?开会讨论时,搞数仓的同事说“必须按维度建模来,不然报表跑不动”,…

作者头像 李华
网站建设 2026/10/15 11:11:07

计算机网络第一章习题答案(第七版)精解与思维训练

1. 这份习题答案到底能帮你解决什么问题? “计算机网络-自顶向下方法 第一章课后习题答案(第七版)”——光看标题,很多人第一反应是“抄作业指南”或者“期末速成包”。但作为带过十几届网络课程、批改过上万份习题的从业者&#…

作者头像 李华
网站建设 2026/10/15 11:11:06

Flink高可用HA部署实战:从ZooKeeper配置到状态恢复避坑指南

1. 为什么Flink高可用部署不是“可选项”,而是生产环境的生死线我第一次在某电商大促保障项目里看到Flink作业凌晨三点自动挂掉、状态丢失、重启后数据重复消费,导致实时订单统计翻了三倍——当时运维同事盯着监控面板手心全是汗,而开发团队还…

作者头像 李华
网站建设 2026/10/15 11:10:40

Qt UDP 文件传输实战:分片重组、ACK重传与弱网优化

简介:这是一份面向Qt网络编程初学者与进阶开发者的UDP文件传输实战源码包,聚焦无连接协议下图片、文档等文件的可靠收发问题。资源围绕QUdpSocket套接字创建、数据分包与序列号封装、接收端重组、超时重传与CRC校验等核心环节展开,并引入QTcp…

作者头像 李华
网站建设 2026/10/15 11:09:51

Harvester 中的 uitable:为终端应用构建可读表格的 Go 语言库

云原生虚拟化存储后端高可用 【免费下载链接】harvester Open source hyperconverged infrastructure (HCI) software 项目地址: https://gitcode.com/gh_mirrors/ha/harvester 点击查看 免费下载 导读 uitable 是一个专为终端(terminal)应…

作者头像 李华
网站建设 2026/10/15 11:09:50

SpringBoot短视频平台开发:架构设计与性能优化

1. 项目概述:短视频分享平台的SpringBoot实现方案去年帮一个MCN机构搭建内部视频管理系统时,我选择了SpringBoot作为技术底座。这种全栈式的开发框架特别适合快速构建功能完备的短视频平台。典型的短视频系统包含三个核心模块:内容生产端&…

作者头像 李华