课题需要,需要做旋转目标检测,因此尝试了基于Yolov5的旋转目标检测。
数据集地址:https://www.rsaicp.com/portal/contestDetail?id=2&tab=rule
dotav2数据集
分支说明:
该代码是由于自己的课题需要修改的,主要用于学习交流。同时我也还在学习和开发中,因此代码可能并没有很好的整理,如果大家对这份代码感兴趣或者有使用问题欢迎大家跟我交流~
dota转yolov5 rotation 代码说明
cut2rotation.py 代码的旋转框定义方式,x轴顺时针旋转,默认第一条边为w,另外一条边为h。代码转换在图片尺寸长宽不一致的情况下,会转换出错。可参考latest分支中utils/hrsc2016_2_rotation.py进行新的标签转换方式,另外相应的dataset_rotation.py,utils/plots.py等也需要修改。latest分支中已经改过了。 关于opencv定义旋转框的方式,x轴顺时针旋转第一条边为w,另一条边为h,角度为(0,90]。部分版本中,逆时针旋转第一条边为h,另一条边为w,角度为[-90,0),其实定义方式是一致的,区别在于差90°。在代码里做相应的调整即可。
模型性能
做了dota数据集的实验,FPN默认3个stage,即下采样(8,16,32),未使用多尺度训练和测试,单用训练集训练,最终结果dota1 mAP约60,性能不是很好,以下可供参考: yolov5l_rotation:\ mAP: 0.6008265883151498\ ap of each class: plane:0.8764534796039967, baseball-diamond:0.5904322702703031, bridge:0.49038861352180907, ground-track-field:0.48863373753994466, small- vehicle:0.7766348619928898, large-vehicle:0.7069625557468652, ship:0.8429322193652917, tennis-court:0.8672936947004829, basketball-court:0.7419463367516996, storage-tank:0.8493569084547188, soccer-ball-field:0.35651165726395767, roundabout:0.53453295511373, harbor:0.6331742403609525, swimming-pool:0.03336907026438091, helicopter:0.22377622377622378\ 在hrsc2016上用训练集和验证集训练,测试集测试,AP约89.3,性能尚可
其他
针对遥感领域,一阶段模型需要改进的还有很多,此代码仅做了一点表层的改动。本人又一直比较忙于其他事情,未来得及好好整理和改进代码,因此可能会有bug。看到有人关注我的代码还是很开心的,有时间的时候,我会好好整理一下.