前言

如果让机器人认识这个世界,第一步是什么?

答案是:看见。

人类通过眼睛获取信息,大脑分析理解,再决定如何行动。而机器人也是一样,它需要通过摄像头获取图像,再利用人工智能算法识别环境中的物体。

机器人看到桌面上的一个杯子,它需要知道:

  • 这是什么?
  • 它在哪里?
  • 应该如何抓取?

其中第一步“看见”,就是计算机视觉要解决的问题。在计算机视觉领域,有一个非常经典的算法——YOLO(You Only Look Once)。它被广泛应用于自动驾驶、机器人、智能监控、工业检测等领域,是目前最流行的目标检测算法之一。用于目标检测、实例分割、语义分割、深度估计、分类、姿态估计、定向边界框和跟踪,可通过一个 Python 包和命令行界面 (CLI) 使用。 文档

什么是目标检测?

在介绍YOLO之前,需要先理解什么是目标检测。

计算机看到一张图片时,本质上只是一堆数字,如一张640×640的图片,实际上包含大量像素信息,但是计算机并不知道:

  • 图片里有没有人?
  • 哪个区域是汽车?
  • 哪个位置是动物?

目标检测就是让计算机同时完成两件事:

  1. 识别图片中的目标是什么。(这是一个人,这是汽车)
  2. 找到目标的位置。(这个人的位置在图片左侧,汽车位于图片中央)

因此,目标检测实际上包含分类 + 定位两个任务。

YOLO如何识别目标?

YOLO的核心思想是:把目标检测看成一个回归问题。

简单来说,就是让神经网络直接预测目标的位置和类别,YOLO会先把图片划分成很多小区域,也就是网格。如一张图片被划分成7×7个区域,然后每个区域负责检测“如果目标中心点落在我的区域,我负责预测它。”

比如:一辆汽车在图片中间,那么包含汽车中心点的网格就会负责预测汽车。

网络会输出几个重要信息:

第一:目标的位置。

  • 中心点坐标
  • 宽度
  • 高度

第二:

目标的类别。

  • 人
  • 汽车
  • 狗
  • 杯子

第三:

  • 置信度(我认为这里有目标的概率是多少)

最终YOLO输出类似:这里有一辆汽车,概率95%,位置在图片中央。

YOLO的网络结构

YOLO本质上也是一个深度学习模型,它主要由三个部分组成:

Backbone(骨干网络),负责提取图片特征。

比如:

  • 低层特征: 边缘、颜色、纹理
  • 高层特征:物体形状、语义信息

简单理解:Backbone就是机器人的“视觉神经”。

Neck(特征融合),负责融合不同层的信息。

为什么需要融合?因为图片中的目标大小不同。

例如:远处的小汽车和近处的大汽车。

模型需要同时看到细节信息和整体信息,所以Neck会把不同尺度的特征结合起来。

Detection Head(检测头),负责最终输出结果:

  • 目标类别
  • 目标位置
  • 置信度

也就是告诉我们“图片里面有什么,以及在哪里。”

YOLO工程实践:从安装到模型预测

理解YOLO的原理之后,我们可以实际运行一个YOLO模型。

一个完整的目标检测流程通常包括:

  1. 安装YOLO环境
  2. 准备数据集
  3. 训练模型
  4. 验证模型效果
  5. 使用模型进行预测
  6. 部署到实际应用

YOLO安装

YOLO目前最常用的工程实现是 Ultralytics YOLO,它将模型训练、验证、预测、部署等功能进行了封装,只需要通过简单的Python接口即可完成目标检测任务,当然现在都是采用AI进行部署,这里讲解下流程,实际开发过程中AI会后台部署。

首先安装Ultralytics:

PLAINTEXT
pip install ultralytics

安装完成后,可以通过以下代码检查环境:

PLAINTEXT
import ultralytics

ultralytics.checks()

如果安装成功,会显示当前:

  • Python版本
  • PyTorch版本
  • GPU信息
  • CUDA环境

对于机器人、自动驾驶等实时视觉任务,通常建议使用GPU进行训练和推理。

YOLO模型加载

YOLO提供了不同规模的模型,例如:

PLAINTEXT
yolo11n.pt   # nano,速度最快
yolo11s.pt   # small
yolo11m.pt   # medium
yolo11l.pt   # large
yolo11x.pt   # 最大模型

模型大小的优点,精度更高。缺点是推理速度更慢,占用显存更多。在机器人端部署时,通常会选择nano、small这种轻量模型。

加载模型:

PLAINTEXT
from ultralytics import YOLO


# 加载预训练模型
model = YOLO("yolo11n.pt")

这里加载的是已经在COCO数据集上训练好的模型,COCO数据集包含:人、汽车、动物、家具、日常用品等80种常见类别。

YOLO模型训练

如果想让YOLO识别自己的目标,例如:

机器人识别:特定零件、工业产品、实验设备就需要使用自己的数据集进行训练。

训练流程:

PLAINTEXT
采集图片
↓
人工标注
↓
生成数据集
↓
训练YOLO模型
↓
测试模型效果

数据集准备

YOLO的数据标注格式非常简单,每张图片对应一个txt文件。

  • 图片:robot.jpg
  • 对应标签:robot.txt
  • 内容:0 0.52 0.43 0.25 0.30

分别表示:

PLAINTEXT
类别ID
目标中心x
目标中心y
目标宽度
目标高度

这些坐标都是经过归一化处理的。

例如0.5,表示图片宽度或者高度的50%位置。

开始训练

训练代码:

PLAINTEXT
from ultralytics import YOLO


# 加载预训练模型
model = YOLO("yolo11n.pt")


# 开始训练
results = model.train(
    data="dataset.yaml",
    epochs=100,
    imgsz=640,
    device=0
)

参数含义:

data

指定数据集配置文件。

例如:

PLAINTEXT
train: images/train
val: images/val


names:
  0: cup
  1: robot

告诉模型训练图片在哪里,有哪些类别。

epochs

训练轮数。

例如:

PLAINTEXT
epochs=100

表示模型完整学习数据集100次。

imgsz

输入图片大小常用:

PLAINTEXT
640×640

device

训练设备如:

PLAINTEXT
device=0

表示使用第一块GPU。

如果没有GPU为:

PLAINTEXT
device="cpu"

则采用CPU训练。

YOLO模型验证

训练完成后,需要验证模型效果。因为训练准确率高,并不代表模型真正具有检测能力。

验证主要关注几个指标:

Precision(精确率)

表示预测出来的目标,有多少是真的。

例如:

模型检测10辆汽车,其中9辆是真汽车。

Precision:90%

Recall(召回率)

表示真实目标中,有多少被发现。

例如: 图片中有10辆汽车,模型找到9辆。

Recall:90%

mAP(平均精度)

目标检测中最重要指标之一。

它综合考虑:

  • 分类准确性
  • 位置准确性

通常:

mAP越高,模型效果越好。

验证代码:

PLAINTEXT
from ultralytics import YOLO


model = YOLO("best.pt")


results = model.val(
    data="dataset.yaml"
)


print(results)

训练完成后:

PLAINTEXT
best.pt

通常就是效果最好的模型权重。

YOLO模型预测

预测是实际应用中最常用的功能。

例如:

PLAINTEXT
机器人摄像头获取图片:
↓
YOLO识别目标
↓
返回目标位置

代码:

PLAINTEXT
from ultralytics import YOLO


model = YOLO("best.pt")


results = model.predict(
    source="test.jpg",
    conf=0.5
)


for result in results:
    result.show()

其中:

PLAINTEXT
source

表示输入,可以是:

  • 图片
  • 视频
  • 摄像头

例如图片:

PLAINTEXT
source="test.jpg"

视频:

PLAINTEXT
source="video.mp4"

摄像头:

PLAINTEXT
source=0

YOLO实时检测

机器人通常需要实时视觉。例如机械臂摄像头持续观察环境,可以直接调用摄像头:

PLAINTEXT
model.predict(
    source=0,
    show=True
)

运行后摄像头画面会实时显示:

PLAINTEXT
person 0.95

cup 0.91

chair 0.88

这就是机器人视觉系统最基础的能力。


YOLO模型部署

训练好的模型还可以部署到不同平台。常见部署方式:

ONNX

适合:

  • 跨平台部署
  • 工业电脑

导出:

PLAINTEXT
model.export(format="onnx")

TensorRT

适合:

  • NVIDIA GPU
  • 自动驾驶
  • 机器人实时推理

导出:

PLAINTEXT
model.export(format="engine")

边缘设备

例如:

  • NVIDIA Jetson
  • 工业机器人控制器

通过模型压缩:

  • 减少参数
  • 降低计算量

实现实时运行。

一个完整机器人视觉流程

在机器人系统中,YOLO通常位于感知层:

PLAINTEXT
摄像头
↓
YOLO目标检测
↓
目标位置计算
↓
路径规划
↓
运动控制
↓
机械执行

例如:机器人抓取水杯

PLAINTEXT
摄像头看到桌面。
↓
YOLO检测:cup,x=320,y=240
↓
机器人计算杯子的三维位置。
↓
机械臂规划运动。
↓
完成抓取。

YOLO负责的是:让机器人知道“有什么,以及在哪里”。

总结

YOLO最大的贡献,是改变了目标检测的方式,过去计算机需要先寻找目标,再判断目标是什么。而YOLO直接从整张图片中预测目标,它让目标检测从复杂流程变成了一次快速推理。

如今,在机器人、自动驾驶、智能制造等领域,YOLO仍然是视觉感知的重要基础,未来的机器人想要真正进入现实世界,需要的不仅是看到物体,还需要理解环境、规划任务并完成行动。

YOLO,就是机器人拥有“眼睛”的第一步。