news 2026/2/25 14:33:20

深度学习目标检测中的矩形框坐标格式详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
深度学习目标检测中的矩形框坐标格式详解

本篇博文我们来详细解释目标检测中边界框的(x, y, w, h)坐标表示法。这是最核心的坐标格式之一。

核心定义

(x, y, w, h)代表一个矩形框,通常用于标注或预测图像中物体的位置和大小。

四个参数的含义:

  • x:边界框中心点横坐标
  • y:边界框中心点纵坐标
  • w:边界框的宽度
  • h:边界框的高度

1. 坐标系说明

在计算机视觉中,通常使用以下坐标系:

  • 原点(0,0):图像的左上角
  • x轴:水平向右(宽度方向)
  • y轴:垂直向下(高度方向)
(0,0)━━━━━━━━━━━━━→ x (宽度) ┃ ┃ (x, y) ← 中心点 ┃ ● ┃ ┃ ┃ ↓ ↓ 宽度 = w y (高度) 高度 = h

2. 实际示例

假设一张图像的尺寸是640×480像素(宽×高)。

如果有一个标注框为:

(x=320, y=240, w=200, h=150)

这意味着:

  1. 中心点位置:从图像左上角向右320像素,向下240像素处
  2. 框的大小:宽200像素,高150像素
  3. 框的实际范围
    • 左边界:x - w/2 = 320 - 100 = 220
    • 右边界:x + w/2 = 320 + 100 = 420
    • 上边界:y - h/2 = 240 - 75 = 165
    • 下边界:y + h/2 = 240 + 75 = 315

视觉表示:

图像左上角(0,0) ↓ ┌─────────────────────────┐ ← 上边界 y=165 │ │ │ ┌─────────────┐ │ │ │ │ │ │ │ ● (320,240) │ ← 中心点 │ │ (物体在这里) │ │ │ │ │ │ └─────────────┘ │ ← 下边界 y=315 │ │ └─────────────────────────┘ 左边界← →右边界 x=220 x=420

3. 与其他坐标格式的对比

(x, y, w, h)格式需要与另一种常见格式(x1, y1, x2, y2)区分开来:

格式对比表

格式含义示例特点
中心坐标式
(x, y, w, h)
中心点+宽高(320,240,200,150)- 便于回归任务
- 对尺度变化更鲁棒
- YOLO系列常用
角点坐标式
(x1, y1, x2, y2)
左上+右下角点(220,165,420,315)- 更直观
- 计算IoU方便
- Faster R-CNN常用

相互转换公式

1. 中心式 → 角点式:

x1 = x - w/2 y1 = y - h/2 x2 = x + w/2 y2 = y + h/2

2. 角点式 → 中心式:

x = (x1 + x2) / 2 y = (y1 + y2) / 2 w = x2 - x1 h = y2 - y1

4. 为什么目标检测常用(x, y, w, h)格式?

4.1 回归任务的优势

在训练神经网络进行边界框预测时,我们通常不是直接预测绝对坐标,而是预测偏移量(x, y, w, h)格式对这种设计更友好:

# 假设有一个预设的Anchor框:(anchor_x, anchor_y, anchor_w, anchor_h)# 网络预测的是4个偏移量:(tx, ty, tw, th)# 实际预测框的计算公式:pred_x=anchor_x+tx*anchor_w pred_y=anchor_y+ty*anchor_h pred_w=anchor_w*exp(tw)# 用指数确保宽度为正pred_h=anchor_h*exp(th)# 用指数确保高度为正

关键点:

  • tx, ty是中心点的相对偏移(比例值)
  • tw, th是宽高的对数尺度变换
  • 这种设计使得回归目标更稳定,易于神经网络学习

4.2 对尺度变化的稳定性

  • 如果物体放大2倍,(w, h)直接变为2倍
  • (x1, y1, x2, y2)格式中,四个坐标都会变化,且变化幅度不同
  • (x, y, w, h)的变化更一致,更符合物理直觉

4.3 损失函数设计

回归损失函数(如Smooth L1 Loss)对(x, y, w, h)格式更有效:

# 计算回归损失(简化示例)loss_x=smooth_l1(pred_x-true_x)loss_y=smooth_l1(pred_y-true_y)loss_w=smooth_l1(pred_w-true_w)loss_h=smooth_l1(pred_h-true_h)total_loss=loss_x+loss_y+loss_w+loss_h

由于w, h总是正数,且通常用对数空间处理,避免了宽高为负的问题。


5. 实际应用中的归一化处理

在实际训练中,坐标通常会被归一化到 [0,1] 范围内:

5.1 归一化公式

x_norm = x / image_width y_norm = y / image_height w_norm = w / image_width h_norm = h / image_height

归一化后的示例:

  • 图像尺寸:640×480
  • 原始坐标:(320, 240, 200, 150)
  • 归一化后:(0.5, 0.5, 0.3125, 0.3125)

5.2 归一化的好处

  1. 尺度不变性:无论输入图像大小如何,坐标都在相同范围内
  2. 训练稳定性:梯度更容易控制
  3. 多尺度训练:方便处理不同尺寸的输入图像

6. 在YOLO中的具体应用

以YOLOv5为例,说明这种坐标格式的实际使用:

6.1 标注文件格式

YOLO使用的标签文件通常是.txt格式:

<class_id> <x_center> <y_center> <width> <height>

其中所有值都是归一化到 [0,1] 的。

示例:

0 0.5 0.5 0.3125 0.3125

表示:类别0,中心点在图像中心,宽高约为图像的31.25%。

6.2 网络输出

YOLO的输出包含:

  • 每个预测框的(x, y, w, h)(相对值)
  • 物体置信度
  • 类别概率

6.3 后处理中的坐标转换

在推理时,需要将网络输出转换为实际像素坐标:

# 假设输出是归一化的defdecode_box(pred_x,pred_y,pred_w,pred_h,img_w,img_h):# 1. 转换为绝对坐标x=pred_x*img_w y=pred_y*img_h w=pred_w*img_w h=pred_h*img_h# 2. 转换为角点格式(用于显示或计算IoU)x1=x-w/2y1=y-h/2x2=x+w/2y2=y+h/2return[x1,y1,x2,y2]

7. 注意事项和常见问题

7.1 边界处理

当边界框靠近图像边缘时:

# 需要确保边界框不超出图像范围x1=max(0,x1)# 不小于0y1=max(0,y1)x2=min(img_w-1,x2)# 不大于图像宽度y2=min(img_h-1,y2)

7.2 宽高比敏感性

  • 对于极端宽高比的物体(如电线杆、横幅),(x, y, w, h)格式可能不如旋转框表示法
  • 但在大多数通用检测任务中,这种格式足够有效

7.3 与(x1, y1, x2, y2)的选择

  • 训练阶段:常用(x, y, w, h),便于回归
  • 评估阶段:常转换为(x1, y1, x2, y2),便于计算IoU
  • 实际存储:取决于框架和数据集格式

总结

(x, y, w, h)坐标格式:

优点:

  1. 回归友好:对神经网络学习更稳定
  2. 物理直观:中心点+尺寸的表示符合直觉
  3. 尺度鲁棒:对物体尺度变化更稳定
  4. 广泛支持:被YOLO等主流检测器采用

关键点:

  • 理解中心点坐标宽高的含义
  • 掌握归一化处理的方法
  • 知道如何与角点格式相互转换
  • 了解在训练推理中的不同使用方式
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/25 5:58:32

【ROS2】ROS2+Qt6+WebRTC程序依赖库

1、OpenCV 错误信息: CMake Error at CMakeLists.txt:45 (find_package):By not providing "FindOpenCV.cmake" in CMAKE_MODULE_PATH this project hasasked CMake to find a package configuration file provided by "OpenCV", butCMake did not find…

作者头像 李华
网站建设 2026/2/22 16:21:40

Java计算机毕设之基于Java+springboot的科研室实验报告管理系统的设计与实现基于SpringBoot和Vue的实验报告管理系统的设计与实现(完整前后端代码+说明文档+LW,调试定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/2/25 1:48:50

计算机Java毕设实战-基于SpringBoot和Vue的实验报告管理系统的设计与实现学生实验报告管理系统项目标题、实验类型、提交时间【完整源码+LW+部署说明+演示视频,全bao一条龙等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/2/22 17:00:52

Minio的Docker部署

拉取Minio镜像&#xff1a;docker pull minio/minio要运行 MinIO 容器可以使用以下命令&#xff1a;docker run --name geofly-minio --restart always -d -p 9000:9000 -p 9001:9001 -v /etc/localtime:/etc/localtime -v /mnt/data/minio:/data -e "MINIO_ROOT_USERadmi…

作者头像 李华
网站建设 2026/2/23 17:07:21

FPGA基础知识(二十一):xilinx FPGA中常用的原语

《FPGA基础知识》系列导航 本专栏专为FPGA新手打造的Xilinx平台入门指南。旨在手把手带你走通从代码、仿真、约束到生成比特流并烧录的全过程。 本篇是该系列的第二十一篇内容 上一篇&#xff1a;FPGA基础知识&#xff08;二十&#xff09;&#xff1a;Xilinx Block Memory I…

作者头像 李华
网站建设 2026/2/21 15:50:54

语雀文档批量导出神器:轻松实现完整内容迁移

语雀文档批量导出神器&#xff1a;轻松实现完整内容迁移 【免费下载链接】yuque-exporter 项目地址: https://gitcode.com/gh_mirrors/yuqu/yuque-exporter 还在为语雀文档迁移而烦恼吗&#xff1f;这款强大的语雀文档导出工具能够帮你快速完成批量迁移&#xff0c;将珍…

作者头像 李华