YOLOv8ONNX.
时间: 2025-01-05 07:33:57 浏览: 70
### YOLOv8 ONNX 模型使用教程
#### 导入必要的库
为了加载并运行YOLOv8的ONNX模型,首先需要导入一些基本的Python库以及安装必要环境。
```bash
pip install torch torchvision onnx onnxruntime opencv-python matplotlib numpy
```
这些包提供了处理图像输入输出、执行推理所需的功能和支持[^3]。
#### 加载预训练模型
通过`ultralytics`库中的`YOLO`类来加载官方提供的预训练权重文件,并将其转换成ONNX格式。这一步骤通常只需要做一次,除非想要尝试不同的架构或自定义训练好的模型。
```python
from ultralytics import YOLO
model = YOLO('yolov8n.pt') # 或者其他版本如 yolov8s, yolov8m 等
model.export(format='onnx')
```
上述代码会保存一个名为 `yolov8n.onnx` 的文件到当前工作目录下。
#### 准备测试图片
准备一张用于检测目标物体的照片作为输入数据。这里假设有一张叫做 `test.jpg` 的照片位于项目根目录中。
```python
import cv2
image_path = 'test.jpg'
img = cv2.imread(image_path)
resized_img = cv2.resize(img, (640, 640)) # 调整大小以匹配网络输入尺寸
input_data = resized_img.astype(np.float32)[np.newaxis, :, :, :] / 255.
input_data = np.transpose(input_data, axes=[0, 3, 1, 2]) # HWC -> CHW
```
这段脚本读取了一幅JPEG格式的彩色图象,并进行了适当调整以便于后续传递给神经网络进行预测操作。
#### 进行推理运算
现在有了经过前处理后的输入样本之后就可以调用ONNX Runtime来进行实际的目标检测任务了:
```python
import onnxruntime as ort
session = ort.InferenceSession('yolov8n.onnx', providers=['CPUExecutionProvider'])
outputs = session.run(None, {'images': input_data})[0]
print(outputs.shape) # 输出形状应类似于(batch_size, num_boxes, box_info),其中box_info包含边界框坐标和其他信息
```
以上代码创建了一个新的InferenceSession实例指向之前导出的那个`.onnx`文件路径;接着传入已准备好形式的数据集完成一轮完整的推断过程,最后打印出来自最后一层节点的结果数组维度信息。
#### 解析结果
对于得到的结果矩阵来说,每一行代表一个可能存在的候选区域及其对应的类别概率分布情况。具体解析方法取决于所使用的特定实现方式和个人需求偏好,在此仅给出一种简单的可视化方案供参考:
```python
import matplotlib.pyplot as plt
def plot_bboxes(image, bboxes):
fig, ax = plt.subplots(1)
ax.imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))
for bbox in bboxes:
x_min, y_min, x_max, y_max = map(int, bbox[:4])
rect = patches.Rectangle((x_min, y_min), x_max-x_min, y_max-y_min,
linewidth=2, edgecolor='r', facecolor="none")
label = f"{bbox[-1]}"
ax.text(x_min, y_min - 10, s=label, color='white', verticalalignment='top',
bbox={'color': 'red', 'pad': 0})
ax.add_patch(rect)
plt.show()
```
该函数接收原始图象与由上一阶段产生的矩形列表作为参数,绘制带有标签说明的对象包围盒覆盖在其上方显示出来。
阅读全文
相关推荐









