tpu使用
- tpu-yolov5
- 环境ubuntu 20.04
安装conda
-
从清华源下载
-
环境配置
- export PATH=“/home/用户/software/anaconda3/bin”:$PATH
- source /home/用户/software/anaconda3/bin/activate
- conda activate duotpu2
-
配置pytorch环境
- conda create --name duotpu python=3.9.0
- conda install pytorch==1.12.1 torchvision==0.13.1 torchaudio==0.12.1 cpuonly -c pytorch
- 修改其中文件:
- ./lib/python3.9/site-packages/torch/nn/modules/upsampling.py
-
yolov5-master
- 下载yolov5-master仓库
- pip3 install --user -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
-
运行脚本main.py转化
import torch from models.experimental import attempt_download model = torch.load(attempt_download("./yolov5n.pt"),map_location=torch.device('cpu'))['model'].float() model.eval() model.model[-1].export = True torch.jit.trace(model, torch.rand(1, 3, 640, 640), strict=False).save('./yolov5n_jit.pt')
docker
-
非22.04的用户必须要拉docker才行了
-
创建
- 拉取docker镜像
- docker run --privileged --name sophgo_cv -it sophgo/tpuc_dev:v3.1
- 启动docker
- 拉取tpu-mlir仓库
https://hub.gitmirror.com/https://github.com/milkv-duo/tpu-mlir.git - source env.sh
- 创建transform文件夹,把yolov5n_jit.pt和tpu-mlir项目里面的dog.jpg拷贝进取(我尝试用640x640的图片代替,但发现转化失败,貌似只有dog.jpg可以)
- 创建三个命令的py脚本,执行后就转化出 yolov5n_int8_fuse.cvimodel 文件
#!/bin/bash # TORCH 模型转换成 MLIR model_transform.py \ --model_name yolov5n \ --model_def ./yolov5n_jit.pt \ --input_shapes [[1,3,640,640]] \ --pixel_format "rgb" \ --keep_aspect_ratio \ --mean 0,0,0 \ --scale 0.0039216,0.0039216,0.0039216 \ --test_input ./dog.jpg \ --test_result yolov5n_top_outputs.npz \ --output_names 1219,1234,1249 \ --mlir yolov5n.mlir # 生成量化需要的校准表 run_calibration.py yolov5n.mlir \ --dataset ../regression/dataset/COCO2017 \ --input_num 100 \ -o ./yolov5n_cali_table #MLIR 量化成 INT8 非对称 cvimodel model_deploy.py \ --mlir yolov5n.mlir \ --quantize INT8 \ --calibration_table ./yolov5n_cali_table \ --chip cv180x \ --test_input ./dog.jpg \ --test_reference yolov5n_top_outputs.npz \ --compare_all \ --tolerance 0.96,0.72 \ --fuse_preprocess \ --debug \ --model yolov5n_int8_fuse.cvimodel
- 拉取docker镜像
-
板件中运行
- 拉取tpu-mlir仓库
https://hub.gitmirror.com/https://github.com/milkv-duo/tpu-mlir.git - scp拷贝tpu-mlir和待识别图片(这时候就是640x640的图片也可以了)到开发板
- chmod赋予权限后,source ./envs_tpu_sdk.sh
- 创建执行脚本
../samples/samples_extra/bin/cvi_sample_detector_yolo_v5_fused_preprocess \ ./yolov5n_int8_fuse.cvimodel ./bus.jpg bus_out.jpg
- sh test.sh
- 查看效果
- 拉取tpu-mlir仓库
-
查了一圈,貌似目前还没有tpu调用的源码级接口放出来,给出来的都是可执行文件,期待像rknn那样有python和C++的接口