主要是记录一些参考网址,顺便记录一些废话。。。
在windows上,有时部署还是挺痛苦的,相对部署的人比较少,参考资料也不多,很多模型要自己去摸索。OpenVINO的话主要看官方的模型。
为了在Windows上部署模型,通常我们可以这样做: (1)可以选择一些比较容易或别人已经部署过的模型。 (2)在没有GPU的情况下,一般用NCNN比较容易成功。本人多次在windows上编译过这个短小精悍的NCNN。 (3)如果用GPU话,可能还是TensorRT更合适。另外libTorch也是个不错的选择。 (4)不用GPU的情况下,windows上OpenVINO和OnnxRuntime可能相对较好。其实我也不是专业部署人员,所以也不敢肯定,只能凭自己的经验说,Intel和Microsoft对windows的平台支持还是要稍微好一点,毕竟自家的平台(虽然Microsoft这些年有被别人牵着鼻子走的感觉),纯CPU的话,我貌似还没有找到比OpenVINO更快的部署工具。
关于OpenVINO的入门介绍可以参考我的前两篇文章:
玩转OpenVINO之一:cpp samples和demo的编译_tanmx219的博客-CSDN博客_openvino 编译demo玩转OpenVINO之二:试运行mask_rcnn_demo_tanmx219的博客-CSDN博客
好了,言归正传,下面我们来试试在win10上用OpenVINO部署Yolov5,我这里模型很小,用CPU直接部署。
我这里OpenVINO_2021-4.2是自己用VS2017编译的,其主目录地址是: D:\OpenCV455\openvino
同时我还安装了OpenVINO-toolKit_2021-4.2LTS,https://registrationcenter-download.intel.com/akdlm/irc_nas/18320/w_openvino_toolkit_p_2021.4.752.exehttps://registrationcenter-download.intel.com/akdlm/irc_nas/18320/w_openvino_toolkit_p_2021.4.752.exe其主目录地址是 C:\Program1\Intel\openvino_2021.4.752 C:\Program1\Intel\openvino_2021.4.752\deployment_tools,
我这里用的是自己用VS2017编译的版本。
Yolov5经过不断更新,已经做得比较人性化了。现在可以直接从Yolov5中用export_openvino直接导出,其导出函数定义为
def export_openvino(model, im, file, prefix=colorstr('OpenVINO:')):
# YOLOv5 OpenVINO export
try:
check_requirements(('openvino-dev',)) # requires openvino-dev: https://pypi.org/project/openvino-dev/
import openvino.inference_engine as ie
LOGGER.info(f'\n{prefix} starting export with openvino {ie.__version__}...')
f = str(file).replace('.pt', '_openvino_model' + os.sep)
cmd = f"mo --input_model {file.with_suffix('.onnx')} --output_dir {f}"
subprocess.check_output(cmd, shell=True)
LOGGER.info(f'{prefix} export success, saved as {f} ({file_size(f):.1f} MB)')
except Exception as e:
LOGGER.info(f'\n{prefix} export failure: {e}')
可见,其使用的代码就是
“mo --input_model {file.with_suffix('.onnx')} --output_dir {f}”
这个命令相当于我在D:\OpenCV455\openvino目录下使用的命令:
"python ./mo_onnx.py --input_model .onnx文件路径 --output_dir 期望模型输出的路径"
注意要保持版本一致,任何一种方式都是可以的。如果不确定,比如我这里,那就老老实实使用“D:\OpenCV455\openvino”下面的转换,完成后再用自己编译的“D:\OpenCV455\openvino”下面的库部署。
部署的源码可参考后面给出的例子,跑的时候会有些问题,我因为自己修改了Yolov5模型,因此部署也适当做了些变更。经测试CPU模式下,每秒十帧以上无压力,OpenVINO对自家平台的支持还是相当不错的。
参考源码:
https://github.com/fanweiya/openvino_yolov5_cpphttps://github.com/fanweiya/openvino_yolov5_cpphttps://github.com/fb029ed/yolov5_cpp_openvino
https://github.com/fb029ed/yolov5_cpp_openvino