1. 项目背景与核心价值
船舶识别技术在现代海洋监测、港口管理和海上救援等领域具有重要应用价值。传统基于人工观测或雷达的识别方法存在效率低、成本高、受天气影响大等问题。我们团队基于YOLO26架构,在10类船舶数据集上进行了系统性的实验研究,实现了平均精度(mAP)达到92.3%的识别效果。
这个项目最直接的实用价值在于:
- 可部署于海岸线监控系统,实现24小时不间断的船舶类型识别
- 为海事管理部门提供自动化监管工具
- 应用于智能港口系统,优化船舶调度流程
- 为海上搜救提供快速目标识别支持
2. 数据集构建与预处理
2.1 数据集构成
我们收集了包含10类常见船舶的标注数据集,具体分布如下:
| 船舶类型 | 训练集数量 | 验证集数量 | 测试集数量 |
|---|---|---|---|
| 货轮 | 1,250 | 312 | 156 |
| 油轮 | 980 | 245 | 122 |
| 集装箱船 | 1,100 | 275 | 137 |
| 渔船 | 1,500 | 375 | 187 |
| 客轮 | 850 | 212 | 106 |
| 军舰 | 720 | 180 | 90 |
| 游艇 | 1,300 | 325 | 162 |
| 拖船 | 650 | 162 | 81 |
| 科考船 | 420 | 105 | 52 |
| 驳船 | 530 | 132 | 66 |
注意:数据收集过程中特别注意了不同天气条件(晴天、雨天、雾天)和不同拍摄角度(俯视、平视、斜视)的均衡分布。
2.2 数据增强策略
为提高模型鲁棒性,我们采用了以下增强组合:
-
基础增强:
- 随机水平翻转(p=0.5)
- 随机旋转(±15度)
- 色彩抖动(亮度±0.1,对比度±0.1)
-
高级增强:
- 模拟雾天效果(随机添加高斯模糊)
- 波浪扭曲(模拟水面反射)
- 部分遮挡(模拟船只相互遮挡)
python复制# 示例增强代码
aug = A.Compose([
A.HorizontalFlip(p=0.5),
A.Rotate(limit=15),
A.RandomBrightnessContrast(p=0.2),
A.GaussianBlur(blur_limit=(3,7)),
A.PiecewiseAffine(scale=(0.01,0.05))
])
3. YOLO26网络架构改进
3.1 骨干网络优化
在YOLOv5基础上,我们进行了以下改进:
- 引入跨阶段部分连接(CSP)结构,减少计算量约18%
- 添加注意力机制模块(CBAM),提升小目标检测能力
- 使用改进的SPP结构(SPPF),加速特征融合
python复制class CBAM(nn.Module):
def __init__(self, c):
super().__init__()
self.channel_attention = nn.Sequential(
nn.AdaptiveAvgPool2d(1),
nn.Conv2d(c, c//8, 1),
nn.ReLU(),
nn.Conv2d(c//8, c, 1),
nn.Sigmoid()
)
self.spatial_attention = nn.Sequential(
nn.Conv2d(2,1,7,padding=3),
nn.Sigmoid()
)
def forward(self, x):
ca = self.channel_attention(x)
sa = self.spatial_attention(torch.cat([x.mean(1,keepdim=True),x.max(1,keepdim=True)[0]],1))
return x * ca * sa
3.2 检测头改进
针对船舶目标特点,我们设计了三尺度检测头:
- 大尺度(80×80):检测小型渔船、快艇
- 中尺度(40×40):检测中型游艇、拖船
- 小尺度(20×20):检测大型货轮、油轮
每个检测头包含:
- 特征融合模块
- 分类分支(使用Focal Loss)
- 回归分支(使用CIoU Loss)
4. 训练策略与参数调优
4.1 超参数设置
经过多次实验,最终确定的超参数组合:
| 参数名称 | 设置值 | 选择依据 |
|---|---|---|
| 初始学习率 | 0.01 | 余弦退火策略起点 |
| 批量大小 | 32 | GPU显存限制 |
| 优化器 | AdamW | 收敛稳定且快速 |
| 权重衰减 | 0.0005 | 防止过拟合 |
| 训练周期 | 300 | 验证集指标趋于平稳 |
| 热身周期 | 5 | 稳定初始训练 |
4.2 训练技巧
-
渐进式图像尺寸:
- 前50个epoch:640×640
- 50-150epoch:768×768
- 150-300epoch:896×896
-
类别平衡采样:
- 对样本较少的类别(如科考船)适当提高采样概率
-
早停策略:
- 连续15个epoch验证集mAP无提升则停止
5. 实验结果与分析
5.1 精度指标
在测试集上的表现:
| 船舶类型 | 精确率 | 召回率 | AP |
|---|---|---|---|
| 货轮 | 93.2% | 91.5% | 92.8% |
| 油轮 | 94.1% | 90.3% | 93.5% |
| 集装箱船 | 92.8% | 93.1% | 93.2% |
| 渔船 | 91.5% | 94.2% | 92.0% |
| 客轮 | 90.7% | 89.8% | 90.5% |
| 军舰 | 93.5% | 92.1% | 93.0% |
| 游艇 | 91.2% | 93.5% | 91.8% |
| 拖船 | 92.1% | 90.7% | 91.9% |
| 科考船 | 89.8% | 88.9% | 89.5% |
| 驳船 | 90.3% | 91.2% | 90.8% |
5.2 消融实验
验证各改进模块的效果:
| 模型变体 | mAP | FPS |
|---|---|---|
| Baseline(YOLOv5) | 88.7% | 62 |
| +CSP结构 | 89.5% | 68 |
| +CBAM注意力 | 90.8% | 65 |
| +三尺度检测头 | 91.6% | 58 |
| 完整模型(YOLO26) | 92.3% | 55 |
6. 实际部署与优化
6.1 模型压缩
为满足实时性要求,我们进行了以下优化:
- 知识蒸馏:使用大模型指导小模型训练
- 通道剪枝:移除冗余卷积通道
- 量化:FP32→INT8,精度损失仅0.8%
优化后指标:
- 模型大小:从189MB→47MB
- 推理速度:从55FPS→83FPS
- mAP下降:92.3%→91.5%
6.2 部署方案
我们测试了三种部署环境:
-
边缘计算盒子(NVIDIA Jetson Xavier NX)
- 分辨率:1280×720
- 处理速度:28FPS
- 功耗:15W
-
云端服务器(T4 GPU)
- 分辨率:1920×1080
- 处理速度:83FPS
- 支持16路并发
-
嵌入式设备(RK3588)
- 分辨率:960×540
- 处理速度:15FPS
- 功耗:5W
7. 常见问题与解决方案
7.1 小目标漏检
问题现象:小型渔船在远距离拍摄时识别率低
解决方案:
- 增加小尺度检测头
- 在数据增强中添加随机缩放
- 使用更高分辨率输入(需平衡速度)
7.2 相似类别混淆
问题现象:货轮与集装箱船容易混淆
改进措施:
- 在损失函数中增加类别惩罚项
- 针对易混淆类别增加困难样本挖掘
- 添加细粒度分类分支
7.3 恶劣天气性能下降
问题现象:雾天场景下召回率下降约15%
优化方向:
- 增加天气模拟数据增强
- 引入去雾预处理模块
- 使用多光谱数据融合
在实际部署中,我们发现模型对近距离(500米内)船舶识别准确率可达95%以上,但对1公里外的目标识别精度会下降到85%左右。这提示我们需要进一步优化远距离识别能力,可能的改进方向包括引入超分辨率重建模块或结合雷达数据融合。