一、RTDETR(u版)流程回顾
一文带你搞定Ultralytics(yolov11版本)中的RTDETR训练以及预测的代码解析和流程分析
二、RTDETR_OBB(u版)细节
1、RTDETRDecoder初始化
#encoder和decoder head部分预测bbox的部分需要修改成直接预测rbbox
self.dec_bbox_head = nn.ModuleList([MLP(hd, hd, 4, num_layers=3) for _ in range(ndl)])
self.dec_bbox_head_obb = nn.ModuleList([MLP(hd, hd, 5, num_layers=3) for _ in range(ndl)])
self.enc_bbox_head = MLP(hd, hd, 4, num_layers=3)
self.enc_bbox_head_obb = MLP(hd, hd, 5, num_layers=3)
2、构建obb去噪组get_cdn_group_obb
下图是rtdetr预测矩形框的去噪组,去噪组分为正样本和负样本。
正样本在gt的基础上加上了原gt的0-h/2和0-w/2的扰动。负样本加上了原gt的h/2-h和w/2-h的扰动。具体值也可调参。
旋转框只需要在gt的wh基础上额外加上一个角度theta的扰动即可。
3、替换loss
所有计算bbox的loss替换成计算rbbox的probiou。(ps:匈牙利匹配里的计算bbox_iou也要替换成probiou来计算rbbox_iou)
if self.use_obb:
loss[name_giou] = 1.0 - probiou(pred_bboxes, gt_bboxes)
else:
loss[name_giou] = 1.0 - bbox_iou(pred_bboxes, gt_bboxes, xywh=True, GIoU=True)