YOLOX应该是对新手比较友好的的了,甚至他都把模型导出好了,可以直接参照他的部署demo直接应用。
github链接
YOLOX导出ONNX模型
- 进入你的
YOLOX
目录,首先验证一下YOLOX是否能正常运行。
运行:其中python setup.py develop
-n
指模型名称;也可以-f
指定,但我不懂,其实他教程中的-f
和-n
都指向了同一个文件,应该是需要自定义模型是才需要
或者是视频验证python tools/demo.py image -n yolox-s -c ./weights/yolox_s.pth --path assets/dog.jpg --conf 0.25 --nms 0.45 --tsize 640 --save_result --device [cpu/gpu]
python tools/demo.py video -n yolox-s ./weights/yolox_s.pth --path /path/to/your/video --conf 0.25 --nms 0.45 --tsize 640 --save_result --device [cpu/gpu]
导出cpu模型
直接用他默认的导出的就是cpu模型
- 导出onnx模型。这里的
-n
和上边的含义一样。导出完成后就能看到导出的后缀为.onnx
模型啦python tools/export_onnx.py --output-name yolox_s.onnx -n yolox-s -c yolox_s.pth
- 验证一下模型输出是否正确,他的demo中直接提供了推理模型。
python ./demo/ONNXRuntime/onnx_inference.py -m ./weights/yolox_s.onnx -i ./assets/dog.jpg -o ./YOLOX_outputs -s 0.3 --input_shape 640,640
导出GPU模型
目前还未成功,后续再更新
-
上面导出的是cpu模型,运行时显存没有出现任何波动。这是因为他默认安装的是
onnxruntime
,如果要使用gpu,需要使用onnxruntime-gpu
。这里有解决方案
可以使用如下进行验证,我的环境下只输出了“CPU”。import onnxruntime print(onnxruntime.get_device())
-
于是我又创建了一个新的conda环境验证这一点,环境中安装了onnx的gpu环境
pip install onnxruntime-gpu
然后
ort_session = onnxruntime.InferenceSession("path/model/model_name.onnx",providers=['CUDAExecutionProvider']) print(ort_session.get_providers())
使用上边的验证时出现了下边的错误
[W:onnxruntime:Default, onnxruntime_pybind_state.cc:552 CreateExecutionProviderInstance] Failed to create CUDAExecutionProvider. Please reference https://onnxruntime.ai/docs/reference/execution-providers/CUDA-ExecutionProvider.html#requirements to ensure all dependencies are met.
然后看他给的链接,发现是cuda和onnx版本不对应导致的。我的cuda版本是10.2,cudnn版本是7.6.5,表格中没有找到相应的,对应的应该是onnx-gpu1.5或1.6,但我却默认安装了最新版的1.11,那么重新安装
pip uninstall onnxruntime-gpu pip install onnxruntime-gpu==1.5.1
导出OpenVINO模型
教程中说了,如果需要导出OpenVINO模型,那么需要把导出的ONNX模型的optset设置为10(我也不知道为啥),那么让我们再重新来导出一次ONNX吧,还是使用cpu模型
Python安装
- 导出opset为10的onnx模型
python tools/export_onnx.py --output-name ./weights/yolox_s_cuda.onnx -n yolox-s -c ./weights/yolox_s.pth --opset 1
- 安装OpenVINO-dev,使用pip安装即可(如果是Python,只需要安装开发环境就行,他会自动帮你安装runtime;但是如果是C++开发,那么需要先用apt安装runtime,然后才能安装dev。从2022版之后只支持pypi安装dev,没懂是什么意思)
验证安装是否成功pip install openvino-dev[pytorch,onnx]
mo -h
C++版本安装
-
安装OpenVINO runtime 2021.4,在Ubuntu18上安装OpenVINO,官网在此
wget https://apt.repos.intel.com/openvino/2021/GPG-PUB-KEY-INTEL-OPENVINO-2021 sudo apt-key add GPG-PUB-KEY-INTEL-OPENVINO-2021 sudo apt-key list echo "deb https://apt.repos.intel.com/openvino/2021 all main" | sudo tee /etc/apt/sources.list.d/intel-openvino-2021.list echo "deb https://apt.repos.intel.com/openvino/2022 bionic main" | sudo tee /etc/apt/sources.list.d/intel-openvino-2022.list sudo apt update sudo apt-cache search intel-openvino-runtime-ubuntu18
此时如果出现了一大堆openvino相关的库,那么就可以开始安装了,默认安装路径为
/opt/intel/openvino_<VERSION>.<UPDATE>.<PATCH>
安装指定版本sudo apt install intel-openvino-runtime-ubuntu18-2021.4.582
查看版本
apt list --installed | grep openvino
卸载
sudo apt autoremove intel-openvino-<PACKAGE_TYPE>-ubuntu<OS_VERSION>-<VERSION>.<UPDATE>.<BUILD_NUM>
后边还有一些步骤,我就不再写了,因为我也不知道有啥用,到这里OpenVINO就安装完成了。
然后似乎还要下边这个命令,但是运行时它自动给我安上了。pip install openvino
-
设置环境,直接加
.bashrc
吧,这路径太长记不住啊。
我安装的是与教程一样的2021,一开始装的是
OpenVINO2022.1.0.643
后来发现他大改版,与之前完全不同了,只能装回2021。2022相比之下精简了很多东西,需要自己去安装激活临时环境
source /opt/intel/openvino_2021/bin/setupvars.sh
或者直接加.bashrc中
vim ~/.bashrc source /opt/intel/openvino_2021/bin/setupvars.sh source ~/.bashrc
-
然后安装dev包
sudo apt install intel-openvino-dev-ubuntu18-2021.4.582
-
模型转换
cd /opt/intel/openvino_2021/deployment_tools/model_optimizer/install_prerequisites
安装依赖
sudo ./install_prerequisites_onnx.sh
它里边的命令是
source install_prerequisites.sh onnx
,所以你直接去调用应该也可以开始转换
cd .. 转换命令 python mo.py --input_model <ONNX_MODEL> --input_shape <INPUT_SHAPE> [--data_type FP16] 例如:这里一定要确定宽高和C++的输入一样 python mo.py --input_model yolox_tiny.onnx --input_shape [1,3,416,416] --data_type FP16 python mo.py --input_model ~/working/YOLOX/weights/yolox_s_10.onnx --input_shape [1,3,416,416] --data_type FP16 --output_dir ~/working/YOLOX/weights/
然后IR(Intermediate Representation)就被写入输出文件夹了。一共三个文件,bin,mapping和xml。其中bin文件就是生成的训练模型文件
再然后就正常去他的YOLOX/demo/OpenVINO/cpp/
目录下去cmake
那一套就行了。
最后运行,一定要注意CPU全大写。./demo/OpenVINO/cpp/build/yolox_openvino ./weights/yolox_s_openvino/yolox_s_10.xml ./assets/dog.jpg CPU
运行结果发现准确度确实有波动,比onnx波动要大
使用Intel GPU进行推理加速
如果你的CPU能能够正常运行,那么接下来可以试试用Intel GPU加速了!
首先安装gpu相关驱动,只有最新版的,但是2021.4和他的安装方式一样:官网。第二步因为网络原因可能会很慢,可能需要多次尝试。。。
cd <INSTALL_DIR>/install_dependencies/
sudo -E ./install_NEO_OCL_driver.sh
装完之后直接把设备改成GPU
就可以了,模型加载时间非常非常长~~