整合了多方资料,作为流程补充
部署流程仅作参考,请多方参考寻找适合自己环境的部署方法,有问题还请斧正
1.YOLOv5本地部署训练自建数据集
用的是YOLO格式的数据集,
标注采用labelimg
环境配置
anaconda python 3.8.19
cuda:12.4
显卡:3060 laptop 6g
驱动版本551.76
1 2 3 4
| git clone https://github.com/ultralytics/yolov5 cd yolov5 pip install -r requirements.txt pip install onnx
|
安装完成后,建议删除cpu版本的pytorch,使用gpu版本,训练会快一点
1 2
| pip uninstall torch pip uninstall torchvision
|
以下为GPU版本的pytorch安装,安装前请检查cuda版本是否适配
1
| pip install torch==2.1.1 torchvision==0.16.1 torchaudio==2.1.1 --index-url https://download.pytorch.org/whl/cu121
|
装完打开yolo5文件夹内train.py
滑到最下面改一下目录,运行即可开始训练
训练参数没动过,有需求的话可以调,保证weights,cfg,data地址对就行
具体参数其他帖子有解释了,这里不过多赘述
使用export.py将.pt文件转为.onnx
图像尺寸注意改为224 320 没试过其他尺寸,有兴趣可以试试
通过网址输入 netron.app 查看.onnx模型的三个输出
这里可能每个模型都不一样,后面模型量化时候需要用
如下,这是我自定义数据集训练模型的输出
1 2 3
| /model.24/m.0/Conv_output_0 /model.24/m.1/Conv_output_0 /model.24/m.2/Conv_output_0
|
2.Docker环境配置
接下来就需要在docker容器里进行操作了
TPU-MLIR需要在Docker环境开发,可以直接下载docker镜像(速度比较慢),参考如下命令:
1
| docker pull sophgo/tpuc_dev:latest
|
或者可以从【TPU工具链工具包】中下载的docker镜像(速度比较快),然后进行加载docker
1
| docker load -i docker_tpuc_dev_v3.2.tar.gz
|
离线包下载地址,可以用winscp下载
1 2 3
| sftp://218.17.249.213 username: cvitek_mlir_2023 password: 7&2Wd%cu5k
|
如果是首次使用Docker,可以执行下述命令进行安装和配置(仅首次执行):
1 2 3 4 5 6
| sudo apt install docker.io sudo systemctl start docker sudo systemctl enable docker sudo groupadd docker sudo usermod -aG docker $USER newgrp docker
|
【进入docker环境】 确保安装包在当前目录,然后在当前目录创建容器如下:
1
| docker run --privileged --name MYNAME -v $PWD:/workspace -it sophgo/tpuc_dev:latest
|
MYNAME 是容器名字,自己自定义就可以
3.TPU-MLIR量化环境搭建
1 2 3
| https://github.com/sophgo/tpu-mlir/releases/tag/v1.7 上面网址下载 tpu-mlir-resource.tar 和 tpu_mlir-1.7-py3-none-any.whl
|
放在你进容器时候所在的文件夹
1 2 3
| pip install tpu_mlir-1.7-py3-none-any.whl 安装它的全部依赖 pip install tpu_mlir-1.7-py3-none-any.whl[all]
|
再新建一个文件夹用来存放测试图片和onnx模型
然后就可以开始量化模型了
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| 执行下面命令ONNX 转 MLIR(记得output_names换为自己模型的输出,文件位置也需要根据自己情况来) model_transform \ --model_name yolov5s \ --model_def num1.onnx \ --input_shapes [[1,3,224,320]] \ --mean 0.0,0.0,0.0 \ --scale 0.0039216,0.0039216,0.0039216 \ --keep_aspect_ratio \ --pixel_format rgb \ --output_names /model.24/m.0/Conv_output_0,/model.24/m.1/Conv_output_0,/model.24/m.2/Conv_output_0 \ --test_input images/num.png \ --test_result yolov5s_top_outputs.npz \ --mlir yolov5s.mlir
执行下面命令MLIR 转 INT8 模型,转 INT8 模型前需要跑 calibration, 得到校准表 run_calibration.py yolov5s.mlir \ --dataset images \ --input_num 100 \ -o yolov5s_cali_table
接着执行下面 model_deploy \ --mlir yolov5s.mlir \ --quantize INT8 \ --calibration_table yolov5s_cali_table \ --processor cv181x \ --test_input yolov5s_in_f32.npz \ --test_reference yolov5s_top_outputs.npz \ --tolerance 0.85,0.45 \ --model yolov5s_cv181x_int8_sym.cvimodel
|
yolov5s_cv181x_int8_sym.cvimodel
这是我们需要的模型
4.模型测试
yolov5s_num1.mud内容如下,各位别忘了改label跟model名字
1 2 3 4 5 6 7 8 9 10 11
| [basic] type = cvimodel model = yolov5s_num1_cv181x_int8_sym.cvimodel
[extra] model_type = yolov5 input_type = rgb mean = 0, 0, 0 scale = 0.00392156862745098, 0.00392156862745098, 0.00392156862745098 anchors = 10,13, 16,30, 33,23, 30,61, 62,45, 59,119, 116,90, 156,198, 373,326 labels = one,two,three,four,five,six,seven,eight,nine,zero
|
运行代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| from maix import camera, display, image, nn, app
detector = nn.YOLOv5(model="/root/models/yolov5s_num1.mud") cam = camera.Camera(detector.input_width(), detector.input_height(), detector.input_format()) dis = display.Display() print("www") print(detector.input_width(),detector.input_height(), detector.input_format())
while not app.need_exit(): img = cam.read() objs = detector.detect(img, conf_th = 0.5, iou_th = 0.45) for obj in objs: img.draw_rect(obj.x, obj.y, obj.w, obj.h, color = image.COLOR_RED) msg = f'{detector.labels[obj.class_id]}: {obj.score:.2f}' img.draw_string(obj.x, obj.y, msg, color = image.COLOR_RED) dis.show(img)
|
连接cam跟电脑,把cvmodel和mud上传到/root/models/ 路径下
实机运行如图
感觉可玩性很高啊,等期末考完猛猛把玩一手
部分参考资料:
MaixPy 自定义(离线训练) AI 模型和运行
CV18xx芯片使用指南
yolov5编译ONNX模型
通用yolov5模型部署
利用tpu-mlir工具将深度学习算法模型转成算能科技平台.bmodel模型的方法步骤
量化与量化调优
Yolov5 Detection On Milk-v Duo
CV181x/180x ISP 调试经验总结