用户您好,请详细描述您所遇到的问题:
系统软件版本:x3pi_ubuntu_v1.0.2
使用1.10.7版本OE包进行yolov5脚本进行模型验证、转换、推理
自己训练模型
1. 修改源码进行模型格式转换(pt->onnx)
首先使用YOLOv5-5.0版本的源码进行训练得到自己的模型(best.pt)
yolov5源码中yolo.py修改:(models文件夹下)

修改内容为:x[i] = x[i].permute(0, 2, 3, 1).contiguous()
yolov5源码中export.py修改:(export.py需要放到models文件夹外)
将图片的宽高修改为与地平线已训练好的模型一致的宽高672*672
input_names修改为一致的data
opset=11
修改内容如下:
torch.onnx.export(model, img, f, verbose=False, opset_version=11, input_names=['data'],
model = ct.convert(ts, inputs=[ct.ImageType(name='image', shape=img.shape, scale=1 / 255.0, bias=[0, 0, 0])])
执行结束后源码根目录下会生成一个.onnx的文件

2. 将转换好的onnx模型放至地平线官方的oe包中对应的文件下
使用地平线AI工具链进行模型验证、转换
模型验证:
存放到OE包中下边这个路径即可并修改名字为yolov5s:

在docker环境下运行模型验证工具
运行01_check.sh

执行结束
会给出模型是否可以运行在bpu上。

预处理(准备校准数据)
执行02_preprocess.sh,校准数据图片格式有什么要求吗?尺寸,rgb、bgr,排列顺序
模型转换(构建混合异构.bin模型)
执行03_build.sh,执行完成保存在model_output文件夹下

后处理(模型推理)
转换完成后生成了yolov5s_672x672_nv12_original_float_model.onnx,yolov5s_672x672_nv12_optimized_float_model.onnx,yolov5s_672x672_nv12_quantized_model.onnx,yolov5s_672x672_nv12.bin。分别对应原始浮点ONNX模型、优化后的浮点模型,量化模型和交叉编译后可以直接在开发板上运行的二进制文件量化模型。
工具链中的04_inference.sh可以利用量化后的模型进行单张图片的推断。
在推理过程中报错:
ValueError: cannot reshape array of size 232848 into shape (1,84,84,3,85)

源onnx模型输出

转换完.bin的输出

我们训练的模型百度网盘地址:
链接:https://pan.baidu.com/s/1OENU9T_PFkKB_JsEav8XlA?pwd=etdz
提取码:etdz
我们在进行第四部推理的时候出现上述报错问题。希望能指点一下,需要修改什么地方。同样的我们使用yolov5官方源码的yolov5s.pt模型进行模型转换到第四部模型推理就可以正常使用,两种方式修改内容一致。

