[CLS 07 · 检测几何、匹配与评价](/course/notebooks/586e66e049764158a50747e69c219312.html) # 四个数怎样指向图像里的同一区域 [独立阅读](/course/notebook-blocks/9264aa76ab44410a94ba0c31731e50ef.html) 按问题继续 坐标、锚框偏移、训练/评价匹配、NMS/AP和真实检测训练连接 **学习路径:** [一张图怎样变成一组框](/course/study/image-detection.html) 本册是检测单元的公式与结果解释,连接 [P27–35](/course/pages/l3-r2-p27.html) 和 [LAB 10 的图像到框训练](https://deepnote.com/project/38755e4e-23f6-4f5f-8c68-8a2e4114b1c1/notebook/a14237bfa9dd413d959ab4e458e11f42)。先按自己的问题读一段,不必在运行模型前读完全部。 - 框如何表示和修正:[四偏移往返](/course/blocks/box-offset-roundtrip.html)。 - 谁提供训练目标:[正例、背景与忽略项](/course/blocks/anchor-training-assignment.html)。 - 重复框如何影响结果:[NMS 与评价匹配](/course/blocks/nms-versus-matching.html)。 读完后选一个预测,指出它被判错是因为重复、定位不足还是背景,并写明阈值和匹配协议。要亲手改坐标/分数,到附属工作台 [LAB 09](https://deepnote.com/project/38755e4e-23f6-4f5f-8c68-8a2e4114b1c1/notebook/90d213b4e1e04c7e889ee6fc042b2358);要理解模型在何处出错,回到 [检测学习证据](/course/blocks/detector-learning-evidence.html)。 “这张图有杯子”可以由一个整图类别分数回答;“两只杯子分别在哪里”需要对象数、类别和位置。分类器即便准确,也没有被要求把分数分配给具体区域。全局平均池化还可能把左右位置汇总掉。检测因此要改变输出参数化、训练目标和评价协议,而不是给分类结果补画一个框。 ## 四个数怎样指向图像里的同一区域 轴对齐框可表示为 $(x_{\min},y_{\min},x_{\max},y_{\max})$,也可表示为中心与宽高 $(c_x,c_y,w,h)$。本册用连续边界、右下边界不额外加 1 的约定,并把坐标除以图像宽高归一化到 $[0,1]$。这与“像素编号含两端”的面积算法不同,混用会让小框 IoU 尤其失真。 真值 $G=(0.2,0.2,0.6,0.6)$,预测 $P=(0.3,0.2,0.7,0.6)$。二者面积都为 0.16,交集宽 0.3、高 0.4,面积 0.12;并集为 $0.16+0.16-0.12=0.20$,所以 $\mathrm{IoU}(P,G)=\frac{|P\cap G|}{|P\cup G|}=0.6.$ IoU 对同时缩放两框不变,却对相对位移敏感。把同样 0.1 的横移施加到宽 0.2 的小框,重叠比例会比宽 0.4 的框更差。检测中“小目标难”有一部分来自几何尺度,不能只归因于类别识别。 ![框重叠的精确几何与检测排序](/course/repair/assets/cls08-box-ap.svg) 左图以相同坐标比例展示 IoU=0.6;右表是一类、两个真值对象的排序算例,第二个预测虽也盖住对象,却因重复而算假阳性。 ## 锚框先给坐标一个起点,匹配再赋予训练身份 锚框是预设位置、尺度和长宽比的参考框,不是模型已经检测出的结果。输出头为每个锚框预测类别或 objectness,以及相对坐标改变量。一种不加额外尺度系数的参数化是 $t_x=(c_x^g-c_x^a)/w^a,\quad t_y=(c_y^g-c_y^a)/h^a,\quad t_w=\log(w^g/w^a),\quad t_h=\log(h^g/h^a).$ 锚框中心 $(0.4,0.4)$、宽高均为 0.4,真值中心移到 $(0.45,0.4)$ 且大小不变,目标就是 $(0.125,0,0,0)$。解码时用 $c_x^p=c_x^a+w^at_x$、$w^p=w^a\exp(t_w)$ 等逆运算。具体实现可能乘 10、5 等尺度因子,例如 D2L 的一套约定;编码和解码必须成对,不可只复制一边公式。 训练时要把锚框分配为正例、负例或忽略项。常见方案先保障每个真值有匹配,再按 IoU 阈值增加正例,把远离真值的锚框设为背景,中间区域可忽略。两阈值的具体值是协议选择,不是 IoU 的定义。位置回归只对正例计损失;背景没有“应该回归到哪里”的真值。若一幅图没有对象,仍应通过负例分类损失学会不报框,回归项则安全地归零,避免除以零。 写成 $L=L_{cls}+\lambda L_{box}$ 仍不够:两个分母怎样归一化、负例是否筛选、ignore 如何 mask,都决定了优化问题。大量背景锚框可能淹没少数正例;hard-negative mining 和 focal loss 是改变贡献权重的不同办法。学生可以沿 [D2L §14.4 锚框分配/偏移](https://d2l.ai/chapter_computer-vision/anchor.html) 与 [§14.7 TinySSD](https://d2l.ai/chapter_computer-vision/ssd.html) 核对输出张量、分类标签和回归 mask。