深度学习YOLO实战:2、理解与实现模型推理
什么是推理
在计算机科学和人工智能领域,推理(Inference) 是一个核心概念,简单来说,它就是利用已有的数据或训练好的模型,来生成新信息或得出结论的过程。无论是简单的分类任务,还是复杂的决策系统,推理都是让机器学习和深度学习模型真正“发挥作用”的关键环节。
理解推理的过程
具体来说,推理就是当我们有了新的输入数据时,调用已经训练好的模型来给出预测结果的过程。在深度学习里,这个过程也常被称为前向传播(Forward Pass)——数据从模型的输入层开始,依次穿过中间的隐藏层,最后到达输出层,并得到最终的预测。
一个典型的推理流程通常包含下面几个步骤:
-
数据预处理
首先,我们需要把原始输入数据(比如一张图片、一段语音)转换成模型能理解的格式。例如,对图像进行尺寸调整、归一化像素值等操作,确保输入和模型训练时的数据格式一致。 -
加载模型
接下来,我们把预训练好的模型文件(包括它的结构和学到的权重参数)加载到内存中。这个模型已经在大规模数据上学到了识别特征和规律的“能力”。 -
执行前向传播
这是推理的核心环节。我们把预处理好的数据送入模型,让它逐层计算,最终输出预测结果。比如,模型可能会告诉我们图片里有什么物体,或者一段语音对应的文字是什么。 -
对结果进行后处理
模型直接输出的结果可能并不直观,我们还需要做一些处理,让它变得更容易理解和使用。例如在目标检测中,常用“非极大值抑制(NMS)”来去掉重复的检测框。 -
输出或保存结果
最后,我们可以把最终结果展示给用户(比如在屏幕上显示),或者保存到文件里供后续使用。
举个简单的例子:假设你有一张图片,想知道里面有什么东西。你把它交给一个训练好的模型,模型经过一番计算后告诉你:“图里有一辆公交车和四个人。”——这个过程,就是一次完整的推理。
所以概括来说,推理就是使用训练好的模型进行预测。下面我们就通过一个实际的例子,来看看怎么用代码完成一次推理。
简单的推理脚本
下面让我们通过一个完整的示例,深入了解如何编写一个实用的推理脚本。这个脚本虽然代码量不多,但包含了推理流程的所有关键环节。
完整的推理脚本
from ultralytics import YOLO
model = YOLO("yolo11n.pt")
model.predict(
source=r"ultralytics/assets/bus.jpg",
save=True,
show=False,
)
代码逐行解析
虽然这段代码很简洁,但每一行都承担着重要的功能:
第1行:导入库
from ultralytics import YOLO
这行代码导入了Ultralytics提供的YOLO类,这是我们进行目标检测的基础。YOLO(You Only Look Once)是目前最流行的实时目标检测算法之一。
第2行:加载模型
model = YOLO("yolo11n.pt")
这里创建了一个YOLO模型实例并加载了预训练的权重文件:
"yolo11n.pt"指定了要使用的模型文件- 如果是第一次运行,程序会自动下载这个预训练模型
- 模型文件中包含了网络结构和在大量数据上学到的参数
第4-8行:执行预测
model.predict(
source=r"ultralytics/assets/bus.jpg",
save=True,
show=False,
)
这是推理的核心部分,各参数的作用如下:
source:指定输入数据的来源,这里是一个图片文件路径save=True:告诉程序将检测结果保存为新的图片文件show=False:不在屏幕上实时显示检测结果,适合在服务器环境中使用
运行这个脚本
将上面这段代码保存为 01_easy_predict.py,然后在终端中运行:
python 01_easy_predict.py
理解输出结果
运行成功后,你会看到类似下面这样的输出信息:
image 1/1 /media/becase/common/yolo/Learning/01_predict/ultralytics/assets/bus.jpg: 640x480 4 persons, 1 bus, 70.6ms
Speed: 2.3ms preprocess, 70.6ms inference, 1.7ms postprocess per image at shape (1, 3, 640, 480)
Results saved to /media/becase/common/yolo/Learning/01_predict/runs/detect/predict
这些输出信息告诉我们:
- 检测结果:在bus.jpg中识别出了4个人和1辆公交车
- 性能分析:
- 预处理:2.3ms(调整图片尺寸、归一化等)
- 推理:70.6ms(模型实际计算时间)
- 后处理:1.7ms(处理输出结果、绘制边界框等)
- 结果位置:所有输出文件保存在指定的文件夹中
查看可视化结果
打开输出目录,你会看到类似这样的检测结果:

在结果图片中,你可以看到:
- 每个检测到的物体都用边界框标出
- 框上方显示了物体类别和置信度
- 不同类别的物体使用不同颜色的边界框
对了,这张公交车图片是不是很眼熟?它其实就是你在第一小节中运行 yolo detect predict 命令时,YOLO 默认用来测试的那张示例图片。
yolo detect predict
更多推荐
所有评论(0)