Bounding Box
边界框是标示图像中物体位置的矩形。本文介绍 xyxy、xywh 和 YOLO 格式、标注方式,以及旋转框和 3D 框。
边界框是包围图像或视频帧中某个对象的最小轴对齐矩形,由四个数字描述。它是目标检测的输出单位:检测器会为每个对象返回一个框,以及类别标签和置信度分数;标注人员会在训练数据上绘制相同的框来教模型。边界框可以定位对象并粗略表示其大小,而无需描出对象轮廓,因此标注和预测都很快速、成本也低。
坐标格式#
图像坐标从左上角开始,x 向右递增,y 向下递增。每种边界框格式都存储四个数字,但不同数据集和库对这四个数字的定义并不一致;格式混用会悄无声息地让所有边界框发生偏移或拉伸。
- 角点 (xyxy):左上角 (x1, y1) 和右下角 (x2, y2),单位为像素。PASCAL VOC 标注以及大多数绘图和 IoU 函数都使用这种格式。
- COCO 格式:左上角坐标,后跟宽度和高度,即以像素为单位的 [x, y, width, height]。
- YOLO 格式:边界框中心坐标,后跟宽度和高度;各数值分别除以图像宽度或高度,因此都处于 0 到 1 之间。Ultralytics YOLO 模型(例如 YOLO26)使用每张图像对应一个文本文件的格式进行训练,每个对象占一行:类别索引,然后是 x_center、y_center、width 和 height。
归一化坐标在调整大小后仍然有效:图像可以缩放到任意训练分辨率,无需重写标签,因为边界框以图像尺寸的比例值存储。
from ultralytics import YOLO
# 加载一个预训练的 YOLO26 nano 检测器
model = YOLO("yolo26n.pt")
# 检测对象并获取第一张图像中的边界框
results = model("https://ultralytics.com/images/bus.jpg")
boxes = results[0].boxes
# 四种格式表示的同一个第一个边界框
print(boxes.xyxy[0]) # 像素坐标中的角点
print(boxes.xywh[0]) # 像素坐标中的中心、宽度和高度
print(boxes.xyxyn[0]) # 角点坐标分别除以图像宽度和高度
print(boxes.xywhn[0]) # 中心坐标和尺寸分别除以图像尺寸,与 YOLO 标签相同这四行都描述同一个矩形。归一化版本将像素值除以图像的 810 × 1080 尺寸;xywh 从边界框中心开始测量,因此与 COCO 的左上角 xywh 格式不同。
检测器如何预测边界框#
检测器会在图像中的许多位置以回归输出的形式预测边界框。早期设计会根据固定尺寸和宽高比的预定义锚框预测偏移量,而无锚框检测器则直接预测从网格点到边界框四条边的距离。训练时会使用基于交并比 (IoU)的损失函数比较预测框和标注框;由于相邻位置会为同一对象预测出重叠边界框,非极大值抑制 (NMS)会在推理时删除重复框。
边界框标注#
检测器会学习按照标签绘制边界框,因此数据标注指南决定了边界框的质量。良好的指南要求边界框贴合每个对象的可见边缘,为每个类别的每个实例都添加标签(因为未标注对象会让模型把它当作背景),并为被遮挡或截断的对象制定固定规则,例如只框出可见部分。评估也沿用相同规则,因为预测结果是根据其与标注框的 IoU 进行评分的。
边界框与其他区域类型#
- 有向边界框 (OBB):增加第五个值——旋转角度——即可让边界框旋转以贴合倾斜对象,例如航拍图像中的船只或车辆,并显著减少框内背景。
- 实例分割:逐像素掩码,可勾勒出每个对象的精确形状。
- 关键点:单独的特征点,例如用于姿态估计的身体关节。
- 3D 边界框:真实世界空间中的长方体,通常由七个数字描述:中心坐标 (x, y, z)、以米为单位的长、宽、高,以及航向角。










