RDK X5 yolov5目标检测之onnx转bin
onnx转bin
1、环境测试
按照前面步骤安装完环境之后,我们需要使用官方例子进行测试一下是否正常,步骤如下
参考:https://developer.d-robotics.cc/forumDetail/107952931390742029,“2.1.2 验证模型”这一步骤
进入yolov5的实例目录
cd horizon_model_convert_sample/04_detection/03_yolov5x/mapper/
如下:

按顺序执行:
./01_check.sh
./02_preprocess.sh
./03_build.sh
./04_inference.sh
如果执行成功,会在目录下生成一个model_output文件夹,转换成功的bin文件就在里面,demo.jpg是预测后的输出图片。

2、修改03_yolov5x工程参数
博主将"03_yolov5x"工程分离出来,并修改了参数,大伙可以自行下载:yolov5_bin.zip
上面工程下载后,进入Docker环境,并扔进去,进入mapper目录,按照01~04编号的顺序执行,就可以看到效果了,里面的py文件都是从 horizon_model_convert_sample 工程里面转移出来的。

demo.jpg效果如下:

模型参数查看网站:https://netron.app

通过上面网站可以看到,我们自己训练的best.onnx文件的尺寸是:1x3x640x640,官方YOLOv5x.onnx的尺寸是:1x3x672x672,这个很重要,我们后面要按照这个进行修改。
修改的内容有点多,下面将一一列举出来。
所有需要迁出的文件和目录如下
[文件] horizon_model_convert_sample/data_preprocess.py
[文件] horizon_model_convert_sample/04_detection/det_evaluate.py
[文件] horizon_model_convert_sample/04_detection/det_inference.py
[文件] horizon_model_convert_sample/01_common/test_data/det_images/kite.jpg
[文件] horizon_model_convert_sample/01_common/model_zoo/mapper/detection/yolov5_onnx_optimized/YOLOv5x.onnx
[目录] horizon_model_convert_sample/01_common/calibration_data/coco
[目录] horizon_model_convert_sample/04_detection/03_yolov5x/mapper

关键修改点如下:(sh文件主要是改路径)
yolov5_bin\mapper\01_check.sh
onnx_model="../onnx_model/best.onnx"
yolov5_bin\mapper\02_preprocess.sh
python3 ../data_preprocess.py \
--src_dir ../coco \
yolov5_bin\mapper\04_inference.sh(我们输出工程的前缀由“yolov5x_672x672_nv12”改成“yolov_best”,不改也没事)
quanti_model_file="./model_output/yolov_best_quantized_model.onnx"
original_model_file="./model_output/yolov_best_original_float_model.onnx"
infer_image="../10.jpg"
python3 -u ../det_inference.py \
yolov5_bin\mapper\05_evaluate.sh(这个脚本没执行过,也蛮改一下吧)
quanti_model_file="./model_output/yolov_best_quantize
original_model_file="./model_output/yolov_best_original_float_model.onnx"
image_path="../data/coco/coco_val2017/images/"
anno_path="../data/coco/coco_val2017/annotations/instances_val2017.json"
python3 -u ../det_evaluate.py \
yolov5_bin\mapper\coco_classes.names(按照格式,改成我们自己的类型名称即可)
box
E:\AI\yolov5_bin\mapper\coco_metric.py(按照格式,改成我们自己的类型名称即可)
class MSCOCODetMetric(object):
class_names = [
"box"
]
yolov5_bin\mapper\postprocess.py

yolov5_bin\mapper\yolov5x_config.yaml

# 适用BPU架构
# X3
march: "bernoulli2"
# X5
march: "bayes-e"
到这里所有修改就完成了,然后就可以按照01~04的顺序执行脚本,如果没有报错,说明转换与验证都成功了。