将yolov8项目修改为yolov8_obb项目需要修改模型结构(增加角度预测)、dataloader(使其支持dota格式数据)、修改TaskAlignedAssigner(使其支持带角度的bbox)、修改loss(新增对角度的训练)、修改metric(将hbb指标titile修改为obb)、修改绘图代码(使其能绘制旋转框)。
目前yolov8官方团队已经发布了支持obb的检测,博主于8个月前所实现的obb没有任何战略价值。为此分享博主过往将将yolov8项目修改为正框模型的操作过程。从正框模型到旋转框模型,首先要调整的是网络结构,然后是dataloader,再是锚框分配机制,最后是nms机制。此外,还有项目附属的train、val、绘图展示等代码需要修改。针对于最新版本yolov8项目,本博文没有任何实际价值(本博文使用的是cls方式的旋转角度预测【对flop基本没有影响】,不清楚官网是如何实现的将flop翻了三倍
)。仅是分享yolov8_obb的实现方法。
1、主体修改
主要是将模型结构修改为支持角度输出,dataloader支持加载旋转框数据,然后在loss上支持角度的反向传播。
1.1 模型结构修改
yolov8的输出,也就是head层,在具体实现上叫Detect类,代码在modules.py中,将其修改为以下形式.
原始代码如下,由cv2和cv2分别输出