版权: 本文由【墨理学AI】原创首发、各位读者大大、敬请查阅、感谢三连
声明: 作为全网 AI 领域 干货最多的博主之一,❤️ 不负光阴不负卿 ❤️
YOLOX 系列时隔一年,终于还是对 YOLOX 之 Openvino 出手啦
,本博主核心内容
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
有一定自学能力的同学,直接参考官方文档即可
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
运行截图如下
官方真的写的很详细了
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哈哈~
貌似安装这个库就可,依赖一堆,会自动安装
pip install openvino-dev -i https://pypi.douban.com/simple/
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 则默认就是 --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 .
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 .
## 最终我这里顺利跑通 转换 和 推理,命令如下
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
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 -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'
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
能够找到的质量 OK 的解读【我先收藏了】
YOLO系列英文论文分享 – 新建了一个 gitee 仓库,方便大家下载
- YOLOv5 环境搭建 | coco128 训练示例 |❤️ 详细记录❤️ |【YOLOv5】
- YOLOv5 COCO数据集 训练 | 【YOLOv5 训练】
- YOLOX 环境搭建 | 测试 | COCO训练复现 【YOLOX 实战】
- YOLOX (pytorch)模型 ONNX export | 运行推理【YOLOX 实战二】
- YOLOX (pytorch)模型 转 ONNX 转 ncnn 之运行推理【YOLOX 实战三】
- YOLOX (pytorch)模型 转 tensorRT 之运行推理【YOLOX 实战四】
❤️ 各位亲们,别忘了收藏、感谢三连 ❤️
上一秒的我信誓旦旦
梦醒,洗头