关键词:
🥇 版权: 本文由【墨理学AI】原创首发、各位读者大大、敬请查阅、感谢三连
🎉 声明: 作为全网 AI 领域 干货最多的博主之一,❤️ 不负光阴不负卿 ❤️
文章目录
前言:时隔一年,终于还是对 YOLOX 之 Openvino 出手啦
YOLOX 系列时隔一年,终于还是对 YOLOX 之 Openvino 出手啦
,本博主核心内容
- YOLOX pytorch、onnx、Openvino 环境搭建
- pytorch2onnx 模型转换、推理
- onnx2Openvino 模型转换、推理
- YOLOX (pytorch)模型转onnx转Openvino之运行推理【YOLOX 实战五】【一文读懂】
YOLOX 环境搭建
git clone https://github.com/Megvii-BaseDetection/YOLOX.git
cd YOLOX
conda create -n torchYolo python=3.8.5
conda activate torchYolo
pip3 install -r requirements.txt
python3 setup.py develop
YOLOX pytorch2onnx
有一定自学能力的同学,直接参考官方文档即可
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.onnx
2022-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 FP32
python3 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 ./yolox
Model 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: None
Advanced 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: False
OpenVINO runtime found in: /home/u18/anaconda3/envs/torch385/lib/python3.8/site-packages/openvino
OpenVINO runtime version: 2022.1.0-7019-cdb9bec7210-releases/2022/1
Model 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
ls
yolox_s.bin yolox_s.mapping yolox_s.xml
(torch385) u18@ubuntu:~/Desktop/project/openvino-master/tools/mo/openvino/tools/mo/yolox$ du -sh
35M .
指定 --data_type FP16
python3 mo.py --input_model yolox_s.onnx --input_shape [1,3,640,640] -o ./yolox --data_type FP16
python3 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 -sh
18M .
顺利跑通 阶段一: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)
# <class 'numpy.ndarray'>
# ------------------------------------------------------------------------------------------------
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) # <class 'dict'>
# ---------------------------Step 8. Process output--------------------------------------------------------------------
res = res[out_blob] # <class 'numpy.ndarray'>
值得注意的是:当前版本 openvino_inference.py 使用的 Inference Engine API 不是 OpenVINO Runtime API 2.0
📙 YOLO 系列推荐博文参考顺序【只看一篇就够用】
🟦 YOLO 理论讲解学习篇
能够找到的质量 OK 的解读【我先收藏了】
- 💙 从五个方面解读CVPR2016 目标检测论文YOLO
- 💙 YOLOv2 / YOLO9000 深入理解
- 💙 yolo系列之yolo v3【深度解析】
- 💙 YOLOv4原文翻译 - v4它终于来了!
- 💙 一文读懂YOLO V5 与 YOLO V4
🟧 Yolov5 系列
🟨 YOLOX 系列
🟦 Yolov3 系列
- 💙 yolov3(darknet )训练 - 测试 - 模型转换❤️darknet 转 ncnn 之C++运行推理❤️【yolov3 实战一览】
- 💙 YOLOv3 ncnn 模型 yolov3-spp.cpp ❤️【YOLOv3之Ncnn推理实现———附代码】
🟦 持续补充更新
❤️ 各位亲们,别忘了收藏、感谢三连 ❤️
❤️ 人生苦短, 欢迎和墨理一起学AI 💜
上一秒的我信誓旦旦
梦醒,洗头
- 🍊 点赞 👍 收藏 ⭐留言 📝 都是博主坚持写作、更新高质量博文的最大动力!
windows10将yolox模型转换为openvino需要的ir文件(代码片段)
环境Windows:10Anaconda:2.0.4Python3.7.10torch:1.7.0torchvision:0.8.0YOLOX:0.1.0OpenVINO工具包2020.2OpenVINO安装:https://blog.csdn.net/qq_44989881/article/details/119 查看详情
yolox原始论文精读
...了YOLOv3到YOLOv5,并且支持MegEngine、ONNX、TensorRT、ncnn和OpenVINO,为大家提供了加速和部署的支持。在原始论文的题目可以看出,YOLOX在2021年超过了所有YOLO系列的版本:下面就开始对YOL 查看详情
anchorfree系列网络之yolox源码逐行讲解篇--mosaic数据增强及数学理解
...于一个调参者。本篇讲的是YOLOX中的mosaic数据增强,大多还是opencv的操作。下图就是一个mosaic增强后的效果图,可以看出:该图像由四张图像拼接,且每张图像都有一定的仿射变换(旋转、平移、resize等)。我们打开yolox\\data\\dataset... 查看详情
deepstream系列之yolox调用(代码片段)
...查看系列文章目录该文转载于我同事的文章【Deepstream之YoloX部署】,版权归原作者所有。github:egbertYeah/yolox_deepstream(github.com)https://github.com/egbertYeah/yolox_deepstream0.目标检测算法YoloXYoloX是旷视科技于2021年提出的目标检测算法... 查看详情
deepstream系列之yolox调用(代码片段)
...查看系列文章目录该文转载于我同事的文章【Deepstream之YoloX部署】,版权归原作者所有。github:egbertYeah/yolox_deepstream(github.com)https://github.com/egbertYeah/yolox_deepstream0.目标检测算法YoloXYoloX是旷视科技于2021年提出的目标检测算法... 查看详情
deepstream系列之yolox调用(代码片段)
...查看系列文章目录该文转载于我同事的文章【Deepstream之YoloX部署】,版权归原作者所有。github:egbertYeah/yolox_deepstream(github.com)https://github.com/egbertYeah/yolox_deepstream0.目标检测算法YoloXYoloX是旷视科技于2021年提出的目标检测算法... 查看详情
anchorfree系列网络之yolox源码逐行讲解篇--coco数据载入及分布式训练
整个YOLOX源码的学习一定要按照以下顺序才能整体串起来:Backbone->FPN->Head->->数据读入源码->数据增强源码->loss计算源码->simOTA源码->demo.py脚本->train.py脚本。而该系列博文也遵循该顺序来逐行分析代码。注意是... 查看详情
raspberrypi4b部署yolox(代码片段)
环境Python:3.7.3YOLOX:0.1.1rc0torch:1.8.0torchvision:0.9.0OpenVINO:2021.4.582g++(Raspbian8.3.0-6+rpi1)8.3.0raspberrypi:5.10.52-v7l+系统指令集: 查看详情
学习记录:正负样本分配策略之yolox|simota-简单易懂版
学习记录:正负样本分配策略之YoloX|SimOTA-简单易懂版文献阅读和分享目标检测领域趋势正负样本分配策略——SimOTA网络训练(恋爱历程)SimOTA具体流程(中介分配对象流程)一、初步筛选(外貌协会)... 查看详情
deepstream之yolox部署(代码片段)
github: egbertYeah/yolox_deepstream(github.com)0.目标检测算法YoloXYoloX是旷视科技于2021年提出的目标检测算法,本文主要介绍YoloX在deepstream环境下如何推理部署,对于算法的改进点以及性能不进行过多的分析。paper: YOLOX:ExceedingYOLOS... 查看详情
程序员修炼之道
...随手翻了几年,发现挺无聊的,并没有所谓的修炼之道。时隔多年又一时兴起,再次翻开了它。 首先,读了序言就很佩服作者的远见。 作者首先提到了一种趋势,静态语言的应用率在逐步降低 查看详情
时隔多年,这次我终于把动态代理的源码翻了个地儿朝天(代码片段)
动态代理简介 Proxy模式是常用的设计模式,其特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。用户可以更加结构图,自己编码完成Proxy模式... 查看详情
yolox改进之模型轻量化(lite)(代码片段)
文章内容:给YOLOv5-Lite系列轻量级模型换上YOLOX头部环境:pytorch1.7+cuda11.0注意:YOLOv5版本为5.0,可以匹配YOLOX的主干网络与neck部分一、参考资料参考资料1:YOLOv5-Lite:代码链接:https://github.com/ppogg/YOL... 查看详情
计算机专业丨学完一年编程还是不会写代码,问题到底出在哪?
...—为什么我认真听课,认真看书书,几个月甚至一年下来但还是写不好代码?!为什么学了很久很久编程,还是只会写一些简单的算法题?为什么学了几个月编程, 查看详情
念叨了一年的游戏叙事书中文版终于出了
VideoGameStorytelling中文版《扣人心弦:游戏叙事技巧与实践》终于来啦!本书封面取自游戏《藏梦》,大家可以关注一下这款有着独特韵味的独立作品。原作者EvanSkolnick,是一名长期活跃在游戏界传道授业的人士。... 查看详情
深入浅出yolo系列之yolov3&yolov4&yolov5&yolox核心基础知识完整讲解
...测算法会经常使用和关注,比如Yolov3、Yolov4、Yolov5、Yolox算法。当然,实际项目中很多的第一步,也都是先进行目标检测任务,比如人脸识别、多目标追踪、REID、客流统计等项目。因此目标检测是计算机视觉项目... 查看详情
时隔半年再写购物车程序并改进(代码片段)
时隔了半年时间,重新把购物车程序拿出来再写一遍,感觉对于循环语句比之前熟悉多了,脑子里面开始有程序流程图,之前懵懵懂懂地跟着老师来写,现在基本可以自己写,自己判断问题出在哪里了。这段程序没用pycharm来写... 查看详情
client-go实战之六:时隔两年,刷新版本继续实战(代码片段)
欢迎访问我的GitHub这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos系列文章链接client-go实战之一:准备工作client-go实战之二:RESTClientclient-go实战之三:Clientsetclient-go实战之四:dynamicClien... 查看详情