树莓派5yolov5 onnx
时间: 2025-07-05 18:01:04 浏览: 5
### 将 YOLOv5 转换为 ONNX 并在树莓派 5 部署
#### 准备工作环境
为了确保能够在树莓派 5 上成功转换和部署 YOLOv5 模型,需要先安装必要的依赖库。这包括 PyTorch 和其他辅助工具。
```bash
pip install torch torchvision torchaudio onnx onnxruntime opencv-python
```
这些命令会安装用于模型操作所需的 Python 库[^1]。
#### 下载预训练权重文件
获取官方发布的 YOLOv5 权重文件对于后续的操作至关重要:
```python
import os
from pathlib import Path
weights_path = "yolov5s.pt"
if not os.path.exists(weights_path):
!wget https://github.com/ultralytics/yolov5/releases/download/v5.0/{weights_path}
```
这段脚本检查本地是否存在指定名称的权重文件;如果不存在,则从互联网下载最新版本的预训练参数。
#### 导入所需模块并加载模型
接下来定义函数来导入必需的类以及初始化检测器实例:
```python
import torch
from models.experimental import attempt_load
device = 'cpu' # 使用 CPU 运行推理过程
model = attempt_load(weights=weights_path, map_location=device)
model.eval()
```
此部分代码设置了设备类型(这里选择了CPU),并且调用了 `attempt_load` 方法加载之前准备好的 .pt 文件中的网络结构及其对应的权值矩阵。
#### 执行导出到 ONNX 的具体步骤
现在可以执行实际的转换流程了:
```python
dummy_input = torch.randn(1, 3, 640, 640).to(device)
output_onnx = 'yolov5.onnx'
input_names = ["image"]
output_names = ['num_detections', 'boxes', 'scores', 'classes']
torch.onnx.export(
model,
dummy_input,
output_onnx,
verbose=False,
input_names=input_names,
output_names=output_names,
opset_version=12
)
print(f"Model has been converted to {output_onnx}")
```
上述代码片段创建了一个虚拟输入张量作为示例数据传递给 `.export()` 接口完成整个迁移动作,并指定了输出文件名和其他一些配置选项。
#### 测试转换后的 ONNX 模型
最后一步是在目标平台上验证新生成的 ONNX 版本能否正常运作:
```python
import cv2
import numpy as np
import onnxruntime as ort
session = ort.InferenceSession(output_onnx)
img = cv2.imread('test.jpg')
resized_img = cv2.resize(img, (640, 640))
blob = np.expand_dims(resized_img.transpose((2, 0, 1)), axis=0)/255.
outputs = session.run(None, {"image": blob.astype(np.float32)})
for box in outputs[1][0]:
x_min, y_min, x_max, y_max = int(box[0]), int(box[1]), int(box[2]), int(box[3])
cv2.rectangle(img, (x_min, y_min), (x_max, y_max), color=(0, 255, 0))
cv2.imshow("Detected Objects", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
该测试程序读取一张图片,调整大小至适合输入尺寸后送入已编译完毕的 ONNX Runtime Session 中计算预测框位置,再将结果显示出来以便观察效果。
阅读全文
相关推荐


















