【目标检测】基于yolov5海上船舶目标检测(附代码和数据集)
修改说明
虽然路程遥远不易抵达,但只要坚持不懈,终会到达目的地;即便事情看似困难重重,但只要持之以恒努力,就一定能成功实现目标。只要具备那种坚持不懈的精神力量、那种持之以恒的努力精神,脚踏实地地奋斗,埋头苦干地探索,积累每一步微小的努力终将抵达理想的彼岸,就一定能够把宏伟的目标转化为现实中的美好成果。
你好!欢迎来到我的个人简介页面。我叫augustqi,在这里要介绍一个有趣的项目——基于yolov5的海上船舶目标检测方案(附代码和数据集)
Part1 前言
目前主流的海上目标检测主要依赖于雷达技术,在技术进步推动下, 各种隐形涂料的船舶隐匿性愈发明显, 使用雷达进行目标探测面临着诸多挑战. 深度学习的目标检测方法能够与雷达探测手段协同工作, 从而实现了更为精确的目标识别过程.
Part 2 准备环节
2.1 软硬件
一个完整的项目,离不开软硬件的支持,本次项目核心配置如下:
| 内容 | 详情 |
|---|---|
| 系统 | Ubuntu 20.04 |
| 显卡 | Tesla P100 |
| CUDA版本 | 11.2 |
| CUDNN版本 | 8.1.1 |
| torch版本 | 1.8.1 |
2.2 数据集
本次项目使用的数据集总体情况:
| 类型 | 数量 |
|---|---|
| 图片 | 7000 |
| xml | 7000 |
数据集中包含的类别以及每类的数量:
| 类别 | 目标数量 |
|---|---|
| ore carrier | 2199 |
| passenger ship | 474 |
| container ship | 901 |
| bulk cargo carrier | 1952 |
| general cargo ship | 1505 |
| fishing boat | 2199 |
使用labelimg或者其他标注工具查看数据:

将数据集划分为训练集和验证集:

请在VOCdevkit/VOC2007目录下配置好以下内容:将7,000张图像归类至VOCdevkit/VOC2007/JPEGImages目录中的'dataset'子目录内;将对应的7,000份XML标注文件归类至VOCdevkit/VOC2007/Annotations目录下的'dataset'子目录内。通过预先编写的训练验证数据划分脚本生成训练集5,6个批次(5,6,8)各56个样本、验证集14个批次(14-16)各14个样本的数据集划分结果文件。其中images和labels文件夹系运行该训练数据分割脚本自动创建的。获取该划分数据集的具体脚本代码prepare_train_val.py:
Part 3 训练模型
代码结构如下:

| 文件 | 功能 |
|---|---|
| data | 数据集配置 |
| models | 模型配置 |
| runs | 存放训练结果 |
| utils | 存放工具类函数 |
| VOCdevkit | 存放数据集 |
| weights | 存放预训练权重 |
| detect.py | 检测脚本 |
| train.py | 训练脚本 |
| export.py | 模型转换脚本 |
| val.py | 验证脚本 |
| prepare_train_val.py | 划分数据集的脚本 |
| hubconf.py | pytorch hub相关代码 |
| requirements.txt | 存放项目依赖库的版本信息 |
本次项目主要采用了yolov5技术来训练海上船舶检测系统,并对代码进行了详细说明以及操作指导,请参考微信公众号AIexplore previously published articles for more details.
3.1 数据集配置
在data目录下新建一个VOC_sea.yaml文件,写入内容如下:

3.2 模型配置
在models目录中创建一个yolov5s_sea.yaml文件,并填写其中的内容(根据需求选择yolov5s、yolov5l、yolov5m、yolov5n或yolov5x)

打开终端,执行训练命令:
python train.py --weights weights/yolov5s.pt --cfg models/yolov5s_sea.yaml --data data/VOC_sea.yaml --epochs 300 --batch-size 16 --imgsz 1280
根据自己机器上的配置,修改batch-size、imgsz等参数。
Part 4 测试模型
导入预训练的模型权重文件,并通过detect.py执行模型加载操作;在验证数据集上运行预测过程,并将预测结果保存到指定目录中;以展示验证效果为例,在附录中列出部分预测结果。

Part 5 结果分析
本项目采用yolov5算法进行海上船舶目标检测模型的训练,在两块NVIDIA Tesla P100显卡上进行了连续300个epocs的训练工作。通过对比训练集与验证集的损失值变化趋势以及各项评估指标(包括损失值下降、准确率提升、召回率优化和mAP性能增强)可以看出模型的学习效果不断优化。

验证集上PR曲线:

Part 6 完整项目获取
项目完整代码和数据集,获取方式请看下面。

本项目的代码与数据集可通过扫描下方二维码关注并添加官方vx助手进行获取(注:此服务仅限于订阅该专栏内容的服务),即可获取本文的数据集及相关代码。具体详情也可通过扫描二维码与我们联系。特别注意:一旦订阅该专栏,在此前提下即可免费阅读全文内容,请务必谨慎注意的是,在此前提下无法获取完整的源码与数据集。

参考资料
[1]<>
[2]<>
[3]<>
[4]
