页面标题
GitHub Gitee

MindStudio游记——YOLOv5模型转换

这次还是以咱们的老演员————Hi3519DV500 为例(毕竟笔者目前一直在用):

1. MindStudio 环境搭建

其实在海思提供的那一堆文档里已经有这部分的内容了(虽然有点乱),不过笔者这里还是简单作下整理吧。

另外,这里使用的 MindStudio 以及相关的 ATC 工具都是海思提供的 Hi3519DV500 SDK 里附带的,可能与那些用在 Atlas 或香橙派版本的有一定出入。
这里仅供参考。

此处以 WSL2 下 Ubuntu 18.04 为例:

1.1 准备工作

Ubuntu 换源:

sudo sed -i "s@http://.*archive.ubuntu.com@http://mirrors.huaweicloud.com@g" /etc/apt/sources.list
sudo sed -i "s@http://.*security.ubuntu.com@http://mirrors.huaweicloud.com@g" /etc/apt/sources.list
sudo apt-get update

软件包安装:

sudo apt-get install gcc g++ make

安装 Python3.7.5 依赖包:

sudo apt-get install -y make zlib1g zlib1g-dev build-essential libbz2-dev libsqlite3-dev libssl-dev libxslt1-dev libffi-dev openssl python3-tk

安装 Python3.7.5:

wget https://www.python.org/ftp/python/3.7.5/Python-3.7.5.tgz
tar -zxvf Python-3.7.5.tgz
cd Python-3.7.5
./configure --prefix=/usr/local/python3.7.5 --enable-loadable-sqlite-extensions --enable-shared
make -j8
sudo make install

创建软链接:

sudo ln -s /usr/local/python3.7.5/bin/python3 /usr/local/python3.7.5/bin/python3.7.5
sudo ln -s /usr/local/python3.7.5/bin/pip3 /usr/local/python3.7.5/bin/pip3.7.5

修改环境变量:

sudo nano ~/.bashrc

环境变量中加入如下内容:

export LD_LIBRARY_PATH=/usr/local/python3.7.5/lib:$LD_LIBRARY_PATH
export PATH=/usr/local/python3.7.5/bin:$PATH

保存后退出,执行 source ~/.bashrc

安装 cmake:

wget https://cmake.org/files/v3.10/cmake-3.10.2-Linux-x86_64.tar.gz
tar -zxvf cmake-3.10.2-Linux-x86_64.tar.gz
sudo mv ./cmake-3.10.2-Linux-x86_64 /usr/local/

修改环境变量:

sudo nano ~/.bashrc

环境变量添加以下内容:

export PATH=/usr/local/cmake-3.10.2-Linux-x86_64/bin/:$PATH

保存后退出,执行 source ~/.bashrc

安装 unzip:

sudo apt install unzip

安装 CANN 相关依赖:

pip3.7.5 install protobuf==3.13.0 --user
pip3.7.5 install psutil==5.9.0 --user
pip3.7.5 install numpy==1.16.0 --user
pip3.7.5 install scipy==1.6.2 --user
pip3.7.5 install decorator==4.4.0 --user
pip3.7.5 install sympy==1.5.1 --user
pip3.7.5 install cffi==1.15.1 --user
pip3.7.5 install pyyaml==5.4 --user
pip3.7.5 install pathlib2 --user

安装 CUDA(如果你打算用 CPU 作模型量化,这一步可以忽略):

wget https://developer.download.nvidia.com/compute/cuda/11.3.0/local_installers/cuda_11.3.0_465.19.01_linux.run
sudo sh cuda_11.3.0_465.19.01_linux.run

安装时,直接按照默认选项选择(其实就是什么都不动)
然后,修改环境变量以及动态库路径 : sudo nano ~/.bashrc,并添加以下内容 :

export PATH=/usr/local/cuda-11.3/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-11.3/lib64:$LD_LIBRARY_PATH

保存后退出,执行 source ~/.bashrc
然后,执行: sudo nano /etc/ld.so.conf,添加以下内容到最后: include /usr/local/cuda-11.3/lib64
保存并退出,执行 sudo ldconfig,最后执行 nvcc -V 验证是否成功

graphviz 安装

sudo apt-get install graphviz

1.2 正式安装 Ascend-cann-toolkit

tar -zxvf SVP_NNN_PC_V3.0.2.1.tgz
cd SVP_NNN_PC_V3.0.2.1

安装 Ascend-cann-toolkit:

  cd MindStudio
  chmod +x Ascend-cann-toolkit_6.10.t03spc011b010_linux.x86_64.run
  sudo ./Ascend-cann-toolkit_6.10.t03spc011b010_linux.x86_64.run --install

安装成功后,安装路径为: /usr/local/Ascend
设置环境变量:

source /usr/local/Ascend/ascend-toolkit/svp_latest/x86_64-linux/script/setenv.sh

1.3 安装 amct 模型压缩工具(以 Pytorch 版为例):

Caffe 版的 amct 就不做赘述了,请自行查阅《AMCT 使用指南(Caffe)》

安装 pytorch:
CPU 版:

python3.7.5 -m pip --trusted-host=download.pytorch.org install torch==1.10.2+cpu torchvision==0.11.3+cpu torchaudio==0.10.2 -f https://download.pytorch.org/whl/torch_stable.html

GPU 版:

python3.7.5 -m pip install typing-extensions==3.10.0.2
python3.7.5 -m pip --trusted-host=download.pytorch.org install torch==1.10.2+cu113 torchvision==0.11.3+cu113 torchaudio==0.10.2 -f https://download.pytorch.org/whl/torch_stable.html

其他 pip 包

pip3.7.5 install numpy==1.16.0
pip3.7.5 install onnx==1.6.0
pip3.7.5 install interval==1.0.0
pip3.7.5 install pyyaml==5.4
pip3.7.5 install scikit-learn==1.0.2
pip3.7.5 install pydot
pip3.7.5 install scipy
pip3.7.5 install wheel

正式安装 amct:

pip3.7.5 install hotwheels_amct_pytorch-1.2.19+cu113-py3-none-linux_x86_64.tar.gz

1.4 MindCmd 安装:

系统语言修改:

sudo nano /etc/default/locale

内容修改为: LANG=en_US.UTF-8,保存并退出,然后 reboot 重启

安装 opencv-python:

python3.7.5 -m pip install opencv-python==3.4.4.19 -i https://pypi.tuna.tsinghua.edu.cn/simple

安装其他依赖:

python3.7.5 -m pip install "packaging>=18.0"
python3.7.5 -m pip install "bcrypt<4.0.0" --no-binary=bcrypt
python3.7.5 -m pip install "paramiko>=2.10.5" "cryptography<=3.4.8"
python3.7.5 -m pip install skl2onnx

正式安装 MindCmd:

pip3.7.5 install mindcmd-1.2.5-py3-none-linux_x86_64.tar.gz

修改 base_config.cann_install_path:

mindcmd config --global base_config.cann_install_path=/usr/local/Ascend/ascend-toolkit/6.10.t03spc011b010

修改交叉编译器选项:

mindcmd config --global base_config.cross_compiler=gnu

1.5 安装 MindStudio:

tar -zxvf MindStudio_2.4.1_linux_x86_64.tar.gz

正式安装:

cd MindStudio/bin
./MindStudio.sh

即可启动 MindStudio 工具,期间如果提示缺少软件包,请按照提示安装即可
启动成功后画面大致如下:
image
image

2. 创建新工程

确认环境内安装了交叉编译器:

aarch64-v01c01-linux-gnu-g++ -v

若未安装,请根据《Hi35xxVxxx 开发环境用户指南》中步骤安装交叉编译器,并配置好环境变量
这里推荐使用 gnu 版本而非 musl 的编译器

启动 MindStudio,创建新工程。
选择 Ascend APP->ACL Project(C/C++),在 CANN Version 里配置你之前安装的 CANN-Toolkit 路径,例如:

/usr/local/Ascend/ascend-toolkit/6.10.t03spc011b010

创建新工程后,在 Build->Build Configuration 里配置平台型号,编译器版本,以及环境变量
比如以下这一行,可以用来连接 AclLib 相关库:

LD_LIBRARY_PATH=/usr/local/Ascend/ascend-toolkit/6.10.t03spc011b010/acllib/lib64_aarch64-v01c01-linux-gnu/stub:$LD_LIBRARY_PATH

3. 正片:YOLOv5 模型转换

这里的模型转换支持从 onnx 模型转为可在板端部署的 om 模型文件。

既然要转换 YOLOv5 的模型,首先我们自然得有 YOLOv5 模型的训练环境。不过网上 YOLOv5 环境配置的教程一堆,这里只做点简单概括。
首先拉取 github 上 YOLOv5 的特定版本的仓库:

git clone -b v7.0 --single-branch https://github.com/ultralytics/yolov5.git

之后下载官方预训练权重,权重文件放在源码目录下:

https://github.com/ultralytics/yolov5/releases/download/v7.0/yolov5s.pt

也可以下载 YOLOv5m 的权重文件,具体视读者的开发需求而定
经测试,Hi3519DV500 也支持 YOLOv5m 的模型,至于l和x就不知道了。

进入源码目录,安装依赖环境:

pip install -r requirements_yolov5.txt

注意:不要没安装对应 GPU 版本的 torch 和 torchvision 就执行这一步,除非你想用 CPU 版的 torch/torchvision!

然后,将训练好的 Pytorch 模型转为 Onnx 模型:
首先导入定制 rpn 算子补丁,以 YOLOv5s 为例:将 0001-yolov5-rpn.patch 文件拷贝到 YOLOv5 源码路径中,并导入补丁:

git apply --reject 0001-yolov5-rpn.patch

补丁文件详见 SVP_NNN 的 Sample/samples/2_object_detection/yolo 下相关文件夹
然后导出 Onnx 模型:

python export.py --weights yolov5s.pt --include onnx

可能会出现因缺失 pip 包或工具导致的报错,如 onnx 和 ninja 构建工具,安装相关的包即可。
ninja 构建工具如下:sudo apt-get install ninja-build

另外,如果你训练自己的模型的时候,尺寸不是标准的 640 * 640,导出 onnx 模型时也需要加对应参数
补丁文件里的 DecBBox 层部分 anchors 等参数,是按照 640 * 640 的图像写死的,请注意修改
image
image

例如:如果你这里要使用 960 * 960 的输入,就应该修改 3 个 num_anchors 以及这三组对应 gridW,gridH,imgW 和 imgH 的值
3 个 num_anchors 分别为:anchors[0]:43200,anchors[1]:10800,anchors[2]:2700
anchors[0]:gridW=120,gridH=120 anchors[1]:gridW=60,gridH=60 anchors[2]:gridW=30,gridH=30
imgW = imgH = 960

之后就要把 Onnx 模型转板端 om 模型,打开 Sample 下 yolo 工程文件
在菜单栏选择 "Ascend -> Model Converter",或者工具栏从右往左第五个图标:
image

选择模型文件路径,目标平台型号(Hi3519DV500),输入格式(默认自动为NCHW)
量化类型选择 (image list) U8/UINT8,images file 可选择默认 image_ref_list.txt,也可自行修改。
image

输入图像格式 YUV420SP,BT.601
模型归一化参数:1/Variance = 1/256 = 0.00390625, Mean = 0,Batch Num: 1
image
image

就可以开始模型转换了,转换好的模型工程文件会在 modelzoo 文件夹下。

posted @ 2025-07-20 20:02  Wintoki  阅读(135)  评论(0)    收藏  举报