首页 » 通讯 » 海思SS928(SD3403)主控平台迁移YOLOv5-YOLOv7步骤详解_模子_情况

海思SS928(SD3403)主控平台迁移YOLOv5-YOLOv7步骤详解_模子_情况

落叶飘零 2025-01-20 13:41:32 0

扫一扫用手机浏览

文章目录 [+]

本文档内容以yolov5-7.0工程、yolov5s模型为例。

a. 模型构造

海思SS928(SD3403)主控平台迁移YOLOv5-YOLOv7步骤详解_模子_情况 海思SS928(SD3403)主控平台迁移YOLOv5-YOLOv7步骤详解_模子_情况 通讯

详细的模型构造可以利用netron工具打开.pt或.onnx模型查看。

海思SS928(SD3403)主控平台迁移YOLOv5-YOLOv7步骤详解_模子_情况 海思SS928(SD3403)主控平台迁移YOLOv5-YOLOv7步骤详解_模子_情况 通讯
(图片来自网络侵删)

b. 模型参数即验证结果

个中,YOLOv5n、YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x为五种类型的预演习模型,其包含的检测种别相同,均包括以下80类:

'person', 'bicycle', 'car', 'motorcycle', 'airplane', 'bus', 'train','truck','boat',

'traffic light','fire hydrant', 'stop sign','parking meter', 'bench', 'bird', 'cat', 'dog',

'horse', 'sheep', 'cow','elephant', 'bear', 'zebra', 'giraffe', 'backpack', 'umbrella',

'handbag', 'tie', 'suitcase', 'frisbee', 'skis', 'snowboard', 'sports ball', 'kite',

'baseball bat', 'baseball glove', 'skateboard', 'surfboard','tennis racket', 'bottle',

'wine glass', 'cup', 'fork', 'knife', 'spoon', 'bowl', 'banana', 'apple','sandwich',

'orange', 'broccoli', 'carrot', 'hot dog', 'pizza', 'donut', 'cake', 'chair', 'couch',

'potted plant','bed', 'dining table', 'toilet', 'tv', 'laptop', 'mouse', 'remote', 'keyboard',

'cell phone','microwave', 'oven', 'toaster', 'sink', 'refrigerator', 'book', 'clock', 'vase',

'scissors', 'teddy bear','hair drier', 'toothbrush'

Size表示模型支持输入的图像尺寸为640640。
MAP(50-95)表示只有当预测结果置信度阈值为50-95时才算精确的话,模型在coco测试集上的预测精确度。
Speed cpu b1表示该模型在cpu上的推理速率是多少。
Speed V100 b1表示该模型在gpu上的推理速率是多少,个中V100为英伟达的一种显卡类型。
Params表示模型须要演习的参数数量,单位是million。
FLOPs表示模型实行推理时每秒须要进行的浮点数运算次数,次数越少解释模型约轻量,模型参数越少。

2. 移植过程和优化文档

通过章节一得到yolo原始模型,其后缀为.pt,要想将其放到SS928芯片上实行推理,必须将其转换为.om模型,.pt模型转为.om模型须要分两步:

1).pt模型转为.onnx;

2).onnx转为.om;

个中,步骤1依赖github开源的yolo工程,步骤2依赖海思供应的atc工具,即资料包中的Ascend-cann-toolkit_6.10.t01spc030b330_linux.x86_64.run。

下面将对步骤1和步骤2的实现进行详细的解释:

2.1环境搭建指南

.pt模型转换为.onnx

1.准备一个纯净的ubuntu18:04的环境;

2.安装anaconda

通过安装Anaconda来创建虚拟环境,可以在同一个别系上创建多个相互独立的 Python 运行环境。
每个虚拟环境中都可以安装所需的 Python 包和库,以知足不同项目或运用程序的需求,而且不会影响到系统上其他的 Python 环境,担保了环境隔离。
(与全局系统环境和其他虚拟环境都隔离开来)

(1)Anaconda镜像资源下载网址:https://mirrors.bfsu.edu.cn/anaconda/archive/

(2)选择对应的版本下载,下载完成后在终端输入命令运行.sh文件即可安装:

./Anaconda3-2020.11-Linux-x86_64.sh

把稳anaconda版本的选择,不要选择太高的版本,默认安装高版本python。

(3)等待安装,不断回车,输入yes

(4)输入安装路径,即步骤(5)中的${install_path}

(5)安装完成之后,根据提示将安装路径添加到环境变量中

sudo vi ~/.bashrc export PATH=${install_path}/bin:$PATH

conda init

(6)输入conda可查看是否安装成功,若输出下图即为安装成功

3.创建conda虚拟环境

conda info list #查看当前所有conda虚拟环境 conda create -name py375 python==3.x.x #创建特定python版本的虚拟环境 conda activate py375 #激活虚拟环境 conda deactivate #退出虚拟环境 conda remove -n py375 --all #删除虚拟环境

4.配置.pt转.onnx的环境

git clone https://github.com/ultralytics/yolov5 conda create -name yolov5 python==3.8.1 conda activate yolov5cd yolov5pip install -r requirements.txt

.onnx转换为.om

1.ATC工具依赖环境安装

这里的ATC工具即资料包中的Ascend-cann-toolkit_6.10.t01spc030b330_linux.x86_64.run,用来实现onnx到om的模型转换。

(1)安装依赖

sudo apt-get install -y gcc g++ cmake make unzip build-essential zlib1g-dev libbz2-dev libsqlite3-dev libssl-dev libxslt1-dev libffi-dev

(2)检讨依赖是否安装成功

gcc --versiong++ --versioncmake --versionmake --versionunzip --versiondpkg -l build-essential | grep build-essential | grep iidpkg -l zlib1g-dev| grep zlib1g-dev| grep iidpkg -l libbz2-dev| grep libbz2-dev| grep iidpkg -l libsqlite3-dev| grep libsqlite3-dev| grep iidpkg -l libssl-dev| grep libssl-dev| grep iidpkg -l libxslt1-dev| grep libxslt1-dev| grep iidpkg -l libffi-dev| grep libffi-dev| grep ii

不报错即可,可单走运行也可以通过shell脚本运行全部。

(3)ATC工具/CANN软件包安装

#增加用户对软件包的可实行权限。
chmod +x .run#检讨软件包的同等性和完全性。
./.run --check#实行如下命令进行安装./.run --install#若涌现如下关键信息,这解释安装成功 [INFO] xxx install success

#提示实行如下命令生效环境变量,运行后仅在当前终端会话中临时生效,将指令写入到~/.bashrc中,每次启动终端都会自动运行该指令。

vi ~/.bashrcsource /usr/local/Ascend/ascend-toolkit/svp_latest/x86_64-linux/script/setenv.sh

#测试atc工具是否安装成功

atc --help

显示如下则为安装成功

(4)ATC工具/CANN软件包卸载

#进入软件包所在路径,实行以下命令进行卸载 ./.run --uninstall #卸载完成后,显示如下信息,解释卸载成功。
[INFO] xxx uninstall success

至此,模型转换的环境配置完成,但推理代码的编译运行须要配置交叉编译环境。

2.交叉编译环境配置

(1)依赖安装

配置默认利用bash

sudo dpkg-reconfigure dash #选择 no

安装依赖

sudo apt-get install make libc6-i386 lib32z1 lib32stdc++6 zlib1g-dev libncurses5-dev ncurses-term libncursesw5-dev g++ u-boot-tools texinfo texlive gawk libssl-dev openssl bc p7zip-full gperf bison flex diffutils git unzipsudo apt-get install zlib1g-dev liblzo2-dev uuid-dev pkg-config automakesudo apt-get install texlive

(2)交叉编译工具安装

安装交叉编译工具

tar -xvf aarch64-mix210-linux.tgzsudo ./aarch64-mix210-linux.install#安装完成后须要添加安装路径到环境变量中(~/.bashrc)export PATH="/opt/linux/x86-arm/aarch64-mix210-linux/bin:$PATH"

在命令行窗口输入aarch按Tab键查看是否能补齐,若如下图所示补齐即为安装成功。

3.安装python干系依赖库

原资料中哀求,在conda虚拟环境中利用pip进行安装。
pip是Python包管理器,它是Python的官方包管理工具。
能够方便地安装、管理和卸载Python包和依赖项。
利用pip可以轻松地将第三方库安装到相应的Python环境中。

(1)虚拟环境创建

#创建虚拟环境conda create -n py375 python==3.7.5 #激活虚拟环境conda activate py375

(2)pip安装依赖包

#pip换源mkdir ~/.pip touch ~/.pip/pip.confvi ~/.pip/pip.conf#添加以下内容并保存[global]index-url = https://pypi.tuna.tsinghua.edu.cn/simple

换源前安装速率

换源后安装速率

运行以下指令安装依赖库

#安装google.protobuf, 版本号>=3.13.0pip install protobuf #安装psutil, 版本号5.7.0pip install psutil==5.7.0 #安装numpy, 版本号>=1.13.3pip install numpy #安装scipy, 版本号1.4.1pip install scipy==1.4.1 #安装decorator, 版本号>=4.4.0pip install decorator #安装sympy, 版本号>=1.5.1pip install sympy #安装cffi, 版本号1.12.3pip install cffi==1.12.3 #安装pyyamlpip install pyyaml #安装pathlib2pip install pathlib2 pip install kconfiglib wheel pycryptodome pyelftools

上述所有环境已打包成docker镜像,保存为tar包(见资料包中ybn_hasi_ss928.tar),后续进行模型转换不须要再进行相应环境配置,实行下述docker指令即可:

把稳,这里哀求开拓环境所哀求的硬件及操作系统要知足以下哀求。

硬件:内存最小30GB

操作系统:Ubuntu 18.04 x86_64

须要用到sudo命令,请用户自行获取所需的sudo权限。

#加载tar包导入镜像docker load < ${PATH}/ybn_hasi_ss928.tar#确认有无docker images | grep ybn#创建容器运行进入docker环境中,已将须要用到的代码即模型打包进镜像中,须要的话可自己设置挂载路径docker run -it -v ${本机挂载路径}:${镜像内挂载路径} --name test ybn_hasi_ss928:1.0 /bin/bash#创建后再次进入容器docker exec -it test /bin/bash

2.2模型转换

同上面的环境配置解释一样分两个步骤来进行解释:

.pt模型转换为.onnx

由于芯片不支持五维的transpose算子,pt转onnx过程不能按照yolo供应的官方步骤,操作如下:

以下指令均在激活的docker容器中运行。

cd /root/hasi_ss928/yolov5-7.0-patch/conda activate yolov5#在yolov5源码路径下运行以下命令,导出原始onnx模型,若无报错则代表当前环境正常python export.py --weights yolov5s.pt --include onnx#导入定制rpn算子补丁,实质为修正/models/yolo.py中的代码来去掉五维transpose操作并加入filter、sort、nms后处理git apply --reject 0001-yolov5-rpn.patch#重新导出onnx模型python export.py --weights yolov5s.pt --include onnx

.onnx模型转.om

利用atc工具链Ascend-cann-toolkit_6.10.t01spc030b330_linux.x86_64.run实现onnx到om的转换。

docker exec -it test /bin/bash#推理代码目录cd /root/hasi_ss928/yolo/model#运行atc指令实现onnx转ombash onnx2om.sh#天生的om模型存放路径:/root/yolo/model/yolov5s_original.om

onnx2om.sh中atc转换参数解释:

#实行模型转换onnx->omatc --dump_data=0 --input_shape="images:1,3,640,640" --log_level=0 --online_model_type=0 --batch_num=1 --input_format=NCHW --output="./model/yolov5s" --soc_version=SS928V100 --insert_op_conf=./insert_op.cfg --framework=5 --compile_mode=0 --save_original_model=true --model="./yolov5s.onnx" --image_list="images:./data/image_ref_list.txt"

atc参数含义

以下是指令中参数的详细阐明:

atc: 命令行工具,用于将模型转换为适用于芯片处理器的模型格式。

--dump_data=0:是否导出ATC转换模型过程中的数据到文件,0为不导出。

--input_shape="images:1,3,640,640":每次推理一张图像,3通道,图像大小为640640。
input_shape须要与image_list的量化校准文件数据匹配。

--log_level=0:仅输出必要的日志信息。

--online_model_type=0:板载端实行推理时,推理模型本身不输出调试干系的内容,没有网络构造和算子信息。

--batch_num=1:推理输入图像的数目。

--input_format=NCHW: 指定模型输入的数据格式为NCHW或NHWC

N:每次推理输入图像的数目。

C:Channels,图像通道,例如彩色RGB图像的Channels为3。

H:Height,图像高度,即垂直高度方向的像素个数。

W:Width,图像宽度,即水平宽度方向的像素个数。

个中caffe/onnx框架为NCHW,Tensorflow为NHWC。

--output=./yolov5n_om: 指定转换后的模型输出路径和文件名,这里将转换后的om模型保存为当前运行路径下的"yolov5n_om"文件中。

--soc_version=SS928V100: 指定 SoC 版本,这里利用的是SS928V100。

--insert_op_conf=./insert_op_conf_yolov5n.cfg:AIPP( Artificial Intelligence Pre-Processing)人工智能预处理使能并配置参数,用于在芯片硬件上完成数据预处理,包括通道转换、色域转换(转换图像格式)等,数据预处理之后再进行真正的模型推理。

优点:无需cpu运行干系代码对图像进行预处理操作,减小cpu开销;图像数据不须要从cpu再传输到硬件,减少将数据从CPU传输到AI处理器的开销;

--framework=0: 制订原始模型的框架类型,0 表示利用的是 Caffe 框架,5表示利用onnx框架。

--compile_mode=0:默认值。

--save_original_model:output参数根本上加后缀 “_original.om”格式结尾。

--model=./yolov5n.onnx: 指定原始模型文件路径。

--image_list:--insert_op_conf配置图像预处理,即输入为图片时,文件内容为图片文件路径,一行一个图片文件路径,一行表示一个batch。
图片大小不限,ATC根据输入的height × width缩放。

3.利用解释和示例

经由章节二得到可以在芯片上运行推理的om模型,基于该推理模型编写的芯片推理代码见docker容器中的/root/yolo目录。

3.1用户手册

1.准备输入图片

#进入docker容器docker exec -it test /bin/bash#切换到/data目录下实行transferPic.py脚本,将.bmp或.jpg转换为.bin,同时将图片分辨率缩放为模型输入所需的640×640。
cd /root/hasi_ss928/yolo/data python ../script/transferPic.py 5

2.编译推理代码

#修正src/sample_process.cpp中的配置模型、bin文件默认路径#交叉编译代码,并在板载端运行mkdir build & cd build cmake .. & make -j4 #天生的可实行文件在./out下

3.芯片实行推理

#将二进制可实行文件上传到板载芯片中chmod +x ${PATH}/out/main ./main 5 //yolov5 #天生的结果.txt在./out中

4.推理结果可视化

#将结果文件复制到开拓环境(docker容器环境)中的/root/hasi_ss928/yolo/out目录下 cd /root/hasi_ss928/yolo/out/ #实行画框指令 python ../script/drawbox.py -i ../data/dog_bike_car.jpg -t yolov5_detResult.txt

3.2示例代码和测试数据

示例代码及测试数据均在文件夹/root/hasi_ss928/yolo中,请按照a中供应步骤测试全体推理流程。

代码链接: https://pan.baidu.com/s/1d7JzEsJA6b5TwQmQi0ow1w?pwd=scj4

提取码: scj4

4.问题排查和故障打消

问题1:

办理方案:共享库路径加入环境变量中后运行source ~/.bashrc指令

问题2:

办理方案:未加载接口驱动文件,加载驱动

rmmod /ko/ot.pqp.koinsmod /ko/svp_npu/ot_svp_npu.ko

详细内容见易百纳技能社区

文章来源:海思SS928(SD3403)主控平台迁移YOLOv5-YOLOv7步骤详解_专栏_易百纳技能社区

标签:

相关文章

JLINK调试STM32F373_测试_电路

一、序言  前天制作的 STM32F373 测试电路板,一贯没有能够通过串口 BOOTLOADER 进行程序下载。后面查看了官方运...

通讯 2025-01-20 阅读0 评论0