1. 小目标检测概述

做目标检测这些年,我遇到过不少让人头疼的场景。比如无人机拍到的行人、卫星图里的小汽车、工厂质检面板上的微小划痕。这些目标在整张图里就占那么一丁点像素,人眼都得凑近了看,更别说让模型去认了。

说白了,小目标检测就是要在图像里找到那些「小得可怜」的物体。但问题来了——多小才算「小」?

1.1 小目标的定义

学术界和工业界对小目标有几种常见的定义方式。我个人习惯用下面这张表来跟团队对齐口径:

定义标准 具体指标 典型场景
相对尺寸 目标面积占原图比例 < 0.1% 遥感图像、航拍
像素 目标尺寸 < 32×32 像素 COCO 数据集定义
特征尺度 目标在特征图上的响应 < 1 个网格 YOLO 系列检测
工程经验 目标 < 原图宽高的 5% 工业质检、安防

嗯,这里要注意——不同任务对「小」的容忍度差别很大。我在做智慧交通项目时,32×32 像素的行人已经算「大」了,但在医学影像里,一个细胞可能只有 8×8 像素。

核心观点:小目标没有统一的尺寸标准,但有一个共识——目标在特征图上可用的信息太少,导致模型难以提取有效特征。

1.2 小目标检测的难点与挑战

你想想看,一个 16×16 像素的目标,经过 YOLO 的几次下采样后,在特征图上就剩 1×1 甚至更小了。这能提取到什么特征?说白了,就是信息量不够。

我总结了四个核心难点,每个都是我在实际项目中踩过的坑:

  1. 特征信息严重不足——小目标本身像素少,经过卷积和池化后,有效特征几乎被稀释殆尽。我曾经在无人机巡检项目里试过原版 YOLOv5,小目标召回率不到 20%。
  2. 锚框匹配困难——YOLO 的锚框是基于数据集聚类得到的。小目标的锚框尺寸小,跟背景噪声的尺度接近,导致正负样本失衡。我记得有一次调参,锚框怎么调都调不好,最后发现是数据里小目标标注框的宽高比太极端。
  3. 定位精度差——小目标的边界框偏移几个像素,IoU 就掉得厉害。YOLO 的回归头对微小偏移不够敏感,这是结构上的硬伤。
  4. 背景干扰严重——小目标往往淹没在复杂的背景纹理中。比如森林里的无人机、人群中的小物件,模型很容易把背景纹理误判为目标。

避坑指南:我曾经在工业缺陷检测项目里,直接用 COCO 预训练权重做迁移学习,结果小目标一个都没检测出来。后来才发现,COCO 的小目标定义跟工业场景差太远——工业缺陷可能只有 4×4 像素,而 COCO 的「小目标」是 32×32。所以,一定要根据你的实际数据重新定义小目标,别盲目套用公开数据集的标准。

1.3 YOLO 系列在小目标上的瓶颈

YOLO 系列从 v1 到 v8,大目标检测已经做得相当好了。但小目标检测一直是它的软肋。为什么会这样?我画了一张图来说明:

YOLO 小目标检测瓶颈分析 YOLO 小目标瓶颈 下采样过深 特征图分辨率低 锚框不匹配 正样本太少 感受野过大 小目标被稀释 NMS 误杀 小框易被抑制 核心问题: YOLO 的 backbone 设计偏向大目标,下采样倍数高(32×), 小目标在深层特征图上几乎消失。同时,检测头对小目标的 定位回归不够精细,导致漏检和误检。 优化方向:多尺度特征融合 + 改进锚框 + 增强小目标特征

具体来说,YOLO 的瓶颈主要体现在以下几个方面:

1.3.1 下采样导致的信息丢失

YOLOv5 的 backbone 最大下采样倍数是 32 倍。一个 32×32 的小目标,经过 5 次下采样后,在特征图上只剩 1×1 像素。你想想看,一个像素点能提供什么信息?说白了,就是几乎丢失了全部空间结构信息。

我的经验:在做小目标检测时,我通常会限制 backbone 的最大下采样倍数不超过 16 倍,或者保留浅层特征图(如 P2 层)参与检测。这个改动虽然会增加计算量,但小目标的召回率能提升 10-15%。

1.3.2 锚框设计不合理

YOLO 的锚框是通过 K-means 聚类得到的。但聚类结果严重依赖训练数据。如果数据里小目标占比少,聚类出来的锚框就会偏向中大目标。我曾经在一个人脸检测项目里,数据里 80% 的人脸都小于 20×20 像素,但聚类出来的锚框最小是 30×30——这显然不合理。

1.3.3 感受野与目标尺度不匹配

YOLO 的深层特征图感受野很大,适合检测大目标。但小目标需要的是小感受野,否则会引入大量背景噪声。这个问题在 FPN 出现后有所缓解,但依然存在——FPN 的顶层特征图感受野还是偏大。

1.3.4 NMS 对小框不友好

标准 NMS 算法在计算 IoU 时,小框之间的 IoU 对像素偏移非常敏感。两个相邻的小目标,只要框稍微偏移一点,IoU 就可能从 0.7 掉到 0.3。这导致 NMS 要么误杀,要么漏检。我遇到过最极端的情况——NMS 把同一目标的多个小框全杀了,一个都没留下。

小结:YOLO 在小目标检测上的瓶颈,本质上是「结构设计偏向大目标」和「小目标信息量不足」之间的矛盾。后面的章节,我会逐一给出针对性的优化方案,包括多尺度特征融合、改进锚框策略、注意力机制增强、损失函数优化等。这些方法我在多个项目中验证过,效果确实不错。