yolov5 onnx 推理代码

onnx_yolov5_inference.pyimport osimport cv2import timeimport onnxruntime as ortimport numpy as npfrom common import pad_to_squarefrom common import save_tensorfrom common import decodefrom common import non_max_suppressionfrom common import dra
摘要由CSDN通过智能技术生成

onnx_yolov5_inference.py

import os
import cv2
import time
import onnxruntime as ort
import numpy as np
from common import pad_to_square
from common import save_tensor
from common import decode
from common import non_max_suppression
from common import draw_result

anchors = [[10,13], [16,30], [33,23],
           [30,61], [62,45], [59,119],
           [116,90],[156,198], [373,326]]

# 模型输入尺寸
model_input_h = 640
model_input_w = 640
# 目标置信度阈值
obj_conf_thresh = 0.3
# nms iou阈值
nms_iou_thresh = 0.5
# 类别数量
classes_num = 1
# 类别标签
class_label = ('o')

if __name__ == '__main__':
    image_name = 'B5D95V.jpg'
    test_image_path = './data/test_images/{}'.format(image_name)
    onnx_model_path = './models/onnx/best_20210531_sim.onnx'
    tensor_output_dir = './data/output_tensor'

    # 读取图片并转换到RGB图像格式,
    # 注意opencv图像维度顺序为:
    # shape[0]=h, shape[1]=w, shape[2]=c
    bgr_image = cv2.imread(test_image_path)
    if bgr_image is None:
        print('load image {} failed !!!'.format(test_image_path))
        exit(-1)
    rgb_image = cv2.cvtColor(bgr_image, cv2.COLOR_BGR2RGB)

    # 图像尺寸是否与模型输入尺寸一致,如果不一致则进行填充、缩放
    if bgr_image.shape != (model_input_h, model_input_w, 3):
        rgb_image = pad_to_square(rgb_image)
        rgb_image = cv2.resize(rgb_image, (model_input_w, model_input_h))
    
    # 图像数据类型转换为浮点类型,保证模型的输入为浮点类型
    rgb_image = rgb_image.astype(np.float32)

    # 归一化
    rgb_image = rgb_image / 255.0
    
    # 维度变换:HWC => CHW
    rgb_image = rgb_image.transpose(2, 0, 1)

    # 增加一个数据维度:CHW => NCHW
    input_data = np.expand_dims(rgb_image, axis=0)
    
    print('input_data shape = {}'.format(input_data.shape))
    print('input_data type = {}'.format(input_data.dtype))

    # 启动onnx runtime会话
    ort_session = ort.InferenceSession(onnx_model_path)

    start = time.time()

    # 模型运行
    model_outputs = ort_session.run(None, {'data': input_data})

    end = time.time()
    time_ms = (end - start)*1000
    print('inference time: {} ms'.format(time_ms))

    # 保存模型输出结果, 打印模型输出维度
    for index, output in enumerate(model_outputs):
        save_tensor(model_outputs[index], os.path.join(tensor_output_dir, 'onnx', 'output{}'.format(index)))
        print('yolo output {} shape: {}'.format(index, output.shape))

    # 模型输出解码
    decode_outputs = decode(model_outputs=model_outputs, 
                            model_input_h=model_input_h, 
                            model_input_w=model_input_w, 
                    
  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

洪流之源

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值