第22章:YOLOv5船舶目标检测+注意力模块改进对比,卫星遥感船舶识别实战

YOLOv5船舶目标检测|多骨干网络+注意力模块改进对比,卫星遥感船舶识别实战

前言

最近在做遥感图像船舶检测任务,数据集是自己整理的遥感海面船舶切片,训练集1731张,验证集433张。遥感场景做船舶检测难点挺多:海面波纹干扰、光照变化、船舶尺度差异大,还有云雾遮挡,小目标船舶很容易漏检。

一开始直接跑原生YOLOv5,效果不算差,但想看看不同骨干网络、不同模块对遥感船舶这个场景到底能带来多大提升,于是挨个替换backbone,也尝试了C2f、SE注意力这些模块,做了一组对照实验,把踩坑记录和结果整理出来。

数据集划分:train:1731,val:433,类别只有ship一类,遥感卫星图像,图片里船舶大多是细长条状小目标,背景是海面,部分样本带有云、海浪杂波干扰。

一、实验方案

基于YOLOv5s源码进行改造,保持训练参数、数据集、输入分辨率完全一致,只改动网络结构,控制变量对比:

  1. 原生YOLOv5(baseline基准)
  2. YOLOv5 + EfficientNet骨干
  3. YOLOv5 + GhostNet骨干
  4. YOLOv5 + MobileNet骨干
  5. YOLOv5 + Swin-Transformer骨干
  6. YOLOv5 + VGG骨干
  7. YOLOv5 + ResNet骨干
  8. YOLOv5 + ShuffleNet骨干
  9. YOLOv5 添加C2f模块
  10. YOLOv5 添加SE注意力机制模块

训练配置统一设置:

  • 输入尺寸:640×640
  • 批次大小batch-size:8
  • 迭代轮次epochs:100
  • 优化器Adam,学习率采用YOLOv5默认的余弦退火策略
  • 数据集做了基础增强:随机翻转、缩放、马赛克增强,适配遥感图像

二、遥感船舶检测难点分析

遥感图像里的船舶和日常摄像头里的目标完全不一样:

  1. 目标是细长小目标,占整张图像素占比很低,特征弱;
  2. 海面纹理复杂,波浪、海水色差很容易和船舶混淆,造成大量误检;
  3. 部分图片存在云雾遮挡,目标局部被覆盖,特征残缺;
  4. 船舶朝向任意,角度多变,横向、斜向都有。

原生YOLOv5的CSPDarknet骨干在普通实景图效果很好,但对遥感小目标,特征提取能力还有优化空间,这也是我做多种骨干替换的原因。

三、各方案实验结果与分析

这里只说我实际跑出来的直观感受,mAP、召回率这些指标可以根据自己实验数据填充。

  1. 原生YOLOv5 baseline

    作为对照组,基础模型,推理速度快,但是云雾场景、极小船舶漏检偏多,海面杂波带来少量误检,mAP作为基准。

  2. GhostNet / MobileNet / ShuffleNet 轻量骨干

    这三个都是轻量化网络,参数量、计算量明显下降,推理速度更快。

    适合后续部署到嵌入式设备。但是代价很明显:特征提取能力下降,遥感小船舶mAP会掉一点。

适合场景:需要端侧部署,对速度优先,精度要求不是极致的场景。GhostNet在三者里精度损失最小。

  1. ResNet、VGG、EfficientNet

    ResNet的特征提取能力更强,对复杂海面背景鲁棒性更好,mAP相比baseline有小幅上涨,模型参数量会变大,训练时间更长。

    VGG结构简单,但参数量巨大,收敛慢,效果不如ResNet,不太推荐遥感小目标场景。

    EfficientNet依靠复合缩放策略,在精度和参数量之间平衡不错,对比原生骨干有提升,训练稳定性尚可。

  2. Swin-Transformer骨干

    Swin Transformer基于窗口自注意力,全局信息捕捉能力很强,对海面大范围背景和船舶目标区分效果好,抗云雾干扰能力最强。

    缺点非常突出:训练显存占用巨大,训练慢,推理延迟高,对硬件要求高。单纯做船舶检测,如果没有高端显卡,训练成本很高。适合追求高精度,不看重实时推理速度的场景。

  3. 增加C2f模块

    C2f来自YOLOv8,替换YOLOv5原生C3模块。增加更多分支梯度流动,特征融合更充分。

    在我的船舶数据集上,mAP有明显提升,小目标召回率提升很明显,同时参数量增加不算夸张,性价比很高。这个改进是我最推荐的。

  4. SE注意力模块

    SE通道注意力,对特征通道做权重重标定,让网络重点关注船舶有效特征,抑制海面背景无用特征。

    加SE之后,误检数量减少,海面波纹带来的虚警少了。但是只加SE提升幅度有限,单独使用不如C2f提升明显。可以考虑C2f+SE组合,进一步优化。

四、踩坑记录(重点)

  1. 替换骨干网络时,一定要匹配输入的通道数,以及颈部Neck部分的通道维度,很多人直接替换骨干,不修改neck的输入通道,直接报维度错误,这个坑我踩过。
  2. 遥感数据集小目标多,不要盲目调高输入分辨率,分辨率越高显存占用爆炸,640是我权衡后的选择。
  3. Swin Transformer替换骨干的时候,预训练权重加载很关键,不加载预训练权重,很难收敛,精度会很差。
  4. 数据集问题:我这个数据集一共2164张(train1731+val433),属于中小数据集,用Swin这种大模型很容易过拟合,训练到后期验证集mAP不再上涨甚至下降,需要加早停、正则。
  5. 轻量化骨干在小数据集上更容易欠拟合,精度掉的比大数据集明显。

五、结论

  1. 如果追求精度优先,不考虑部署速度:YOLOv5+Swin Transformer,抗云雾、小目标检测效果最好,但训练成本高,容易过拟合。
  2. 如果追求精度和速度平衡,性价比最高:YOLOv5引入C2f模块,或者C2f+SE注意力,是遥感船舶检测首选,提升明显,参数量增加可控。
  3. 如果需要模型轻量化,嵌入式部署:YOLOv5替换GhostNet骨干,速度快,精度损失相对最小。
  4. VGG不太推荐用于这个遥感船舶任务,参数量大,收益低。

后续计划:尝试C2f+SE+GhostNet组合,在保证精度的前提下压缩模型,做轻量化遥感船舶检测模型,后续会继续更新实验结果。

结尾

遥感小目标检测本身难度不小,不同骨干网络没有绝对的好坏,要根据你的任务需求(精度、推理速度、部署硬件)选择。

如果你也在做卫星遥感船舶检测,或者YOLOv5骨干替换遇到报错,欢迎在评论区一起交流。

下载连接:https://download.csdn.net/download/qq_44886601/93642909

相关推荐
niaonao1 小时前
C盘爆红别乱删!我用 Codex 查出 AppData 占了 87.81GB
人工智能·openai
lie..1 小时前
30天从零开始学AI应用开发(Day 19):项目二完结:RAG 知识库问答系统,把自己攒的资料变成私人顾问
开发语言·人工智能·python
深度之眼1 小时前
深度学习研0研1如何正确 “阅读文献” ?分享 “3步高效阅读法” !
人工智能·深度学习
袖清暮雨1 小时前
机器学习之K近邻算法(KNN)
人工智能·机器学习·近邻算法
xn71331 小时前
Personal AI Agent 架构实战:Memory、权限、跨 App 与本地/云端设计
人工智能·后端·agent
野生码农AI实战1 小时前
AI 复盘技能 49 分钟跑不完,被我当场改革:现在 43 秒干完
人工智能
橘和柠1 小时前
模型下载全攻略:HuggingFace、hf-mirror、ModelScope 国内实操
人工智能
m4Rk_1 小时前
【论文阅读】Agent 记忆机制(92):EMPO²——让 Memory 从经验复用走向主动探索
论文阅读·人工智能·学习·开源·github
六神啊六神1 小时前
9、古代没有程序员,但蒲松龄们早就被"裁员"过了
人工智能