1. 项目背景与核心价值
船舶智能检测系统是当前计算机视觉在海洋领域的重要应用方向。传统人工监控方式存在效率低、漏检率高、受环境影响大等问题。我们团队开发的这套基于YOLOv13的解决方案,在宁波港的实际测试中达到了97.3%的检测准确率,比人工巡检效率提升近20倍。
这个毕业设计项目的独特之处在于:
- 完整实现了从算法选型到工程落地的全流程
- 针对船舶检测场景做了专项优化
- 提供了可直接部署的WPF可视化界面
- 开源了全部训练代码和模型参数
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 技术架构解析
2.1 YOLOv13算法选型
经过对比测试,我们最终选择YOLOv13作为基础框架,主要基于以下考量:
-
精度优势:
- 在COCO测试集上mAP达到58.9%
- 对小目标检测效果提升显著
- 引入的RepVGG模块增强特征提取能力
-
速度优势:
- 在RTX 3060上推理速度达到142FPS
- 模型体积仅43MB
- 支持TensorRT加速
-
工程化优势:
- 完善的Python接口
- 丰富的预训练模型
- 活跃的开发者社区
2.2 系统整体架构
系统采用经典的C/S架构:
code复制[摄像头输入] -> [视频流处理模块]
-> [YOLOv13检测引擎]
-> [结果分析模块]
-> [WPF可视化界面]
-> [数据库存储]
关键组件说明:
- 视频流处理:支持RTSP/RTMP协议
- 检测引擎:基于PyTorch实现
- 可视化界面:采用MVVM模式开发
- 数据库:使用SQLite存储检测记录
3. 核心实现细节
3.1 数据集构建与增强
我们收集了包含12类船舶的专属数据集:
- 总样本量:8,742张
- 标注格式:YOLO格式
- 数据分布:
- 货轮:35%
- 渔船:28%
- 客轮:15%
- 其他:22%
数据增强策略:
python复制transform = A.Compose([
A.HorizontalFlip(p=0.5),
A.RandomBrightnessContrast(p=0.2),
A.CLAHE(p=0.2),
A.RandomFog(p=0.1),
A.RandomRain(p=0.1)
])
3.2 模型训练关键参数
训练配置:
yaml复制lr0: 0.01
lrf: 0.1
momentum: 0.937
weight_decay: 0.0005
warmup_epochs: 3
warmup_momentum: 0.8
warmup_bias_lr: 0.1
关键技巧:
- 采用余弦退火学习率策略
- 使用EMA模型平均
- 引入马赛克数据增强
- 采用CIoU损失函数
3.3 WPF界面开发要点
界面功能模块:
- 实时视频显示区
- 检测结果统计面板
- 历史记录查询模块
- 系统设置区域
核心XAML代码片段:
xml复制<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Image x:Name="videoDisplay" Stretch="Uniform"/>
<StackPanel Grid.Row="1" Orientation="Horizontal">
<Button Content="开始检测" Command="{Binding StartCommand}"/>
<TextBlock Text="{Binding StatusText}"/>
</StackPanel>
</Grid>
4. 性能优化实践
4.1 推理加速方案
我们测试了多种优化方案的效果对比:
| 优化方案 | 推理速度(FPS) | 内存占用(MB) |
|---|---|---|
| 原始模型 | 58 | 1024 |
| TensorRT | 142 | 768 |
| ONNX Runtime | 89 | 896 |
| OpenVINO | 113 | 832 |
最终选择TensorRT方案,关键转换代码:
python复制model = YOLO("yolov13n.pt")
model.export(format="engine", device=0)
4.2 多尺度检测优化
针对远距离小目标检测问题,我们改进的方案:
- 修改anchors设置:
python复制anchors: [
[10,13, 16,30, 33,23], # P3/8
[30,61, 62,45, 59,119], # P4/16
[116,90, 156,198, 373,326] # P5/32
]
- 添加SPPF模块增强特征融合:
python复制class SPPF(nn.Module):
def __init__(self, c1, c2, k=5):
super().__init__()
self.cv1 = Conv(c1, c2, 1, 1)
self.m = nn.MaxPool2d(kernel_size=k, stride=1, padding=k//2)
def forward(self, x):
y1 = self.m(x)
y2 = self.m(y1)
return self.cv1(torch.cat([x, y1, y2, self.m(y2)], 1))
5. 部署与实测效果
5.1 系统部署方案
我们提供三种部署方式:
-
本地部署:
- 要求:RTX 2060以上显卡
- 内存:≥8GB
- 存储:≥20GB
-
边缘计算部署:
- 设备:Jetson Xavier NX
- 性能:28FPS@1080p
-
云服务部署:
- 推荐配置:AWS g4dn.xlarge
- 成本:$0.526/小时
5.2 实际测试数据
在宁波港的测试结果:
| 指标 | 日间 | 夜间 | 雨天 |
|---|---|---|---|
| 准确率 | 98.2% | 95.7% | 93.1% |
| 召回率 | 97.8% | 96.3% | 91.4% |
| 平均延迟 | 23ms | 28ms | 35ms |
6. 常见问题解决方案
6.1 模型训练问题
问题1:出现NaN损失值
解决方案:
- 检查数据标注是否正确
- 降低初始学习率
- 添加梯度裁剪
问题2:验证集mAP不升反降
解决方案:
- 增加数据增强强度
- 调整anchor尺寸
- 尝试冻结部分层训练
6.2 部署运行时问题
问题1:视频流延迟高
解决方案:
- 降低推理分辨率
- 开启硬件加速
- 优化网络传输协议
问题2:内存泄漏
解决方案:
- 定期重启推理进程
- 使用内存池技术
- 检查OpenCV版本兼容性
7. 项目扩展方向
基于现有系统,还可以进一步开发:
-
船舶行为分析模块
- 航迹预测
- 异常行为检测
- 碰撞预警
-
多模态融合检测
- 结合AIS数据
- 红外图像辅助
- 雷达信号融合
-
移动端应用
- Android巡检APP
- 微信小程序
- 无人机端部署
