版权: 本文由【墨理学AI】原创首发、各位读者大大、敬请查阅、感谢三连
声明: 作为全网 AI 领域 干货最多的博主之一,❤️ 不负光阴不负卿 ❤️

文章目录

    • 前言:时隔一年,终于还是对 YOLOX 之 Openvino 出手啦
    • YOLOX 环境搭建
    • YOLOX pytorch2onnx
        • pytorch2onnx 模型转换
        • onnx_inference 运行效果如下
    • YOLOX openvino
        • Convert model 命令解析
        • 默认 –data_type FP32
        • 指定 –data_type FP16
        • 顺利跑通 阶段一:onnx2openvino 转换
        • 顺利跑通 阶段二:openvino 推理
        • python openvino_inference.py 参数解析【冗余章节】
        • onnx2openvino + openvino_inference.py 运行
        • `openvino_inference.py yolox_s.onnx 推理成功`
    • 简单的代码分析
    • YOLO 系列推荐博文参考顺序【只看一篇就够用】
        • YOLO 理论讲解学习篇
        • Yolov5 系列
        • YOLOX 系列
        • Yolov3 系列
        • 持续补充更新
    • ❤️ 人生苦短, 欢迎和墨理一起学AI

前言:时隔一年,终于还是对 YOLOX 之 Openvino 出手啦

YOLOX 系列时隔一年,终于还是对 YOLOX 之 Openvino 出手啦,本博主核心内容

  1. YOLOX pytorch、onnx、Openvino 环境搭建
  2. pytorch2onnx 模型转换、推理
  3. onnx2Openvino 模型转换、推理
  4. YOLOX (pytorch)模型转onnx转Openvino之运行推理【YOLOX 实战五】【一文读懂】

YOLOX 环境搭建

git clone https://github.com/Megvii-BaseDetection/YOLOX.gitcd YOLOXconda create -n torchYolo python=3.8.5conda activate torchYolo pip3 install -r requirements.txtpython3 setup.py develop

YOLOX pytorch2onnx

有一定自学能力的同学,直接参考官方文档即可

  • https://github.com/Megvii-BaseDetection/YOLOX/tree/main/demo/ONNXRuntime

pytorch2onnx 模型转换

onnx 相关库安装,主要就是下面这俩,缺什么补什么就可以了

pip install onnx  -i https://pypi.douban.com/simple/pip install onnxruntime  -i https://pypi.douban.com/simple/

运行命令如下

## 进入 YOLOX 源码## yolox_s.pth 需要手动下载,我放置在了上一层目录,你也可以直接放在当前目录python3 tools/export_onnx.py --output-name yolox_s.onnx -f exps/default/yolox_s.py -c ../yolox_s.pth## 运行输出如下,目录下可以看到 yolox_s.onnx,推理会用2022-08-10 01:31:32.406 | INFO     | __main__:main:64 - args value: Namespace(batch_size=1, ckpt='../yolox_s.pth', decode_in_inference=False, dynamic=False, exp_file='exps/default/yolox_s.py', experiment_name=None, input='images', name=None, no_onnxsim=False, opset=11, opts=[], output='output', output_name='yolox_s.onnx')2022-08-10 01:31:32.695 | INFO     | __main__:main:88 - loading checkpoint done.2022-08-10 01:31:36.690 | INFO     | __main__:main:101 - generated onnx model named yolox_s.onnx2022-08-10 01:31:37.982 | INFO     | __main__:main:117 - generated simplified onnx model named yolox_s.onnx

运行截图如下

onnx_inference 运行效果如下

官方真的写的很详细了

python3 onnx_inference.py -m yolox_s.onnx -i ../../assets/dog.jpg -o ./ -s 0.3 --input_shape 640,640

运行截图如下

dog.jpg :看图久了,这只 dog 我最熟悉了,O(∩_∩)O哈哈~

YOLOX openvino

貌似安装这个库就可,依赖一堆,会自动安装

pip install openvino-dev -i https://pypi.douban.com/simple/

Convert model 命令解析

python3 mo.py --input_model <ONNX_MODEL> --input_shape <INPUT_SHAPE> [--data_type FP16]# 对应命令如下   python3 mo.py --input_model yolox_s.onnx --input_shape [1,3,640,640] -o ./yolox --data_type FP16

默认 –data_type FP32

运行命令

## 不设置 --data_type  则默认就是 --data_type FP32python3 mo.py --input_model yolox_s.onnx --input_shape [1,3,640,640] -o ./yolox

运行输出如下

python3 mo.py --input_model yolox_s.onnx --input_shape [1,3,640,640] -o ./yoloxModel Optimizer arguments:Common parameters:- Path to the Input Model: /home/u18/Desktop/project/openvino-master/tools/mo/openvino/tools/mo/yolox_s.onnx- Path for generated IR: /home/u18/Desktop/project/openvino-master/tools/mo/openvino/tools/mo/./yolox- IR output name: yolox_s- Log level: ERROR- Batch: Not specified, inherited from the model- Input layers: Not specified, inherited from the model- Output layers: Not specified, inherited from the model- Input shapes: [1,3,640,640]- Source layout: Not specified- Target layout: Not specified- Layout: Not specified- Mean values: Not specified- Scale values: Not specified- Scale factor: Not specified- Precision of IR: FP32  ## 可以看到 默认就是 --data_type FP32- Enable fusing: True- User transformations: Not specified- Reverse input channels: False- Enable IR generation for fixed input shape: False- Use the transformations config file: NoneAdvanced parameters:- Force the usage of legacy Frontend of Model Optimizer for model conversion into IR: False- Force the usage of new Frontend of Model Optimizer for model conversion into IR: FalseOpenVINO runtime found in: /home/u18/anaconda3/envs/torch385/lib/python3.8/site-packages/openvinoOpenVINO runtime version: 2022.1.0-7019-cdb9bec7210-releases/2022/1Model Optimizer version: 2022.1.0-7019-cdb9bec7210-releases/2022/1[ SUCCESS ] Generated IR version 11 model.[ SUCCESS ] XML file: /home/u18/Desktop/project/openvino-master/tools/mo/openvino/tools/mo/yolox/yolox_s.xml[ SUCCESS ] BIN file: /home/u18/Desktop/project/openvino-master/tools/mo/openvino/tools/mo/yolox/yolox_s.bin[ SUCCESS ] Total execution time: 0.62 seconds. [ SUCCESS ] Memory consumed: 141 MB. 

运行截图如下

模型大小 35M

lsyolox_s.bin  yolox_s.mapping  yolox_s.xml(torch385) u18@ubuntu:~/Desktop/project/openvino-master/tools/mo/openvino/tools/mo/yolox$ du -sh35M.

指定 –data_type FP16

python3 mo.py --input_model yolox_s.onnx --input_shape [1,3,640,640] -o ./yolox --data_type FP16python3 mo.py --input_model yolox_s.onnx --input_shape [1,3,640,640] --data_type FP16 --output_dir converted_output

模型大小 18M

cd yolox/(torch385) u18@ubuntu:~/Desktop/project/openvino-master/tools/mo/openvino/tools/mo/yolox$ du -sh18M.

顺利跑通 阶段一:onnx2openvino 转换

## 最终我这里顺利跑通 转换 和 推理,命令如下pwd/home/u18/Desktop/project/openvino-master/tools/mo/openvino/tools/mo   # 执行命令如下   python3 mo.py --input_model yolox_s.onnx --input_shape [1,3,640,640] --data_type FP16 --output_dir converted_output

顺利跑通 阶段二:openvino 推理

pwd/home/u18/Desktop/project/yoloX/YOLOX-main/demo/OpenVINO/python# 转换得到的 OpenVINO 模型 copy 到当前目录cp /home/u18/Desktop/project/openvino-master/tools/mo/openvino/tools/mo/converted_output/ -r .# 执行命令如下python openvino_inference.py -m ./converted_output/yolox_s.xml -i ../../../assets/dog.jpg     or    python openvino_inference.py -m ./converted_output/yolox_s.xml -i ../../../assets/dog.jpg -o './' -s 0.5 -d 'CPU'

openvino 推理运行截图

python openvino_inference.py 参数解析【冗余章节】

python openvino_inference.py -m <XML_MODEL_PATH> -i <IMAGE_PATH> python openvino_inference.py -m ./converted_output/yolox_s.xml -i ../../../assets/dog.jpg 

or 设置更多参数

python openvino_inference.py -m <XML_MODEL_PATH> -i <IMAGE_PATH> -o <OUTPUT_DIR> -s <SCORE_THR> -d <DEVICE>## 参数解析如下,cat openvino_inference.py 即可看明白  '-s',   '--score_thr',   type=float,   default=0.3,##python openvino_inference.py -m ./converted_output/yolox_s.xml -i ../../../assets/dog.jpg -o './' -s 0.5 -d 'CPU'

onnx2openvino + openvino_inference.py 运行

openvino_inference.py yolox_s.onnx 推理成功

  • openvino_inference.py 对于 onnx 模型 也能够推理

简单的代码分析

    # ---------------------------Step 6. Prepare input---------------------------------------------------------------------    # image.shape# (3, 640, 640)# type(image)#     # ------------------------------------------------------------------------------------------------    origin_img = cv2.imread(args.input)    _, _, h, w = net.input_info[input_blob].input_data.shape    image, ratio = preprocess(origin_img, (h, w))    # ---------------------------Step 7. Do inference----------------------------------------------------------------------    log.info('Starting inference in synchronous mode')    res = exec_net.infer(inputs={input_blob: image})  #     # ---------------------------Step 8. Process output--------------------------------------------------------------------    res = res[out_blob]  # 

值得注意的是:当前版本 openvino_inference.py 使用的 Inference Engine API 不是 OpenVINO Runtime API 2.0


YOLO 系列推荐博文参考顺序【只看一篇就够用】


YOLO 理论讲解学习篇

能够找到的质量 OK 的解读【我先收藏了】


YOLO系列英文论文分享 – 新建了一个 gitee 仓库,方便大家下载

  • 从五个方面解读CVPR2016 目标检测论文YOLO
  • YOLOv2 / YOLO9000 深入理解
  • yolo系列之yolo v3【深度解析】
  • YOLOv4原文翻译 – v4它终于来了!
  • 一文读懂YOLO V5 与 YOLO V4

Yolov5 系列

  • YOLOv5 环境搭建 | coco128 训练示例 |❤️ 详细记录❤️ |【YOLOv5】
  • YOLOv5 COCO数据集 训练 | 【YOLOv5 训练】

YOLOX 系列

  • YOLOX 环境搭建 | 测试 | COCO训练复现 【YOLOX 实战】
  • YOLOX (pytorch)模型 ONNX export | 运行推理【YOLOX 实战二】
  • YOLOX (pytorch)模型 转 ONNX 转 ncnn 之运行推理【YOLOX 实战三】
  • YOLOX (pytorch)模型 转 tensorRT 之运行推理【YOLOX 实战四】

Yolov3 系列

  • yolov3(darknet )训练 – 测试 – 模型转换❤️darknet 转 ncnn 之C++运行推理❤️【yolov3 实战一览】
  • YOLOv3 ncnn 模型 yolov3-spp.cpp ❤️【YOLOv3之Ncnn推理实现———附代码】

持续补充更新

❤️ 各位亲们,别忘了收藏、感谢三连 ❤️


❤️ 人生苦短, 欢迎和墨理一起学AI


上一秒的我信誓旦旦

梦醒,洗头

  • 点赞 收藏 ⭐留言 都是博主坚持写作、更新高质量博文的最大动力!