赞
踩
建议自己编译images固件,我使用官方给的固件在部署中出现了一些问题,请参考: 编译Milkv-duo固件-CSDN博客
git clone https://github.com/ultralytics/ultralytics.git
下载链接:链接:百度网盘 请输入提取码 提取码:184a
将yolo_export/yolov8_export.py 代码复制到 yolov8 仓库下,下载YOLOv8的权重文件: https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8n.pt
然后使用以下命令导出分支版本的 onnx 模型:
python yolov8_export.py --weights ./weights/yolov8n.pt
运行上述代码之后,可以在./weights/目录下得到 yolov8n.onnx 文件。
请参考:在Milk-V Duo上部署MobileNetV2_mobilenetv2 部署-CSDN博客
docker run -it 镜像名字 /bin/bash //创建并拉取镜像
若已有Docker环境,则使用docker ps 列出所有镜像,并使用以下命令进入Docker环境(一定要先运行Docker客户端)
docker pull sophgo/tpuc_dev:v3.1 //拉取镜像
在Docker环境中创建名为workpace的文件夹,在该文件夹下面创建yolov8n文件夹,将yolov8n.onnx通过以下命令将其传送到Docker的yolov8n文件夹下
- 复制文件到容器:使用docker cp <path>/文件 容器id:/目标路径将文件从主机复制到容器。
- 复制文件从容器:使用docker cp 容器id:/容器内路径 <path>/文件将文件从容器复制到主机。
- 例如:
- docker cp funny_noyce:/workspace/cvitek_tdl_sdk.tar C:\Users\xuankui\Desktop\
- docker cp funny_noyce:/workspace/tpu-mlir C:\Users\xuankui\Desktop\
下载链接:链接:百度网盘 请输入提取码 提取码:5fht(git clone GitHub - milkv-duo/tpu-mlir: TPU-MLIR model conversion tool),将其发送到/workspace,并设置环境变量:
source tpu-mlir/envsetup.sh
- cp -rf $TPUC_ROOT/regression/dataset/COCO2017 .
- cp -rf $TPUC_ROOT/regression/image .
转换模型需要在指定的 docker 执行,主要的步骤可以分为两步:
如果需要转换为 INT8 模型,还需要在第二步之前调用 run_calibration.py 生成校准表,然后传给 model_deploy.py
- model_transform.py \
- --model_name yolov8n \
- --model_def yolov8n.onnx \
- --input_shapes [[1,3,640,640]] \
- --mean 0.0,0.0,0.0 \
- --scale 0.0039216,0.0039216,0.0039216 \
- --keep_aspect_ratio \
- --pixel_format rgb \
- --test_input ./dog.jpg \
- --test_result yolov8n_top_outputs.npz \
- --mlir yolov8n.mlir
转 INT8 模型前需要跑 calibration,得到校准表;输入数据的数量根据情况准备 100~1000 张左右。然后用校准表,生成 cvimodel。生成校对表的图片尽可能和训练数据分布相似。这个数据集从COCO2017提取100来做校准,用其他图片也是可以的。
- run_calibration.py yolov8n.mlir \
- --dataset COCO2017 \
- --input_num 100 \
- -o yolov8n_cali_table
运行完成之后会生成名为 yolov8n_cali_table 的文件,该文件用于后续编译 cvimode 模型的输入文件。然后生成 int8 对称量化 cvimodel 模型,执行如下命令:
- model_deploy.py \
- --mlir yolov8n.mlir \
- --quant_input \
- --quant_output \
- --quantize INT8 \
- --calibration_table yolov8n_cali_table \
- --chip cv180x \
- --model yolov8n_cv180x_int8_sym.cvimodel \
- --test_input yolov8n_in_f32.npz \
- --test_reference yolov8n_top_outputs.npz \
- --tolerance 0.85,0.45
其中–quant_output 参数表示将输出层也量化为 int8,不添加该参数则保留输出层为float32。从后续测试结果来说,将输出层量化为 int8,可以减少部分 ion,并提高推理速度,并且模型检测精度基本没有下降,推荐添加–quant_output 参数。在上述步骤运行成功之后,我们就获得了我们量化好的yolov8n_cv180x_int8_sym.cvimodel模型。
首先使用以下命令获取交叉编译工具
- wget https://sophon-file.sophon.cn/sophon-prod-s3/drive/23/03/07/16/host-tools.tar.gz
- tar xvf host-tools.tar.gz
- cd host-tools
- export PATH=$PATH:$(pwd)/gcc/riscv64-linux-musl-x86_64/bin
下载cvitek_tdl_sdk并将其发送到/workspace下,下载链接:链接:链接:百度网盘 请输入提取码 提取码:ltro,进入到cvitek_tdl_sdk下的sample目录下。
- chmod 777 compile_sample.sh
- ./compile_sample.sh
通过nfs或者ssh的方式将cvitek_tdl_sdk(可以压缩一下,可能在传输过程中会有文件丢失)、yolov8n_cv180x_int8_sym.cvimodel以及一张测试图像传输到开发板的/mnt目录下。
首先,我们需要配置我们开发板的环境变量,此命令在milkv-duo重启后需要再次执行
- export LD_LIBRARY_PATH=/mnt/cvitek_tdl_sdk/lib:\
- /mnt/cvitek_tdl_sdk/sample/3rd/opencv/lib:\
- /mnt/cvitek_tdl_sdk/sample/3rd/tpu/lib:\
- /mnt/cvitek_tdl_sdk/sample/3rd/ive/lib:\
- /mnt/cvitek_tdl_sdk/sample/3rd/middleware/v2/lib:\
- /mnt/cvitek_tdl_sdk/sample/3rd/lib:\
- /mnt/cvitek_tdl_sdk/sample/3rd/middleware/v2/lib/3rd:
cd /mnt/cvitek_tdl_sdk/bin
输入以下命令,看到如下推理结果,就说明模型部署成功。
./sample_yolov8 /mnt/yolov8n_cv180x_int8_sym.cvimodel /mnt/dog.jpg
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。