yolov8onnxruntime
时间: 2025-04-28 21:28:32 浏览: 25
### 使用 ONNX Runtime 运行 YOLOv8 模型
#### 安装依赖项
为了能够顺利使用 ONNX Runtime 来运行 YOLOv8 模型,首先需要安装必要的软件包。对于 Python 用户来说,可以通过 pip 工具轻松完成这些依赖项的安装:
```bash
pip install onnxruntime numpy opencv-python
```
这一步骤确保了环境中有足够的支持来进行模型推理。
#### 加载并准备模型
一旦完成了上述准备工作之后,就可以着手于加载已经转换成 ONNX 格式的 YOLOv8 模型文件,并对其进行预处理以便可以被 ONNX Runtime 正确读取和解释[^1]。
```python
import onnxruntime as ort
import numpy as np
import cv2
# 初始化ONNXRuntime会话
session = ort.InferenceSession("path_to_your_model.onnx")
# 获取输入节点名称
input_name = session.get_inputs()[0].name
# 设置图像大小和其他参数
img_size = (640, 640)
def preprocess_image(image_path):
img = cv2.imread(image_path)
img_resized = cv2.resize(img, img_size)
input_data = np.transpose(img_resized, [2, 0, 1]) # HWC -> CHW
input_data = np.expand_dims(input_data, axis=0).astype(np.float32) / 255.
return input_data
```
这段代码展示了如何创建一个 `InferenceSession` 对象用于管理整个推理过程以及定义了一个简单的函数来负责图片数据的前处理工作。
#### 执行推理
准备好一切后,便可以直接调用 `run()` 方法传入经过预处理后的测试样本作为输入向量给定至模型中去获取预测结果:
```python
image_path = 'test.jpg'
input_tensor = preprocess_image(image_path)
outputs = session.run(None, {input_name: input_tensor})
print(outputs)
```
此部分实现了通过指定路径加载待测图片、调用先前定义好的预处理器方法获得适合喂入网络的形式化表示形式最后再由 ONNX Runtime 提供的服务接口完成实际运算任务并将最终输出打印出来显示给用户查看。
#### 后处理与展示结果
由于YOLOv8分割模型不仅限于目标检测还包含了实例级别的语义信息提取能力因此在得到原始输出以后往往还需要进一步做些额外的工作比如非极大抑制(NMS),边界框解码等才能让其更直观易懂地呈现给人类观察者.
```python
def postprocess_outputs(raw_output):
# 假设 raw_output 是来自模型的一个列表,其中第一个元素是bbox坐标,
# 第二个元素是类别得分,第三个元素是掩膜信息。
bboxes = raw_output[0][0]
scores = raw_output[1][0]
masks = raw_output[2]
# 应用NMS算法去除冗余边框...
indices = cv2.dnn.NMSBoxes(bboxes.tolist(), scores.tolist(), score_threshold=0.7, nms_threshold=0.5)
filtered_bboxes = []
filtered_masks = []
if len(indices)>0:
for i in indices.flatten():
box = bboxes[i]
mask = masks[i]
filtered_bboxes.append(box)
filtered_masks.append(mask)
return filtered_bboxes, filtered_masks
bboxes, masks = postprocess_outputs(outputs)
for bbox,mask in zip(bboxes,masks):
x,y,w,h=bbox[:4]*np.array([width,height,width,height])
top_left=(int(x-w/2.), int(y-h/2))
bottom_right=(int(x+w/2.), int(y+h/2))
color=np.random.randint(0,255,(3)).tolist()
image=cv2.rectangle(image,top_left,bottom_right,color=color,thickness=2)
cv2.imshow('Result', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
以上脚本片段演示了怎样从原始输出里挑选出有效的边界框及其对应的掩模区域并且利用 OpenCV 绘制矩形轮廓标注出各个物体所在位置同时叠加颜色编码过的蒙版层使得可视化效果更加清晰明了.
阅读全文
相关推荐


















