尝试基于TDL SDK的YOLOv5 目标检测

尝试基于TDL SDK的YOLOv5 目标检测

分享下自己的过程和遇到的问题

1.TDL SDK环境搭建

1.1 编译

下载工具链

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

git clone https://github.com/milkv-duo/cvitek-tdl-sdk-sg200x.git
cd cvitek-tdl-sdk-sg200x

编译

cd sample
./compile_sample.sh


生成的示例程序位于相应的子目录中

2.YOLOv5 目标检测

2.1 PC 端交叉编译 YOLO 程序

打开cvitek-tdl-sdk-sg200x/sample/cvi_yolo目录

cd cvitek-tdl-sdk-sg200x/sample/cvi_yolo

编译yolo系列程序得到sample_yolov5二进制文件

make KERNEL_ROOT=../../../cvitek-tdl-sdk-sg200x/sample MW_PATH=../../../cvitek-tdl-sdk-sg200x/sample/3rd/middleware/v2 TPU_PATH=../../../cvitek-tdl-sdk-sg200x/sample/3rd/tpu IVE_PATH=../../../cvitek-tdl-sdk-sg200x/sample/3rd/ive USE_TPU_IVE=ON CHIP=CV180X SDK_VER=musl_riscv64 -j10

2.2 下载预编译好的 cvimodel

# int8 对称模型
wget https://github.com/milkv-duo/cvitek-tdl-sdk-sg200x/blob/main/cvimodel/yolov5_cv181x_int8_sym.cvimodel
# int8 非对称模型
wget https://github.com/milkv-duo/cvitek-tdl-sdk-sg200x/blob/main/cvimodel/yolov5_cv181x_int8_asym.cvimodel

image

2.3 板端推理

把将编译好的 sample_yolov5、cvimodel、要推理的 jpg 图片,拷贝到duo

scp sample_yolov5 yolov5_cv181x_int8_asym.cvimodel 000000000113.jpg root@192.168.42.1:/root/

执行二进制程序

export LD_LIBRARY_PATH='/mnt/system/lib'
./sample_yolov5 ./yolov5_cv181x_int8_sym.cvimodel 000000000113.jpg

image
此时出现问题,解决方式如下:

将cvi_yolo文件夹下面的Makefile文件里面第52-54行按如下替换

CROSS_COMPILE = $(CROSS_COMPILE_RISCV64_MUSL)
CFLAGS += -march=rv64imafd
LDFLAGS = -mcpu=c906fdv

替换为

CROSS_COMPILE = $(CROSS_COMPILE_RISCV64_MUSL)
CFLAGS += -mcpu=c906fdv -march=rv64imafdcv0p7xthead -mcmodel=medany -mabi=lp64d

make clean 后重新编译即可