yolov8_obb模型转换和部署
1.yolov8_obb pth转换onnx
1.1将yolov8_obb pth转换onnx,并且设置opset=11
1.2将onnx模型转置,例如我的模型输出是1x9x2100转换成1x2100x9,
2.将onnx转换成地平线J5的bin文件
2.1 制作校准集
由于python的yolov8_obb预处理代码如下
我们将03_yolov5x直接拷贝一份重新命名为yolov8_obb,由于03_yolov5x预处理代码和yolov8_obb一样,所以只需要将
改成训练的尺寸就可以,我训练的尺寸是320,所以改成
将02_preprocess.sh中 --src_dir 路径改成训练图片路径,大概100张左右
2.2 获取节点量化敏感度
上一步骤的基础上需要将先执行03_build.sh,需要在yaml配置文件中加入
获取节点示例如下:
2.3 模型转换
将yaml配置文件中model_parameters参数后面加上
yaml配置文件中model_parameters参数后面加上
yaml配置其他参数
运行03_build.sh,上面由于Softmax运行在cpu上,我将该算子运行在BPU上,并且使用了int16量化。
2.4 转换模型结果解析
使用hb_perf yolov8x_320x320_nv12.bin

3. yolov8_obb c++代码的预处理和后处理
3.1 yolov8_obb预处理代码如下:
3.2 yolov8_obb 后处理代码如下:
1.使用int16获取数据
2.使用下面命令查看模型信息
可以看出模型从9补齐到16了。
后处理代码如下,其中输出9含义是cx,cy,width,height,(旋转框中心点x,y,宽、高),类别1置信度,类别2置信度,类别3置信度,类别4置信度,角度。
对齐输出含义就是9后面补齐7个零。
相应的后处理代码如下:
上面的result是经过将旋转框置信度大于0.5的框(中心点x,y,宽、高、角度、置信度)过滤剩下框,接下来就是需要将result经过nms,得到最终的结果,nms代码有很多公开的,我就不提供了。
4.pth推理结果与bin文件推理结果进行对比
pth推理一个旋转框的结果如下:
bin文件旋转框推理结果如下:


