2、目标检测基础:常用目标检测算法(YOLO、SSD等)简介、检测框输出格式(坐标、宽高)与置信度
在机器人目标跟随任务中,视觉感知是决策与控制的起点。机器人需要通过摄像头获取的图像,实时判断“目标在哪里”“目标是什么”“目标有多大”。这一过程的核心技术便是目标检测(Object Detection)。与图像分类不同,目标检测不仅要回答“图像中有什么”,还要回答“目标在图像中的具体位置”。本章将围绕目标检测的基础知识展开,重点讲解YOLO、SSD等主流算法的设计思想与适用场景,深入剖析检测框的输出格式(中心坐标、宽高)与置信度的物理含义,帮助学习者为后续的PID控制与丢失重搜逻辑打下坚实的感知基础。
2.1 核心原理:从分类到定位的跨越
目标检测算法的本质是在图像中同时完成“分类”和“定位”两个任务。早期的计算机视觉研究主要集中于图像分类,即判断整张图片属于哪个类别。然而,在机器人跟随场景中,仅仅知道“画面中有人”是远远不够的,机器人必须知道“人在画面的哪个位置”,才能调整自身运动方向。因此,目标检测算法引入了边界框(Bounding Box)的概念,用一个矩形框将目标物体框选出来。
从技术演进路径来看,目标检测算法主要分为两大流派:两阶段检测器与单阶段检测器。两阶段检测器的代表是Faster R-CNN,其思路是先通过区域建议网络(RPN)生成可能包含目标的候选区域,再对这些区域进行分类和边框回归。这种“先粗后精”的策略精度较高,但计算量较大,难以满足机器人实时控制的需求。单阶段检测器则跳过了候选区域生成步骤,直接在特征图上预测目标的类别和位置,代表算法包括YOLO(You Only Look Once)和SSD(Single Shot MultiBox Detector)。
YOLO的核心思想是将图像划分为S×S的网格,每个网格负责预测固定数量的边界框及其置信度。以YOLOv5为例,输入图像被划分为80×80、40×40、20×20三种尺度的网格,分别对应小、中、大目标的检测。SSD则在不同尺度的特征图上进行预测,浅层特征图保留更多细节信息,适合检测小目标;深层特征图语义信息丰富,适合检测大目标。对于机器人跟随任务,YOLO系列因其出色的速度-精度平衡,成为工程实践中的首选。
2.2 检测框输出格式:坐标、宽高与归一化
无论使用哪种检测算法,最终输出的检测框信息都遵循统一的格式约定。理解这些格式是编写控制代码的前提。常见的输出格式有两种:像素坐标格式和归一化坐标格式。
像素坐标格式直接使用图像中的像素值表示检测框位置。例如,对于一张640×480分辨率的图像,检测框可以表示为 (x_min, y_min, x_max, y_max),即左上角和右下角的坐标。另一种更常用的表示方法是 (cx, cy, w, h),其中 (cx, cy) 是检测框中心的像素坐标,w 和 h 分别是框的宽度和高度(以像素为单位)。这种中心点表示法在后续的PID控制中非常方便,因为机器人需要直接获取目标中心的像素位置来调整云台角度。
归一化坐标格式则将坐标值缩放到0~1之间。YOLO系列默认使用归一化格式,其计算公式为:
cx_norm = cx_pixel / image_width
cy_norm = cy_pixel / image_height
w_norm = w_pixel / image_width
h_norm = h_pixel / image_height
归一化的好处在于,当输入图像尺寸变化时,检测框的相对位置保持不变,便于模型在不同分辨率下迁移。但在实际控制中,必须将归一化坐标乘以图像宽高,还原为像素坐标后才能用于PID计算。
| 表示方法 | 格式 | 取值范围 | 适用场景 |
|---|---|---|---|
| 像素坐标(两点式) | (x_min, y_min, x_max, y_max) | 0 ~ 图像宽/高 | 传统图像处理、OpenCV绘图 |
| 像素坐标(中心式) | (cx, cy, w, h) | 0 ~ 图像宽/高 | PID控制、目标跟踪 |
| 归一化坐标 | (cx_norm, cy_norm, w_norm, h_norm) | 0.0 ~ 1.0 | 模型训练、跨分辨率推理 |
2.3 置信度:衡量检测结果的可信程度
置信度(Confidence)是目标检测算法输出的另一个关键参数,它表示模型对“当前边界框内确实包含目标”以及“边界框定位准确”的综合信心。在YOLO中,置信度由两部分组成:目标存在概率(Pr(Object))和交并比(IoU)。具体计算公式为:
Confidence = Pr(Object) × IoU(pred, truth)
其中,Pr(Object) 表示网格单元内是否存在目标的概率,IoU 表示预测框与真实框的重叠程度。在实际推理时,模型还会为每个检测框输出一个类别概率向量,最终得分由置信度与类别概率相乘得到。例如,YOLOv5的输出维度为 (batch_size, num_anchors, 5 + num_classes),其中前5个值分别为 (cx, cy, w, h, confidence),后续为各类别的概率。
在机器人跟随任务中,置信度阈值的选择直接影响系统的鲁棒性。阈值设置过高,可能导致目标漏检(假阴性),机器人会丢失目标;阈值设置过低,则可能引入大量误检(假阳性),机器人会跟随错误的目标。通常建议将置信度阈值设置在0.4~0.6之间,具体数值需根据实际场景的光照、遮挡情况和模型训练质量进行调优。
2.4 实战场景:从检测输出到跟随控制的桥接
为了更直观地理解检测框输出如何驱动机器人运动,我们以一个具体的跟随任务为例进行拆解。假设机器人搭载的摄像头分辨率为640×480,使用YOLOv5s模型检测目标人物,模型输出以下归一化检测结果:
类别: person
置信度: 0.87
归一化中心坐标: (cx_norm=0.52, cy_norm=0.48)
归一化宽高: (w_norm=0.15, h_norm=0.35)
首先,将归一化坐标转换为像素坐标:
cx_pixel = 0.52 × 640 = 332.8
cy_pixel = 0.48 × 480 = 230.4
w_pixel = 0.15 × 640 = 96
h_pixel = 0.35 × 480 = 168
此时,机器人控制程序可以获取目标中心在图像中的位置 (332.8, 230.4)。若摄像头画面中心为 (320, 240),则水平偏差为 332.8 - 320 = 12.8 像素,垂直偏差为 230.4 - 240 = -9.6 像素。这些偏差值将作为PID控制器的输入,驱动云台电机转动,使目标始终保持在画面中心附近。
同时,检测框的宽高信息也有重要用途。当目标距离机器人较近时,检测框的宽高值会增大;距离较远时,宽高值会减小。通过计算检测框面积的变化率,可以粗略估计目标与机器人的相对距离变化,从而控制机器人的前进速度,实现“近停远走”的跟随策略。
2.5 常见误区与总结复盘
在目标检测基础的学习和实践中,学习者常陷入以下几个误区,需要特别警惕:
- 误区一:混淆归一化坐标与像素坐标。在编写控制代码时,忘记将归一化坐标乘以图像尺寸,导致目标位置计算错误,机器人转向错误方向。解决方法是建立统一的坐标转换工具函数,并在代码注释中明确标注当前坐标类型。
- 误区二:忽视置信度阈值的动态调整。固定使用一个置信度阈值应对所有场景,导致在逆光、夜间等复杂光照条件下检测性能急剧下降。建议根据场景亮度、目标大小等特征,动态调整阈值。
- 误区三:将检测框中心直接等同于目标物理中心。当目标部分被遮挡时,检测框中心可能偏离目标的实际几何中心。此时应结合目标类别先验知识(如人体中心通常位于框的下半部分)进行修正。
- 误区四:忽略多目标情况下的匹配问题。当画面中出现多个同类目标时,仅凭置信度无法确定哪个是跟随目标。需要引入目标ID跟踪(如DeepSORT)或基于位置连续性的匹配策略。
总结而言,目标检测是机器人视觉感知的基石。理解YOLO、SSD等算法的设计哲学,掌握检测框的坐标格式与置信度含义,能够帮助开发者正确解析模型输出,为后续的PID控制和丢失重搜逻辑提供可靠的数据支撑。在下一阶段的开发中,建议学习者先在仿真环境中验证坐标转换和阈值筛选逻辑,再迁移到实体机器人上调试,这样可以大幅缩短开发周期,降低调试风险。