108、YOLOv8改进实战:旋转框检测头设计——基于角度回归的遥感目标检测改进方案
108、YOLOv8改进实战:旋转框检测头设计——基于角度回归的遥感目标检测改进方案从一次遥感项目的翻车说起去年接了个卫星图像检测的项目,甲方要求检测机场里的飞机朝向。我心想YOLOv8跑水平框不是挺稳的吗?结果一上测试集,两架并排停着的飞机,水平框直接糊成一团,NMS把两个目标当成了一个。更离谱的是,有一架飞机斜着停,水平框把旁边的廊桥都框进去了。甲方看了效果图,直接说“这检测结果没法用”。这就是水平框检测的硬伤——对于长宽比大、密集排列的旋转目标,水平框的冗余区域太大,导致漏检和误检。遥感图像里这种情况比比皆是:停车场车辆、港口船只、仓库屋顶,哪个不是带角度的?当时我翻遍了YOLOv8的源码,发现它的检测头压根没有角度分支。没办法,只能自己动手改。这篇文章就记录我当时怎么在YOLOv8上嫁接旋转框检测头的,踩过的坑和最终能用的方案都写出来。旋转框检测的核心矛盾先想清楚一个问题:水平框检测头输出的是(x, y, w, h),旋转框多了一个角度θ。但角度回归有个天然缺陷——周期性问题。0度和180度在几何上是同一个方向,但在数值上差了180。如果网络直接回归角度值,训练时损失函数会在这个边界处剧烈震荡。我一开始天真地用了L1 loss直接回归角度,结果训练到一半loss突然飙升,一看输出,模型在0度附近反复横跳。后来查了文献才知道,这个问题在遥感领域早就被讨论烂了。常见的解法有两种:一是把角度回归改成分类问题,比如把360度离散成180个bin;二是用环形平滑标签,让损失函