上一篇已经知道了:

  • 卷积会提取特征

  • 特征会形成特征图

  • 下采样会让特征图尺寸变小

  • 浅层特征细节多,深层特征语义强

那么现在自然会冒出一个问题:

既然深层特征更“高级”,那目标检测为什么不直接用最后一层特征做预测?

答案就是:

因为目标有大有小,而且难点不一样

这就是这一篇要讲的核心。


1. 目标检测为什么比分类难得多

分类任务通常只回答一个问题:

  • 这张图主要是什么

但目标检测要同时回答:

  • 图里有什么

  • 每个目标在哪里

  • 有几个目标

  • 大小分别怎样

  • 有没有遮挡

  • 有没有密集分布

所以检测比分类多了一个很麻烦的问题:

空间尺度问题

也就是:

  • 有的目标很大

  • 有的目标很小

  • 有的目标只占图中很小一块

  • 有的目标几乎占满整张图

如果模型不能同时处理不同尺度的目标,它就很难做出稳定检测。


2. 什么叫尺度 scale

这里的“尺度”,不用想得太玄。

在目标检测里,它通常就是指:

目标在图像中的大小范围

比如同样都是“人”:

  • 近景里的一个人,可能占图像很大区域

  • 远处的一个人,可能只占十几个像素宽

它们类别一样,都是 person。但对模型来说,检测难度差很多。

所以“多尺度目标检测”说白了就是:

模型要同时兼顾大目标、中目标、小目标


3. 为什么小目标特别难

这是技术汇报里很重要的一点。

小目标难,主要难在这几个方面。


(1)像素少,信息量本来就少

一个很小的目标,在原图里可能只占几十个像素,甚至更少。

比如一个远处行人,可能只有:

  • 模糊轮廓

  • 很少纹理

  • 细节极少

那模型可利用的信息本来就不多。


(2)下采样之后更容易“没了”

这个很关键。

假设原图里一个小目标宽高大约是:

16\times16

如果经过一次 stride=2 的下采样,
尺寸大致会减半,变成:

8\times8

再经过一次下采样:

4\times4

再来一次:

2\times2

再深一点,可能就只剩一个点附近的模糊响应了。

也就是说:

小目标在深层特征里,很容易被不断下采样到几乎不可分辨

这就是为什么只看最后一层特征,很容易漏掉小目标。


(3)容易被背景淹没

小目标往往和背景混在一起。

比如:

  • 远处的交通灯

  • 空中的小无人机

  • 街景里很远的小人

  • 遥远处的小车

这些目标如果特征不明显,就很容易被背景噪声盖过去。


4. 为什么大目标也不是随便就能检测好

很多人会误以为:“大目标肯定简单。”

其实也不完全对。

大目标虽然像素多,但也有它自己的问题。


(1)需要更大的感受野

一个大目标可能横跨图像很大区域。
如果某层特征看到的范围太小,它可能只能看到这个目标的局部。

比如只看到:

  • 一只车轮

  • 一块车门

  • 一段人腿

那它就不一定能很好判断整体目标。

所以检测大目标时,模型需要:

更强的全局语义理解能力

这通常依赖更深层特征,因为深层特征感受野更大。


(2)局部信息不等于整体信息

有时候局部看起来像某个目标部件,
但只有结合更大范围上下文,才能知道它到底是什么。

所以大目标检测往往更依赖:

  • 高层语义

  • 更大的感受野

  • 更完整的结构信息


5. 这就出现了一个矛盾

现在你会发现一个很核心的矛盾:

浅层特征

  • 分辨率高

  • 位置细节多

  • 对小目标更友好

  • 但语义弱

深层特征

  • 语义强

  • 感受野大

  • 对大目标和整体理解更友好

  • 但分辨率低,细节少

这就意味着:

浅层和深层各有优缺点,谁也不能单独完全解决检测问题

所以如果你只用浅层:

  • 细节够

  • 但语义可能不够强

  • 容易误检

如果你只用深层:

  • 语义够

  • 但小目标细节可能已经丢了

  • 容易漏检小目标

这时候就引出了一个非常自然的思路:

把不同层的特征结合起来

这就是:

多尺度特征融合


6. 什么叫多尺度特征融合

把浅层的细节信息,和深层的语义信息,尽量结合起来。

目的就是让模型同时拥有:

  • 更细的空间信息

  • 更强的语义表达

  • 对不同尺度目标更好的适应能力

所以“多尺度特征融合”不是一个装饰性设计,它几乎是现代目标检测网络里的核心思想之一。


7. 为什么不能只保留一层特征图

假设一个网络最后只保留最深的一层特征图,
然后直接在这一层做检测。

这会带来什么问题?

对小目标

可能已经被下采样得太小,信息不足,容易漏检。

对中目标

效果可能还行,但不一定最好。

对大目标

通常更有优势,因为深层语义更强、感受野更大。

所以只保留一层,等于你在强行用一种尺度去处理所有目标。
这显然不合理。

检测任务天然更适合:

多层特征同时参与预测


8. 一个直观理解:不同层像不同倍率的观察方式

可以把不同层特征理解成不同倍率的观察方式。

浅层特征

像“看得细”,能看到局部边缘、纹理、小结构。

深层特征

像“看得远”,能把更大范围的信息组织起来,看整体轮廓和语义。

检测任务如果只用其中一种视角,都不够。
所以最合理的方法就是:

多种视角一起看。

这其实就是多尺度思路。


9. 数学上怎么粗略理解“下采样让小目标更难”

这个地方可以带一点简单数学。

假设原图大小是:

H \times W

某个目标宽高是:

w \times h

如果经过一次 stride=2 的下采样,
那这个目标在新特征图上的宽高大致会变成:

\frac{w}{2} \times \frac{h}{2}

如果连续经过 (k) 次 2 倍下采样,
大致会变成:

\frac{w}{2^k} \times \frac{h}{2^k}

这条式子非常有用,因为它直接说明:

小目标会随着下采样次数增加而迅速缩小。

比如一个宽度只有 8 的目标,
连续 3 次 2 倍下采样后,大概只剩:

\frac{8}{2^3}=1

也就是说只剩 1 个格子附近的信息了。
这时候检测当然会变难。

这条式子你技术汇报时甚至可以直接讲。


10. 为什么深层特征语义更强

这个问题也可以从“组合”的角度理解。

浅层卷积看到的是很局部的信息,
比如:

  • 一小段边缘

  • 一个小角点

  • 某种纹理变化

更深层的特征,是在前面这些局部模式基础上继续组合出来的。

所以随着层数加深,网络逐渐从:

  • 像素

  • 边缘

  • 局部纹理

  • 局部结构

  • 部件模式

  • 整体语义

一步一步往上走。

因此深层特征虽然分辨率变低了,但它理解“这大概是什么目标”的能力往往更强。


11. 目标检测为什么特别依赖“细节 + 语义”同时存在

检测不是只判断类别,它还要定位。

所以它天然要求两类信息:

细节信息

用来知道边界在哪里、位置在哪里、目标到底多大。

语义信息

用来知道这到底是什么目标。

这两类信息如果分开看:

  • 只有细节,没有语义:容易把背景纹理误当目标

  • 只有语义,没有细节:容易知道“这里像有东西”,但框不准,或者小目标丢失

所以检测网络相比纯分类网络,更需要把这两类信息结合起来。


12. 多尺度融合最基本的思想是什么

最基本的思想其实很简单:

从深层拿语义

深层特征更抽象、更懂整体。

从浅层拿细节

浅层特征保留了更多空间分辨率和定位信息。

再把它们融合

这样得到的特征既有一定细节,又有一定语义。


13. 为什么 YOLO 这类检测器很重视多尺度

因为 YOLO 的目标是:

  • 速度快

  • 端到端

  • 同时检测不同大小目标

那它就不能指望“最后一层包打天下”。
所以它通常会利用多个尺度的特征图来做预测。

这也是为什么看很多 YOLO 结构图时,
都会看到:

  • 上采样

  • 拼接

  • 多分支输出

  • 不同尺度检测头

这些都和“多尺度检测”强相关。


14. 上采样又是为了什么

这里顺手补一个词,不然后面看 Neck 会别扭。

下采样是把特征图变小。
那上采样就是把特征图变大一些。

为什么要上采样?

因为深层特征语义强,但尺寸小;
如果想和浅层特征融合,就常常需要先把深层特征“放大”到更接近浅层的尺寸,再进行融合。

所以后面看到:

  • upsample

  • concat

  • fuse

这些操作时,不要把它们看成零散小技巧。
它们本质上都是在服务于:

多尺度特征融合


15. 一个很常见的融合思路

虽然我们这篇不正式展开 FPN/PAN,但先要知道它们在干嘛。

自上而下传递高层语义

把深层语义信息传给更高分辨率的层。

横向连接

把不同层之间的特征接起来。

再进一步融合

让浅层特征不再只是“细”,还带一些语义;
让深层特征不再只是“抽象”,还能借到一些定位信息。

现在只要知道:

FPN/PAN 这些名字,本质上都在解决多尺度融合问题。


16. 从技术汇报角度,应该怎么表述这件事

“为什么检测网络一定要做多尺度特征融合?”

可以这样回答:

因为目标检测需要同时处理大小差异明显的目标。浅层特征分辨率高、细节丰富,更适合小目标定位;深层特征感受野大、语义更强,更适合整体目标识别。如果只使用单层特征,很难同时兼顾定位精度和语义表达,因此现代检测网络通常通过多尺度特征融合,将不同层的信息结合起来,以提升对大中小目标的检测能力。


17. 3 条“技术句子”

第一句

小目标难,是因为信息量少,而且在多次下采样后容易迅速消失

第二句

大目标检测更依赖高层语义和更大的感受野

第三句

多尺度特征融合的目的,是把浅层细节和深层语义结合起来,同时兼顾不同尺度目标


18. 一点够用的数学表达


关系 1:连续下采样后的目标尺寸变化

如果目标原始宽高是:

w \times h

经过 (k) 次 2 倍下采样后,大致变成:

\frac{w}{2^k} \times \frac{h}{2^k}

这条关系用来解释:

为什么小目标容易在深层特征里丢失


关系 2:检测任务需要在多个尺度上建模

虽然不一定非要写成严格公式,
但可以把多尺度特征集合粗略表示成:

{F_1, F_2, F_3, \dots, F_n}

其中:

  • F_1:较浅层、高分辨率特征

  • F_2:较深层、低分辨率特征

多尺度融合的目标就是构造新的融合特征:

\hat{F}i = \phi(F_i, F{i+1}, \dots)

这里的 \phi 可以理解成某种融合操作,比如:

  • 上采样

  • 拼接

  • 相加

  • 卷积融合

这个式子不用深究,它只是告诉你:

融合后的特征不是凭空来的,而是由多个尺度的信息共同构成


19. 这一篇和 YOLOv8 到底怎么连起来

这一篇本质上是在给后面学 YOLOv8 的 Neck 铺路。

因为后面一看到:

  • FPN

  • PAN

  • 上采样

  • 拼接

  • 多尺度输出

就要立刻想到:

这些都不是随便加的,它们都是为了解决不同尺度目标检测问题

所以这一篇不是独立知识,而是后面 YOLO 结构理解的底座。


20. 本篇小结

目标检测比分类更难,因为目标大小差异很大;浅层特征细节丰富,更适合小目标;深层特征语义更强,更适合大目标和整体理解;因此不能只依赖单层特征,而需要做多尺度特征融合。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐