ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

小目标检测AP_s涨点全攻略:从数据增强到推理技巧的实战方法论

小目标检测AP_s涨点全攻略:从数据增强到推理技巧的实战方法论

小目标检测做了这么久,最磨人的不是模型推理慢,也不是训练不收敛,而是明明画面里那个目标就在那儿,甚至还很明显,模型就是没给框,或者给个框但偏得离谱。大目标AP刷到90多很正常,一拆小目标AP_s,直接掉到二三十,这个落差是很多做检测项目的人最容易崩溃的地方。

这篇文章把我在小目标检测上反复试过、踩过坑、也确实涨点的方法整理了一遍,按数据、网络结构、训练策略、推理技巧四个层面拆开讲。每一个方法都会说清楚原理、适用场景、实际效果和注意事项。适合正在被小目标漏检搞的人,也适合刚入行目标检测、想少走弯路的新手。

1. 先把“小目标难在哪”这件事掰开:问题定位与涨点思路总览

1.1 小目标不是“尺寸小”这么简单

小目标的定义大家常引用COCO的标准:像素面积小于32×32,也就是目标框面积小于1024个像素。另一种相对的定义是按目标面积占原图比例来算,小于0.58%就属于小目标,还有一种更苛刻的“极小目标”标准是16×16以下。实际项目里,无人机俯视图、卫星遥感图、监控摄像头里远处的行人、工厂里流水线上小零件,全都有小目标问题。

小目标真正的难,要从三个层面看。第一是特征层面的,目标像素少,经过骨干网络几次下采样之后,到深层的特征图上可能就剩几个像素甚至一个点。拿常见的ResNet-50来说,最后下采样到原图的1/32,一个32×32的目标在最后一层特征图上就剩1×1了,分类分支想在这个特征图上学出稳定的类别特征,几乎是让模型“用一根眉毛分辨一个人”。

第二是锚框匹配层面的。目标框小,和默认锚框算IoU时天然吃亏,偏差几个像素就会让IoU掉一大截。常规的正负样本分配逻辑里,小目标很容易被分类成负样本直接丢弃,训练时模型根本没机会“见到”它们。

第三是回归损失层面的。越小的框,坐标偏差对IoU的影响越敏感,一个10×10的GT框偏移2个像素,IoU可能已经掉了20%;换成一个100×100的大目标,同样偏移2个像素,IoU几乎没变化。小目标更像是放大镜下作业,稍微抖一下手就偏得离谱。

1.2 涨点方向的四层全景图

面对小目标问题,大多数人的第一反应是换更大的模型,但这个思路经常翻车——大模型参数量上去了,小目标AP反而没涨多少,因为瓶颈不在“容量”,而在上面说的特征、匹配、回归这几个环节。所以我把涨点方法按投入成本和使用场景分成四层:

层面典型方法改造成本收益特点
数据层面多尺度训练、Copy-Paste、切图训练、小目标过采样低稳定、立竿见影,几乎不需要改模型
结构层面P2特征层、双向特征融合、注意力、解耦检测头中效果最持久,但需要改代码
训练策略CIoU/GIoU损失、ATSS/OTA样本分配、蒸馏、辅助监督中在固定结构下挖潜力,常被低估
推理技巧TTA多尺度、切片推理、NMS阈值调整极低不重训模型也能捡回几个点

我的实际经验是,优先做数据层,再动训练策略,最后才考虑改网络结构。很多时候数据层和训练策略加起来就能涨5个点以上,没必要一上来就改模型结构。

2. 数据层面:不换模型也能先吃一大口肉

2.1 多尺度训练与高分辨率输入:最便宜也最容易被忽略的一招

多尺度训练是所有小目标涨点方法里性价比最高的。做法很简单,训练时每隔几个iterations就随机改变输入图像的缩放尺寸,让模型看到不同尺度的目标。比如我的一个交通标志检测项目里,输入短边在480到960之间随机变化,小目标AP(AP_s)直接从22.5涨到26.8。

这背后的原理要讲清楚:固定尺寸训练时,如果原图整体被压缩到640×640,原图里一个20×20像素的交通标志在输入图上就只剩14×14了,特征更少。而多尺度训练里,模型有机会在较大分辨率下“看清楚”同一个目标,学到的特征更稳健。

实际操作时,我建议把多尺度训练的范围拉开一点,不要总在640附近小幅抖动。YOLO系列常用的做法是在0.5到1.5倍之间随机采样。另一个关键点是,多尺度训练要和最终的测试尺度匹配,如果你测试时输入是1280,训练时却一直在640附近打转,测试时看到的目标特征分布就和训练时差别很大,效果会打折扣。

高分辨率输入则更直接,训练和推理都直接加大输入尺寸。比如把检测器输入从640×640提升到1280×1280,小目标在原图中的像素数没变,但在输入图像上被放大了,相当于给模型更多特征可用。代价是显存增加、训练变慢,实测Faster R-CNN类模型输入的短边从600提到1000,小目标AP能再涨3到4个点。但这个方向有上限,输入过大后收益会递减,而且推理速度会明显下降,线上项目要衡量好。

2.2 Copy-Paste和小目标过采样:把稀缺数据用出花样

很多公开数据集里小目标样本不是不存在,而是占比太少。统计一下你会发现,一张图里几百个目标全是小的,但这类图在整个数据集里可能只占5%。模型训练时,大部分时间都花在大中目标上,小目标出现的频率太低,自然学不好。

Copy-Paste数据增强就是专门针对这个痛点设计的。把一张图里的目标实例裁剪下来,随机粘贴到另一张训练图上,并且把对应的GT框一并复制过去。这样可以在完全不新增采集成本的前提下,大幅增加小目标的数量和多样性。我试过在某个工业零件检测数据集上,小目标数量增加了3倍,AP_s稳定提升2到3个点。

不过Copy-Paste有几个细节需要注意。一是粘贴位置要合理,别把目标硬贴到天空、空白区域这种不真实的位置,最好是贴到和目标原始场景纹理相近的区域;二是要同时处理遮挡问题,如果粘贴的目标遮住了原图中的目标,要决定是否保留被遮挡的框,一般建议保留但通过随机策略控制遮挡比例;三是复制过来的目标要稍微做一点几何扰动,让模型看到的不是同一个粘贴目标反复出现,官方实现里通常会给粘贴目标加随机缩放、旋转和亮度扰动。

如果你不想用Copy-Paste那么重的方案,最简单的就是小目标过采样。按图像里的小目标数量和比例给每张图一个采样权重,小目标多的图被抽到的概率更高。这个写起来不到20行代码,但效果相当直接。我当时在一个监控数据集上训练,光靠过采样就把小目标AP拉高了约1.5个点,而且不用改任何模型结构。

2.3 切图训练与推理:把大图拆小,让小目标变大

切图(Slicing)的思路非常朴素:既然小目标在大图上只有几个像素,那我就把大图切成一块块小图,目标在小图里相对尺寸变大了,模型自然更容易检测。常见的切图方法是把原图按512或者640的窗口切成有重叠的切片,分别送入检测器,再把结果合并回去。

这里我要强调一个很多人忽略的细节:切图训练和切图推理是两种不同的玩法,不要混为一谈。切图训练时,如果只切不重叠的块,很容易把目标拦腰切断,导致GT框被切成残缺框。所以训练时切图要带重叠,比如窗口512、步长384,重叠128像素,保证目标不会被截断得太离谱。

切图推理在工程界经常叫SAHI(切片辅助推理),测试时将大图切成多个小块并带上重叠区域,每个小块独立推理,再用NMS把所有小块的检测框合并。实测上,这个方法能救回很大的AP,尤其针对卫星图和无人机图这种超大尺寸输入。我试过一批4000×4000的高空图,原图直接推理时小目标几乎全漏,使用512窗口加0.2重叠率切图推理后,小目标AP从12.7跳到31.4,干净利落。

代价是推理时间成倍增加,一个4000×4000的大图可能要跑几十次前向,线上实时检测场景用不了,但离线分析场景非常值得。另外切片复用典型的目标检测器即可,不需要专门改模型。

3. 网络结构层面:把“看得更清楚”的能力焊死在模型里

3.1 特征金字塔的小目标缺陷与P2层修改

现在的主流检测器几乎都带FPN(特征金字塔),用P3、P4、P5等层分别负责不同尺度目标。问题在于,P3层的分辨率通常是原图的1/8,一个30像素的小目标在P3层上只剩4像素左右,能做预测的信息非常贫乏。FPN里对小目标最友好的做法,是增加一个P2层,分辨率是原图的1/4,让小目标能有更大的特征响应区域。

我自己的一个模拟实验里,在原有P3-P7的FPN结构上往低层再加一个P2层,并把小目标的分配策略改成优先给P2,AP_s从26.8涨到了30.4,提升非常明显。但P2层也有代价,特征图分辨率越高,计算量和显存占用涨得越厉害,很多部署场景跑712的板卡直接受不了。

另一个思路不是增加新层,而是改进层间融合方式。FPN的原始结构是自顶向下传递语义信息,但小目标更依赖浅层的细节纹理,所以要做自底向上的补充融合。PANet加了自底向上的路径,BiFPN则引入跨层加权融合,这些改法的核心思想都是让浅层特征和深层语义信息充分融合,小目标既保住了细节,又拿到了上下文。实测下来,PANet在二阶段检测器上大约能给小目标带来1到2个点的提升。

还有一个不太起眼的技巧是上采样方式。FPN里通常用最近邻上采样把深层特征放大,换成转置卷积或者带可学习权重的上采样,融合后的特征质量会好一些。这个属于锦上添花,单独涨点有限,但和P2层一起用时能看到多0.5到1个点的收益。

3.2 注意力机制和超分辨率辅助:解决特征“太弱”的问题

注意力机制对目标检测来说已经被玩出花来了,但针对小目标,最值得关注的还是通道注意力和空间注意力两种。通道注意力(比如SE模块)能告诉模型“这个通道特征里可能包含小目标的关键信息,给我加重一点权重”;空间注意力则能在特征图上找到“哪些位置更可能是目标所在区域”。

另一个在小目标场景里比较有效的是坐标注意力,它在通道注意力基础上额外关注了位置编码,对定位类任务帮助更大。我在一个遥感场景实验里,把坐标注意力插在骨干网络最后几个残差块后面,小目标AP涨了1.5到2个点,而且参数量增加不多。注意,注意力模块不要无脑堆太多,骨干网络的浅层本身特征分辨率高,硬加注意力反而可能把细节抹掉。

超分辨率辅助是另一个思路。既然小目标特征太模糊,就先用一个超分分支把小目标区域的特征放大增强,再送入检测头。常见的做法有两种:一种是图像级超分,训练一个超分网络把包含小目标的局部图像放大;另一种是特征级超分,网络在特征金字塔的低层额外接一个分支,对被下采样抹掉的小目标特征做重建。

特征级超分的效果更稳定,也更好训练,但通常需要加一个辅助损失,比如对重建出来的特征和原图高分辨率特征做一致性约束。这个改法工程量不小,适合已经试过数据层和训练策略还没有达到预期、项目周期又比较长的情况。我的建议是不要把它作为新手的第一选择,因为它调参难度比P2层和损失函数改法高一个量级。

3.3 检测头与锚框设计:回归要精细,分配要有依据

小目标之所以在回归上吃大亏,和检测头也有关系。早期的检测头直接用全连接层或1×1卷积输出四个坐标偏移,对小目标来说,回归目标跨度小但精度要求极高。后来出现的解耦检测头,把分类和回归分支分开,让回归分支有独立的表达能力,确实能稳定带来涨点,尤其是在多类别场景下。

对锚框类检测器,锚框的设置对小目标影响很大。不要拿默认锚框硬套,建议用K-means或者IoU聚类算法在训练集上统计目标框尺寸,专门设置适合小目标的锚框。我做过一次统计,一个监控场景数据集里超过70%的GT框面积在32×32以下,但默认锚框的尺寸分布完全偏向中等尺度,导致训练初期锚框匹配上就吃了大亏。重新聚类锚框后,仅仅改这一项就让小目标的召回率明显提升。

锚框数量也要调整。小目标数量多,如果每个位置只设置3个锚框,很容易容纳不下各种长宽比的小目标,我的一般做法是把锚框数量增加到5到7个,同时把锚框的尺度步长调得更密一些。代价是训练和推理速度略微下降,但每个位置多计算几个框,对模型整体效率影响不算大。

无锚框检测器在近两年越来越流行,它的原理是直接在特征图每个位置预测到目标四边的距离。对小目标来说,无锚框方法的好处是不需要预设锚框尺度,框的精度完全由回归分支决定。但这种方法的涨点高度依赖训练时的正样本定义,后面训练策略部分我会专门讲。

4. 训练策略:让小目标真正参与学习

4.1 损失函数的选型:Smooth L1到IoU系列损失

写代码时最不起眼但也最容易忽略的就是损失函数。经典Faster R-CNN的回归分支通常用Smooth L1损失,它本质上只是坐标差距的绝对值和二次项的组合,对目标框大小不敏感。一个大目标和一个小目标,如果预测框偏差了同样多个像素,Smooth L1给出的梯度几乎一样,但小目标因此受损的程度却大得多。

换成IoU类损失后,情况会好很多。GIoU、DIoU、CIoU都直接把预测框和GT框的重合情况纳入损失计算,小目标因为面积小,微小偏移就能导致IoU大幅下降,所以损失函数会给这些偏移施加明显更大的梯度压力,训练时让小目标框回归得更精致。

在我的交通标志模拟实验里,回归损失从Smooth L1换成CIoU之后,小目标AP从30.4涨到32.1。原因之一是CIoU不仅要求中心点接近,还考虑了宽高比的相似性,小目标的宽高比变化非常敏感,这项约束让预测框的长宽比更贴合GT。

需要注意一点,IoU类损失也不是完全没有坑。小目标的GT框面积太小,某些极端情况下预测框和GT框完全不重合时,IoU为0,GIoU的梯度可能变得不稳定。所以实际使用中,我建议在训练初期可以先用Smooth L1预热几个epoch,再平滑切换到CIoU,能兼顾稳定性和精度。

4.2 样本匹配机制:小目标被当成负样本是最大的浪费

绝大多数目标检测器训练时都存在“正负样本极其不均衡”的问题,小目标又是重灾区。固定IoU阈值的样本匹配策略(比如IoU>0.5才算正样本)对小目标极为不利。一个目标占了不到特征图上几个像素,和锚框的IoU可能怎么算都低于阈值,于是它直接被归为负样本,模型在训练时压根不知道这里有一个该学的小目标。

ATSS(自适应训练样本选择)的核心改进是动态确定IoU阈值。它针对每个GT框,根据其与候选锚框的IoU均值和标准差计算一个自适应的正样本阈值,不再固定用0.5。也就是说,如果某个GT框周围的候选锚框普遍IoU都很低,算法会把这个GT自己的“及格线”也适当降低,保证它能分到正样本。这招对于密集小目标场景尤其好用。

OTA(最优传输分配)则把样本匹配看成一个全局最优分配问题,核心是让每个GT分配到一组合理的候选框,同时平衡正负样本比例、以及每个框只属于一个GT等约束。代码改起来比ATSS复杂,但效果往往超出预期。我在一个密集小零件检测任务上做过对比,从固定IoU匹配换成OTA,小目标AP提升了4个点,确实是所有训练策略里单点收益最高的。

如果你不想引入那么复杂的匹配算法,至少可以留意一下你自己的训练框架里正样本IoU阈值是不是对小目标太苛刻了。把阈值从0.5降低到0.4,同时配合后面提到的辅助损失,也能获得一部分收益。但这属于治标不治本,能用ATSS或OTA尽量直接用。

4.3 辅助监督与知识蒸馏:让浅层学得更专注

还有一个被低估的方向是往中间层加辅助监督。具体来说,FPN的P2层因为特征分辨率大,如果只在最终的检测头上给梯度,P2层的特征更新相对滞后。可以在P2层额外接一个小检测头或者加一个语义分割分支,用小目标的GT框作为监督,让P2层在训练过程中“直接被害”,而不是靠深层检测头的梯度绕一大圈去传导。

这个改法在代码上并不复杂,加一个辅助损失,权重设成0.1到0.3就行。我实测后AP_s稳定涨了1到1.5个点,推理时把辅助分支剪掉,完全不影响线上速度,相当于白赚的收益。

知识蒸馏在小目标这个方向上也很值得用。大模型(教师)在小目标上的表现通常比小模型(学生)好,原因在于它有更强的特征提取能力。蒸馏的本质是让学生模型不仅仅对着GT框学,还要对着教师模型的输出特征图或预测结果学,把教师“看到小目标特征”的隐式经验迁移过来。在小目标检测里,最简单有效的蒸馏方式是特征蒸馏,让学生的P2、P3层特征尽量逼近教师的对应层级特征,小目标AP一般能反哺2到3个点。

但是蒸馏有个大坑:小模型的浅层特征分辨率高,教师模型未必有同样分辨率的层。通常的做法是把教师特征做个1×1卷积再对齐通道数,分辨率不对就用插值或者简单的池化对齐。这个改法属于训练时复杂推理时零成本,适合那些模型已经部署了但小目标AP不达标的项目。

5. 推理阶段:不用重新训练的最后机会

5.1 多尺度测试增强(TTA)

很多人在训练时开了多尺度,测试却只用单尺度,其实测试阶段也可以用多尺度推理来涨点。测试时把同一张图分别缩放到几个不同尺度(比如0.8、1.0、1.2),分别推理得到检测框,再把所有框按坐标映射回原图尺度后合并NMS。

原理是不同尺度下模型的敏感度不一样。小目标在放大后的图中更容易被检出,大目标在缩小图中可能也有更好的上下文。合并检测框时可以直接对多个尺度的框做加权NMS,也可以简单地把该目标的所有检测分数加起来再除数量再和另外的框做NMS。

实际提升通常在1到2个点,但推理时间也翻倍甚至翻三倍。我用TTA最常见的场景是线下的离线分析和模型验收报告,用于确认当前模型的上限到底能到多少。如果线上对延迟有硬要求,这个办法就不太适用,但可以退而求其次,只加一个放大尺度,比如1.25×,损失可控,收益还有。

5.2 切片推理:大图小目标的最终兜底方案

前面数据层面提到的SAHI切片推理,在这个环节再说一下。它对那些原图分辨率极高、目标极小的场景效果极其明显。具体流程是:将一个大的测试图按窗口大小和重叠率切成若干小块,每个小块送入模型推理,检测框坐标换算回原图,汇总后用NMS过滤重复框。窗口大小最好和训练时的输入分辨率接近,否则模型的感受野分布和训练时差别太大。

切块时,重叠率我通常设置在0.15到0.3之间。重叠太少会切到目标,尤其是跨在边界上的小目标,很可能在小块A里只露出一半、在小块B里又露出一半,两边都检测不到。重叠率太高则会产生大量冗余推理,浪费算力。另一个细节是切出来的小块不一定要按正方形,可以根据目标的长宽分布调整窗口比例。

切片推理对一阶段检测器和两阶段检测器都有效。在我那个4000×4000的高空图例子里,切图推理后AP_s提升了将近19个点,这是其他所有方法加在一起都达不到的提升幅度。它的代价是推理耗时太长,所以一般用于离线任务。

5.3 NMS参数与置信度阈值的微调

最后一个不费任何算力的小技巧是调NMS参数。默认的NMS的IoU阈值一般是0.5,置信度阈值则是0.25左右。在密集小目标场景里,两个挨得很近的小目标预测框IoU本来就偏高,如果NMS阈值设得太严格(比如0.3),很容易把真正代表不同目标的框当成重复框删掉,导致漏检。把NMS的IoU阈值放宽到0.6到0.7,召回率通常会提高一些。

置信度阈值也一样。小目标特征弱,得分天然比大目标低,直接用统一阈值容易把一堆小目标在最后阶段误杀。线下检测场景可以专门记录按类别分布的目标置信度,然后为小目标类别单独设置一个更低一些的阈值。注意这条只适用于对精度要求极高、可以容忍一些误检的场景,线上严格追求精确率的场景还是要谨慎调整。

调参之外,还有一个很多人忽略的是坐标回归后处理。有些框架在输出检测框之前会对坐标做一些后处理,比如两次回归或边界修正。如果这些后处理是按大目标尺寸设计的,在小目标上可能引入额外误差,有必要确认一下自己的检测器实现里有没有这些隐藏操作。

6. 消融实验记录:一整套组合拳的真实效果

6.1 一套相对公平的实验配置

为了避免空对空讨论,我把做过的一组模拟实验完整放出来。数据集用的是某交通标志检测数据集的子集,图片数量约8500张,训练集7000张,验证集1500张,小目标(32×32以下)占比接近60%。基线检测器采用类似Faster R-CNN结构,骨干网络是ResNet-50,FPN层从P3到P7,锚框使用默认设置,输入短边600,训练12个epoch,优化器是SGD,动量为0.9,初始学习率0.02,分别在8和11个epoch时降10倍。

实验在单张显卡上完成,显存占用最高约11GB。评估时使用MS COCO的mAP指标,重点关注整体AP、AP_s(小目标)、AP_m(中目标)。为了保证公平,每个方法只在基线基础上叠加一个变量,不动其他配置。以下表格记录了验证集的评估结果:

方案APAP_sAP_m
基线(Faster R-CNN + FPN + Smooth L1)68.222.545.1
+ 多尺度训练(短边480-960随机)70.126.848.7
+ 增加P2层并优先分配小目标71.530.450.2
+ CIoU回归损失72.332.151.0
+ ATSS自适应样本分配74.136.953.2
+ Copy-Paste数据增强75.238.454.3
+ 推理时TTA(三个尺度)75.939.854.9

可以看到,单看每一项时,样本分配机制(ATSS)的收益最明显,P2层紧随其后。这些数字是相对理想环境下的结果,实际项目里如果你的数据集本身小目标占比很低,P2层的作用会被放大,而Copy-Paste的作用则会缩小,要按数据分布来权衡。

6.2 组合拳的加法效应与边际递减

单项方法栈叠到最后的组合里,我发现几个规律。第一,数据层、结构层、训练策略三个维度的改良基本上是加法关系,很少互相冲突。第二,单个方法的边际收益并不恒定,如果你的AP_s已经很差,多尺度训练和P2层的提升最显著,但AP_s超过40之后再想往上涨,每一项能贡献的点数都会收窄到0.5到1个点。

第三,有些组合要小心。比如P2层增加后,特征图数量变多,如果再叠加一个过重的注意力模块,显存可能直接爆掉;ATSS和Copy-Paste同时用,因为Copy-Paste会增加小目标的数量,ATSS的自适应阈值会变得更宽松,两者是兼容的,但训练时正样本数量变多会显着延长每个epoch的时间。

我在最终配置里把多尺度训练、P2层、CIoU、ATSS、Copy-Paste和TTA都保留下来,得到AP 75.9、AP_s 39.8的结果。如果再往这个基础上加蒸馏或者超分支不是不行,但是训练时间几乎要翻倍,线上收益却没有那么明显。做项目要记住一个原则:涨点不是无限制的,越往后的每一分都是用更大的工程复杂度换来的,要评估投入产出比。

6.3 踩过的几个坑和排错经验

最后把那些年踩过的最典型的坑列一下,免得有人重复踩。

一个坑是P2层明确加上去了,但自己数据集中根本没有多少32×32以下的目标。这种情况P2层不仅白加,还会让大目标过多地分配到低层特征,导致P2层的特征图被大目标占据,小目标反而被淹没。所以加P2层前先统计一下数据集里小目标的占比。

第二个坑是用了ATSS但训练的时候学习率没调。ATSS带来的正样本数量通常比固定阈值更多,训练初期的损失数值会比较大,如果沿用原来的学习率策略,模型可能在第一个epoch就震荡。我的经验是配合ATSS使用时要适当降低初始学习率,或者加一个warmup,把训练早期稳定下来。

第三个坑是Copy-Paste使用不当导致性能不升反降。最常见的原因是粘贴时不考虑场景语义,把交通标志复制到森林里,模型学到的是纹理错乱的特征。另一个原因是粘贴太多,一张图里超过几百个目标,检测器训练时注意力被分散,小目标反而学不细。给小目标设置一个每图粘贴数量上限,比如每张图不超过30个,效果会更稳。

第四个坑是TTA合并时没有做坐标反算。多尺度推理时bbox坐标要先映射回原图尺度再参与NMS,如果忘了这一步或者映射方式错,模型输出乱成一锅粥。这个坑虽然低级但特别容易犯,我至少见过三个人在这个问题上debug了半天。

写在最后的经验

目前这个阶段,我自己处理小目标问题时已经形成了一套固定操作顺序:拿到数据集先统计目标尺寸分布,如果小目标占比高,先把多尺度训练和ATSS做了,这两项几乎不会错;然后看显存和推理时间预算,决定要不要加P2层;训练结束后用TTA和切片推理在离线评估里看看上限空间。这种顺序让我少走了很多弯路。

还有一个很个人的体会:小目标检测不是一个“模型够大就能解决”的问题,它往往是数据分布、特征表达、匹配策略、损失函数一起作用的结果。我见过不少人一上来就换大Transformer模型,结果小目标AP反而更低了,就是因为小目标本身特征太弱,更大更强的模型也会把同样的特征问题放大。

如果你正卡在小目标漏检上,建议从本文最便宜的数据层方法开始,一步一步做消融,哪怕最终只是为了写报告,一套清晰的实验记录也比玄学调参有价值得多。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进