YOLOv5船舶目标检测|多骨干网络+注意力模块改进对比,卫星遥感船舶识别实战
前言
最近在做遥感图像船舶检测任务,数据集是自己整理的遥感海面船舶切片,训练集1731张,验证集433张。遥感场景做船舶检测难点挺多:海面波纹干扰、光照变化、船舶尺度差异大,还有云雾遮挡,小目标船舶很容易漏检。
一开始直接跑原生YOLOv5,效果不算差,但想看看不同骨干网络、不同模块对遥感船舶这个场景到底能带来多大提升,于是挨个替换backbone,也尝试了C2f、SE注意力这些模块,做了一组对照实验,把踩坑记录和结果整理出来。
数据集划分:train:1731,val:433,类别只有ship一类,遥感卫星图像,图片里船舶大多是细长条状小目标,背景是海面,部分样本带有云、海浪杂波干扰。
一、实验方案
基于YOLOv5s源码进行改造,保持训练参数、数据集、输入分辨率完全一致,只改动网络结构,控制变量对比:
- 原生YOLOv5(baseline基准)
- YOLOv5 + EfficientNet骨干
- YOLOv5 + GhostNet骨干
- YOLOv5 + MobileNet骨干
- YOLOv5 + Swin-Transformer骨干
- YOLOv5 + VGG骨干
- YOLOv5 + ResNet骨干
- YOLOv5 + ShuffleNet骨干
- YOLOv5 添加C2f模块
- YOLOv5 添加SE注意力机制模块
训练配置统一设置:
- 输入尺寸:640×640
- 批次大小batch-size:8
- 迭代轮次epochs:100
- 优化器Adam,学习率采用YOLOv5默认的余弦退火策略
- 数据集做了基础增强:随机翻转、缩放、马赛克增强,适配遥感图像
二、遥感船舶检测难点分析
遥感图像里的船舶和日常摄像头里的目标完全不一样:
- 目标是细长小目标,占整张图像素占比很低,特征弱;
- 海面纹理复杂,波浪、海水色差很容易和船舶混淆,造成大量误检;
- 部分图片存在云雾遮挡,目标局部被覆盖,特征残缺;
- 船舶朝向任意,角度多变,横向、斜向都有。
原生YOLOv5的CSPDarknet骨干在普通实景图效果很好,但对遥感小目标,特征提取能力还有优化空间,这也是我做多种骨干替换的原因。
三、各方案实验结果与分析
这里只说我实际跑出来的直观感受,mAP、召回率这些指标可以根据自己实验数据填充。
原生YOLOv5 baseline
作为对照组,基础模型,推理速度快,但是云雾场景、极小船舶漏检偏多,海面杂波带来少量误检,mAP作为基准。GhostNet / MobileNet / ShuffleNet 轻量骨干
这三个都是轻量化网络,参数量、计算量明显下降,推理速度更快。
适合后续部署到嵌入式设备。但是代价很明显:特征提取能力下降,遥感小船舶mAP会掉一点。
适合场景:需要端侧部署,对速度优先,精度要求不是极致的场景。GhostNet在三者里精度损失最小。
ResNet、VGG、EfficientNet
ResNet的特征提取能力更强,对复杂海面背景鲁棒性更好,mAP相比baseline有小幅上涨,模型参数量会变大,训练时间更长。
VGG结构简单,但参数量巨大,收敛慢,效果不如ResNet,不太推荐遥感小目标场景。
EfficientNet依靠复合缩放策略,在精度和参数量之间平衡不错,对比原生骨干有提升,训练稳定性尚可。Swin-Transformer骨干
Swin Transformer基于窗口自注意力,全局信息捕捉能力很强,对海面大范围背景和船舶目标区分效果好,抗云雾干扰能力最强。
缺点非常突出:训练显存占用巨大,训练慢,推理延迟高,对硬件要求高。单纯做船舶检测,如果没有高端显卡,训练成本很高。适合追求高精度,不看重实时推理速度的场景。增加C2f模块
C2f来自YOLOv8,替换YOLOv5原生C3模块。增加更多分支梯度流动,特征融合更充分。
在我的船舶数据集上,mAP有明显提升,小目标召回率提升很明显,同时参数量增加不算夸张,性价比很高。这个改进是我最推荐的。SE注意力模块
SE通道注意力,对特征通道做权重重标定,让网络重点关注船舶有效特征,抑制海面背景无用特征。
加SE之后,误检数量减少,海面波纹带来的虚警少了。但是只加SE提升幅度有限,单独使用不如C2f提升明显。可以考虑C2f+SE组合,进一步优化。
四、踩坑记录(重点)
- 替换骨干网络时,一定要匹配输入的通道数,以及颈部Neck部分的通道维度,很多人直接替换骨干,不修改neck的输入通道,直接报维度错误,这个坑我踩过。
- 遥感数据集小目标多,不要盲目调高输入分辨率,分辨率越高显存占用爆炸,640是我权衡后的选择。
- Swin Transformer替换骨干的时候,预训练权重加载很关键,不加载预训练权重,很难收敛,精度会很差。
- 数据集问题:我这个数据集一共2164张(train1731+val433),属于中小数据集,用Swin这种大模型很容易过拟合,训练到后期验证集mAP不再上涨甚至下降,需要加早停、正则。
- 轻量化骨干在小数据集上更容易欠拟合,精度掉的比大数据集明显。
五、结论
- 如果追求精度优先,不考虑部署速度:YOLOv5+Swin Transformer,抗云雾、小目标检测效果最好,但训练成本高,容易过拟合。
- 如果追求精度和速度平衡,性价比最高:YOLOv5引入C2f模块,或者C2f+SE注意力,是遥感船舶检测首选,提升明显,参数量增加可控。
- 如果需要模型轻量化,嵌入式部署:YOLOv5替换GhostNet骨干,速度快,精度损失相对最小。
- VGG不太推荐用于这个遥感船舶任务,参数量大,收益低。
后续计划:尝试C2f+SE+GhostNet组合,在保证精度的前提下压缩模型,做轻量化遥感船舶检测模型,后续会继续更新实验结果。
结尾
遥感小目标检测本身难度不小,不同骨干网络没有绝对的好坏,要根据你的任务需求(精度、推理速度、部署硬件)选择。
如果你也在做卫星遥感船舶检测,或者YOLOv5骨干替换遇到报错,欢迎在评论区一起交流。
下载连接:https://download.csdn.net/download/qq_44886601/93642909