YOLOX模型导出笔记

YOLOX应该是对新手比较友好的的了,甚至他都把模型导出好了,可以直接参照他的部署demo直接应用。
github链接

YOLOX导出ONNX模型

  1. 进入你的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模型

  1. 导出onnx模型。这里的-n和上边的含义一样。导出完成后就能看到导出的后缀为.onnx模型啦
    python tools/export_onnx.py --output-name yolox_s.onnx -n yolox-s -c yolox_s.pth
    
  2. 验证一下模型输出是否正确,他的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模型

目前还未成功,后续再更新

  1. 上面导出的是cpu模型,运行时显存没有出现任何波动。这是因为他默认安装的是onnxruntime,如果要使用gpu,需要使用onnxruntime-gpu这里有解决方案
    可以使用如下进行验证,我的环境下只输出了“CPU”。

    import onnxruntime
    print(onnxruntime.get_device())
    
  2. 于是我又创建了一个新的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安装

  1. 导出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
    
  2. 安装OpenVINO-dev,使用pip安装即可(如果是Python,只需要安装开发环境就行,他会自动帮你安装runtime;但是如果是C++开发,那么需要先用apt安装runtime,然后才能安装dev。从2022版之后只支持pypi安装dev,没懂是什么意思)
    pip install openvino-dev[pytorch,onnx]
    
    验证安装是否成功
    mo -h
    

C++版本安装

  1. 安装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
    
  2. 设置环境,直接加.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
    
  3. 然后安装dev包

    sudo apt install intel-openvino-dev-ubuntu18-2021.4.582
    
  4. 模型转换

    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就可以了,模型加载时间非常非常长~~

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Simscape是一种基于物理建模的仿真软件,用于建立和模拟动态系统。它可以有效地对实际物理系统进行建模和仿真,如机械系统、电气系统、液压系统等。Simscape模型导出是指将建立的Simscape模型导出到其他工程软件或环境中继续使用的过程。 Simscape模型导出可以通过两种不同的方式实现。一种方式是将Simscape模型转换为Simulink模型,然后再将Simulink模型导出到其他工程软件中。这种方法适用于那些只支持Simulink模型的软件平台,如MATLAB、LabVIEW等。通过这种方式,Simscape模型中的物理元件和连接关系将转换为Simulink的信号和传输线,以便在其他软件环境中使用和分析。 另一种方式是将Simscape模型导出为代码文件,如C代码或C++代码。这种方式适用于那些需要直接控制硬件或进行实时仿真的应用场景。通过将Simscape模型导出为代码,可以在嵌入式系统或硬件控制器中运行,实现实时模拟和控制。 无论采用哪种方式,Simscape模型导出都需要进行一些配置和设置。首先,需要选择正确的导出选项和目标平台。然后,根据导出的要求对模型进行调整和优化,以确保导出后的模型可以正常运行并满足性能要求。最后,进行编译和生成可执行文件或代码的过程。在导出完成后,就可以将模型集成到其他工程软件或系统中,进行进一步的使用和分析。 总的来说,Simscape模型导出是一项重要的工作,它将Simscape模型扩展到更广泛的应用领域,并实现与其他工程软件和硬件平台的无缝集成。通过Simscape模型导出,我们可以更好地利用Simscape的强大功能,为各种实际系统建立准确的仿真模型,进行控制设计和性能分析。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值