yolov8_seg
dev1
0. 文件结构说明
AI部署模型需要以下几部分文件
- 0_yolov8_seg >模型原始工程,需要自行下载
- weights >存放原始权重,需要自行下载
- 1_scripts >若干脚本,用于保存AI编译器需要的模型、编译后仿真等功能
- 2_compile >AI编译器编译模型时所需要的文件
- 3_deploy >将AI编译器编译出的模型部署到硬件时需要的c++工程
1. python工程准备
1. 模型来源:
- code:https://github.com/ultralytics/ultralytics.git
- branch:main
- commit_id:437b430
- weights:https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8s-seg.pt
2. 保存模型
目的:将模型保存成可以被AI编译器编译的形态
1)根据模型来源中的地址:https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8s-seg.pt ,下载原始weights,存放于 /weights文件夹中
2)根据模型来源中的地址,下载指定commit id版本的源代码,文件夹名称要设置为:0_yolov8_seg
# 在此模型根目录
mkdir 0_yolov8_seg
git clone -b main https://github.com/ultralytics/ultralytics.git 0_yolov8_seg
cd 0_yolov8_seg
git checkout 437b430
3)进入1_scripts执行保存模型脚本
# 在此模型根目录
cd 1_scripts
python 1_save.py
1_scripts提供脚本说明:
-
环境要求:AI compiler对导出框架模型时使用的框架版本有要求。既以下脚本中所有导出模型的脚本
1_save.py,必须在要求的框架版本下执行,其他脚本不限制。要求的版本:- pytorch:1.9
- paddle: 2.3.2
- onnx: opset11
- darknet: GitHub - pjreddie/darknet: Convolutional Neural Networks
-
0_infer.py >可以推理一张图并得到最终结果,模型原始权重会从
/weights中寻找,需要您预先下载 -
1_save.py >保存模型,保存好的用于AI编译器的模型,会存放在
/2_compile/fmodel保存模型时的修改点:
- 导出模型到卷积为止
- 2_save_infer.py >用修改后保存的模型做前向推理,验证保存的模型与原模型是否一致
2.使用AI编译器编译模型
目的: 使用Icraft AI编译器将上一步保存好的框架模型转化为硬件可部署模型
-
1)相关命名说明:
1)fmodel:frame model >用于ai编译器的框架模型
2)imodel:icraft model >用icraft编译出的模型
3)qtset:Quantitative Calibration Set >量化校准集
-
2)确认已安装正确的icraft版本
检查方法:打开cmd运行:
icraft --version若已正常安装则会显示当前icraft版本,例如:
Icraft 版本: * 3.1.0 CLI 版本: 2.0.0.0-ce96a5d(2401311212) -
3)执行编译:
-
下载量化校准集
cd 2_compile/qtset #window,第一次使用,请新建"C:\icraft_auth.txt",保存下载站账号密码,以换行符分割 python download.py #linux,第一次使用,请新建"/usr/icraft_auth.txt",保存下载站账号密码,以换行符分割 ./download.sh
-
在
/2_compile目录下执行编译:icraft compile config/yolov8s_seg_8.toml # psin # 若要部署plin工程则编译对应的plin模型
icraft compile config/yolov8s_seg_8_plin.toml # plin
如果过程顺利,将得到 icraft model(以 `.json` (graph)`.raw`(param)的格式保存) 其中包括编译各阶段产生的中间结果模型和最终用于片上部署的BY模型,直接被保存到: 3_deploy/modelzoo/yolov8_seg/imodel -
3. 仿真
通过配置3_deploy/modelzoo/yolov8_seg/cfg/中yaml文件的sim字段为True实现模型仿真。
imodel:
...
sim: true
...
4. 部署模型
目的:编译c/c++可执行程序,在AI硬件上执行模型前向推理
模型库以ubuntu操作系统为例:
-
编译环境准备
- os: ubuntu20.04
- cmake>=3.10
- compiler: aarch64-linux-gnu-g++/aarch64-linux-gnu-gcc
-
版本依赖下载
此依赖主要包括icraft 运行时以及一些其他c++依赖例如opencv等,用于实现模型的部署。如果此前已经存在此版本的依赖可以不必重新下载。
cd 3_deploy/Deps #window,第一次使用,请新建"C:\icraft_auth.txt",保存下载站账号密码,以换行符分割 python download.py #linux,第一次使用,请新建"/usr/icraft_auth.txt",保存下载站账号密码,以换行符分割 ./download.sh
-
编译c++程序
#在3.1所需的linux编译环境中 # 通过修改CMakeLists中的工程命名和对应的src cpp代码可以编译不同数据流的上板程序 # 例如:修改CMakeLists使其编译pin工程 # set(TARGET_NAME yolov8s_seg_plin) # add_executable(${TARGET_NAME} src/${TARGET_NAME}.cpp) cd 3_deploy/modelzoo/yolov8_seg/build_arm cmake .. make -j
-
输入输出准备
进入
3_deploy/modelzoo/yolov8_seg/io,执行下载脚本(方法同3.2),下载模型输入输出文件(输出文件可以先做备份,用于确认推理正确) -
部署环境检查
- 以root账户登录片上系统terminal(ssh或串口皆可),模型库默认的模型存放路径为以下目录,如果没有请预先创建:
/home/fmsh/ModelZoo/
-
将3_deploy中所有文件夹复制到以上目录中(如果Deps中已经存在相同版本的依赖则可以不必再复制)
-
检查icraft和customop的环境配置是否正确
#检查icraft环境配置 echo $LD_LIBRARY_PATH #检查customop环境配置 echo $ICRAFT_CUSTOM_DIR
- 如果环境配置正确,则会依次显示对应路径,如:
/opt/Icraft/CLIv3.1.0/lib/ /opt/Icraft/CustomOp_v3.1.0/
- 如果环境配置有误,请参考3.1板上系统编译环境准备进行部署环境配置。
-
执行程序
cd /home/fmsh/ModelZoo/modelzoo/yolov8_seg/build_arm chmod 777 * ./yolov8s_seg_psin ../cfg/yolov8s_seg_psin.yaml # psin ./yolov8s_seg_plin ../cfg/yolov8s_seg_plin.yaml # plin
在io/output中查看结果
注意若执行plin工程则需要在开发板上接摄像头,若需要显示则需要外接显示器,查看推理结果
5. 精度测试
1. 环境准备
若已准备好环境请跳过此部分
1. 网口调试环境准备(如果已经准备好网口调试环境则看下一条)
-
安装ssh
-
查看或配置板子ip
- 使用串口连接板子
vim /etc/rc.local- 查看或设置ip
#!/bin/bash ifconfig eth0 192.168.125.171 netmask 255.255.255.0 systemctl start sshd
-
修改本地网络适配器配置
参考配置
- ipv4地址:
192.168.125.2 - 子网掩码:
255.255.255.0 - 默认网关:
192.168.125.1 - 连接速度与双工:100mbps全双工
- ipv4地址:
-
使用网口或串口进入板上系统打开server
上位机:
ssh root@192.168.125.171
板上: 确保位于root账户下,执行:
icraft serve- 请确保在root账户下执行上述命令
- 设备成功打开示意图
root@U:~# icraft serve [02/22/24 02:02:00.388] [I] Using port : 9981 [02/22/24 02:02:00.388] [I] synchronous mode [02/22/24 02:02:00.388] [I] [irpc::port::tcp::_waitNewConn] wait for new connection
如果能正确运行则可以继续下一步。
2.编译环境准备
请参考2.1Windows编译环境准备进行精度测试环境配置。
-
os: windows
3.版本依赖下载
此依赖主要包括icraft 运行时以及一些其他c++依赖例如opencv等,用于实现模型的部署。如果此前已经存在此版本的依赖可以不必重新下载。
cd 3_deploy/Deps
#window,第一次使用,请新建"C:\icraft_auth.txt",保存下载站账号密码,以换行符分割
python download.py
#linux,第一次使用,请新建"/usr/icraft_auth.txt",保存下载站账号密码,以换行符分割
./download.sh
2. 测试说明
-
如果使用了icorepost硬算子(如果未使用则忽略此条)
-
1)修改customop toml customop toml 既 config\customop\xxmodel.toml
需要将该文件中的
thr_f配置成0.001[ImageMake] no_imkpad = 0 [DetPost] thr_f = 0.001 # 阈值 cmp_en = 1 # 是否做阈值比较 groups = 3 anchor_num = 3 position = 5
-
2)重新进行模型编译
icraft compile config/yolov8s_seg_8.toml
由于测精度程序由上位机控制,生成的imodel不用再复制到板子中
-
-
数据集准备
- 测试数据集下载:coco2017val
- 模型测试使用COCO2017数据集的Val部分,测试图片存放于
3_deploy\modelzoo\yolov5_7.0\io\input及3_deploy\modelzoo\yolov5_7.0\io\cocoval_2017.txt中 - 如需测试其他数据集,需自行将图片存放于
3_deploy\modelzoo\yolov5_7.0\io\input,并准备对应的input.txt
-
修改 运行时的yaml配置文件:
运行时需要配置一些模型路径,输入数据,后处理参数等,其配置文件在
3_deploy/modelzoo/yolov8_seg/cfg/测试时使用:
yolov8s_seg_test.yaml需要修改:
- path中参数:根据所使用板子ip设置url_win,更改自己的dataset精度测试数据集路径。
- params中参数:如果模型没有重训,则无需更改,若 重训则需要修改对应部分参数。
-
编译、执行运行时程序
cd 3_deploy/modelzoo/yolov8_seg mkdir build_win cd build_win cmake .. cmake --build . --config Release ./Release/yolov8s_seg_psin.exe ../cfg/yolov8s_seg_test.yaml
注意:如果使用visualstudio打开sln进行调试,需要右键工程-属性-调试-环境中配置
./Release/yolov8s_seg_psin.exe ../cfg/yolov8s_seg_test.yaml -
使用metrics测试脚本,将保存的测试结果计算出精度指标
-
metrics测试脚本使用与配置说明:
需要配置
parser.add_argument('--txtDir', required=True, help='onboard txt results path') #txtDir即上述,res:精度测试结果保存路径 parser.add_argument('--dtJson', required=True, help='txt save to json path') #txt转为json后文件的保存路径及json文件命名,会自动生成,但需要配置 -
6. 模型性能记录
| yolov8_seg | input shape | hard time | qt_strategy | 精度 |
|---|---|---|---|---|
| float | [1, 3, 640, 640] | - | - | ap50-95(box):0.446 |
| int8 | [1, 3, 640, 640] | 9.71 ms | None | None |
| int16 | [1, 3, 640, 640] | 22.29 ms | None | None |