3、矩形框标注:目标检测中的Bounding Box标注规范与参数
目标检测里,Bounding Box(简称bbox)是最常见的标注方式。说白了,就是用个矩形框把目标物体圈出来。我刚开始做标注项目时,觉得这还不简单?画个框谁不会啊。结果第一次提交的数据就被打了回来——框的边线离物体太远,IoU不达标。嗯,这里面的门道其实不少。
3.1 什么是Bounding Box?
Bounding Box就是一个与坐标轴对齐的矩形框。它用四个数值来描述:左上角的x坐标、y坐标,以及框的宽度w和高度h。也有用中心点坐标加宽高的,两种格式在业界都常见。
核心概念:Bounding Box必须紧贴目标物体的外轮廓,不能留太多空白,也不能切掉物体边缘。标注质量直接影响模型对目标位置的学习精度。
3.2 标注格式与参数
不同框架用的格式略有差异。我整理了一张表,方便你对照着看:
| 格式名称 | 表示方式 | 典型应用 |
|---|---|---|
| xyxy | (x1, y1, x2, y2) | COCO数据集、Pascal VOC |
| xywh | (x, y, w, h) | YOLO系列、Darknet |
| cxcywh | (cx, cy, w, h) | YOLOv5+、Ultralytics |
| 归一化 | 所有值除以图像宽高 | YOLO训练、TensorFlow |
我个人习惯用xywh格式,因为直观。但如果你做YOLO训练,记得转成归一化的cxcywh。我曾经因为忘记归一化,模型训练直接崩了,损失值飞到了天上。
3.3 标注规范:怎么画才算合格?
标注不是随便拉个框就完事。这里有几条硬性规范,你最好记下来:
- 紧贴物体:框的每条边都要贴着目标物体的最外缘。不能多,不能少。
- 包含完整:如果物体有突出部分(比如人的手臂、车的后视镜),必须全部框进去。
- 避免遮挡:两个物体重叠时,每个物体单独画框,不要合并。
- 类别正确:每个框必须关联一个类别标签,不能漏标,也不能错标。
- 边界处理:如果物体被图像边缘切掉,框就画到边缘为止。
小技巧:标注时把图像放大到200%,能更精确地定位边缘。我一般用这个办法来减少框的误差。
3.4 参数影响规律
bbox的参数不是随便填的。它们对模型的影响,我总结成三点:
- 框的大小:框太大,模型会学到多余的背景噪声;框太小,模型学不到完整的物体特征。你想想看,如果框只框住了猫的头,模型能学会识别猫吗?
- 框的位置:偏移1个像素,在512x512的图像上可能无所谓。但在小目标检测中,偏移5个像素,IoU可能就从0.9掉到0.6了。
- 框的宽高比:不同物体有不同比例。行人一般是瘦高的,汽车是扁宽的。标注时如果比例严重失调,模型会学歪。
避坑指南:我曾经在一个项目中,标注员把所有框都画成了正方形。结果模型训练完后,对长条形物体的检测效果极差。后来花了整整一周重新标注。所以,框的形状一定要贴合物体本身。
3.5 知识结构图
下面这张图展示了Bounding Box标注的核心知识体系,从格式到规范再到参数影响,一目了然:
3.6 实战:标注一个行人
假设你有一张640x480的图像,里面有个行人。标注步骤如下:
- 确定行人的左上角坐标,比如(120, 80)。
- 确定右下角坐标,比如(200, 320)。
- 计算宽高:w = 200 - 120 = 80,h = 320 - 80 = 240。
- 如果是YOLO格式,需要归一化:x = 120/640 = 0.1875,y = 80/480 = 0.1667,w = 80/640 = 0.125,h = 240/480 = 0.5。
- 加上类别ID,比如行人=0。
最终标注文件里的一行数据就是:
0 0.1875 0.1667 0.125 0.5
你看,就这么简单。但实际项目中,每个像素的偏差都可能影响模型。我建议你标注完一批数据后,随机抽10%做二次质检,看看框的IoU是否达标。
关键指标:标注框与真实物体边缘的IoU应大于0.8。低于这个值,模型学到的特征就会有偏差。
3.7 常见错误与避坑
我这些年见过的标注错误,列几个典型的:
- 框太大:把背景也框进去了,模型会误以为背景也是目标的一部分。
- 框太小:切掉了物体的边缘,模型学不到完整形状。
- 框歪了:虽然bbox是轴对齐的,但有些人画框时手抖,导致框不水平。其实只要坐标对,歪不歪无所谓,但视觉上会影响质检。
- 漏标小目标:远处的行人、小动物容易被忽略。模型训练出来后,对这些小目标检测率极低。
我曾经踩过的坑:有一次做交通场景标注,标注员把远处的交通锥全漏了。模型上线后,对近处的锥桶检测还行,远处的直接无视。后来补标了2000张图才把问题解决。所以,小目标一定要仔细标。
好了,Bounding Box标注的核心内容就这些。格式、规范、参数影响,三者缺一不可。你动手标一批数据试试,很快就能上手。