多尺度构件检测中的多尺度是什么意思
“多尺度”= 在同一幅图里,把目标当成“大、中、小”三种不同尺寸级别同时看,各用各的放大率/特征图/感受野,避免“大目标占满格子、小目标只有几个像素”造成的漏检或定位不准。
一、为什么必须“多尺度”
表格
现象 | 后果 |
---|---|
大目标 | 占几百像素,高层低分辨率特征图一看就知类别,但低层高分辨率图把它拆成无数网格 → 框碎片化 |
小目标 | <16×16 像素,低层网格比目标还大 → 直接“漏检” |
中目标 | 介于两者之间,单层特征要么过粗要么过细 |
→ 单靠一层特征图无法同时满足大、中、小目标的定位精度和语义判别。
二、“多尺度”到底指什么尺度
表格
尺度级别 | 来源 | 对应目标 | 典型尺寸(像素) |
---|---|---|---|
图像级 | 原图 / 图像金字塔 | 特大目标 | >256×256 |
特征级 | 网络不同 stride 特征图 | 大-中-小全包 | 8×8 ~ 128×128 |
感受野级 | 同一层并行空洞卷积 | 同图不同视野 | 33×33 / 65×65 / 129×129 |
采样级 | 锚框/中心点/query | 框本身大小 | 0.25×~4× 原图 |
三、生活类比:眼镜店试镜
-
大目标 → 看远景 → 用 低倍广角镜(低分辨率特征图,stride=32)
-
小目标 → 看近景 → 用 高倍放大镜(高分辨率特征图,stride=4)
-
中目标 → 看中景 → 用 中倍镜(stride=8/16)
多尺度 = 同时戴上三副不同倍数的眼镜,各看各的,最后把结果合并。
四、代码级感受:FPN 特征金字塔
Python
# 伪代码
for level in [P2, P3, P4, P5, P6]: # stride = [4,8,16,32,64]
head_out = detect_head(level) # 每层独立检测头
all_boxes.append(head_out)
final_nms = NMS(all_boxes) # 合并所有尺度输出
-
P2 stride=4 → 负责 小目标
-
P5 stride=32 → 负责 大目标
五、工业界一句话总结
“多尺度”不是“多张图”,而是**在同一幅图里,用不同放大率/不同感受野/不同网格密度,同时给大、中、小目标各自找到‘最舒服’的那层特征去检测,最后再把各层结果拼起来。”