在SeaShips数据集上训练并测试Yolov3

本文详细记录了在SeaShips数据集上使用Yolov3进行船只检测的过程,包括数据预处理、网络配置修改、权重参数下载及测试等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在SeaShips数据集上训练并测试Yolov3

本文主要记录我在seaships数据集上训练yolov3网络进行船只检测的简单过程

首先,简介一下SeaShips数据集,数据集下载链接
该版本数据集共有7000张图片,图片分辨率均为1920*1080,分为六类船只,主要是一些内河航道中船只的图片。
在pytorch实现的yolov3的基础上进行修改,修改的源代码链接:yolov3-pytorch

全文主要分为一下几个部分

  1. 对数据集的预处理
  2. 修改cfg文件
  3. 修改data文件夹
  4. 下载初始权重参数

数据集预处理

SeaShips数据集共有四个文件夹,其中Annotations文件夹内是每张图片的标签,每个图片对应一个xml文件来存储标签,所以要将xml文件中的内容转为txt文件,每张照片对应一个txt文件,txt文件命名与照片命名一致,如00xxxx.jpg对应的标签文件为00xxxx.xml,我们要将00xxxx.xml文件转为00xxxx.txt文件。

xml文件给出了每一个目标的类别,以及对应的bounding box的左上角和右下角的坐标,注意对应的均为1920*1080分辨率。
在工程中(修改后的工程链接会在文末给出),xml2txt.py文件是用来完成这个任务的,注意转成txt文件要求是,一张照片对应一个txt文件,一个txt文件每一行对应一个船只目标,每一行五个数,第一个是类别,0~5分别代表六类船只,剩下的四个数依次为bounding box中心点的x和y坐标,然后是框的width和height,所有的数据均为归一化后的数据,x和width要除以1920,y和height要除以1080.
注意一点:所有图片全部放在JPEGImages文件夹下,所有标签全部放在labels文件夹下,然后这两个文件下放在同一个文件夹下。至于train,val,test,则分别建立包含各个集全部图片路径的txt文件。train的时候会根据txt文件每一行图片路径去读取图片,然后会把图片路径的JPEGImages换成labels,把.jpg换为.txt去读取标签,这也是为什么只能这样命名文件夹且图片和标签必须放在同一个文件下的原因。

修改cfg文件

cfg文件里面定义了网络框架,代码中建立模型就是根据cfg文件建立的,cfg文件夹内有3个cfg文件,对应3种网络架构,yolov3,yolov3-spp,yolov3-tiny,复杂度和精确度依次下降,我选的是yolov3-spp,打开yolov3-spp.cfg文件,原始yolo含有255个输出,[4 box coordinates + 1 object confidence + 80 class confidences]*3,乘3是因为yolov3在3个尺度上进行预测。因为这里只有6类船只,因此搜索filters=255,将255改为 33=(4+1+6)*3 即可。

修改data文件夹

打开文件夹可看到有.data .names .txt三种类型文件。.data文件定义了类别数量classes,修改为6。第二行train=,这里改为一个txt文件的路径,这个txt文件里面是训练集所有图片的路径,每一行是一张图片的路径,这个txt文件需要自己写代码生成,代码参照工程里面create_txt.py。第三行,同理,valid=指向含有测试集图片路径的txt文件。第四行names=,指向一个names文件,可新建一个后缀为.names的文件,里面每一行是每一个类别的名字,在这里6行,分别是6个类别的船的名字。第五行和第六行暂不用修改。(这里注意,里面有很多data文件,代码train.py默认使用coco.data,如果不想麻烦可直接修改coco64_img.data即可)

下载初始权重参数

权重链接(谷歌云端硬盘,需要翻墙,网上应该有百度网盘版)
第一次训练下载第一个dark54.conv.74文件。训练完毕后会生成best.pt和latest.pt权重文件。
test.py文件测试默认使用yolov3-spp.weights权重文件,

parser.add_argument('--cfg', type=str, default='cfg/yolov3-spp.cfg', help='cfg file path')
parser.add_argument('--data', type=str, default='data/coco.data', help='coco.data file path')
parser.add_argument('--weights', type=str, default='weights/yolov3-spp.weights', help='path to weights file')

test文件195行左右,注意这里默认使用coco.data, 和train.py不一样,应该改为一致,修改weights那里改为"best. pt"或者“latest. pt",就可以test你训练的参数的效果了。

注:工程里面kmena_anchor文件是用来聚类初始anchor大小,修改初始anchor大小可显著提升训练效果。

还有许多细节没有体到,需要自己多去尝试,debug的过程会让你对整个架构有更清晰的认识。

修改后的工程:yolov3_seahips

### 关于 SeaShips 数据集的相关研究 SeaShips 是一种用于船舶检测数据集,其设计目的是支持复杂场景下的舰船目标识别任务。该数据集中包含了大量标注的图像样本,适用于多种计算机视觉算法的研究与测试[^1]。 #### 相关论文推荐 以下是几篇与 SeaShips 数据集紧密关联的重要学术成果: 1. **《Seaships: A Large-Scale Benchmark Dataset for Ship Detection》** 这是一篇关于 SeaShips 数据集构建及其应用的核心文章。文中详细描述了数据集的设计理念、采集过程以及标注方法,探讨了基于此数据集目标检测性能评估标准。 2. **《Deep Learning-Based Object Detection Algorithms Evaluation on Seaships Dataset》** 此项工作对比分析了几种主流深度学习框架(如 Faster R-CNN, YOLOv3 和 SSD)在处理海事领域物体探测问题上的表现效果。实验部分特别强调了针对不同天气条件和光照环境的结果差异性[^3]。 3. **《Ship Detection Using Remote Sensing Images Based on Holistically-Nested Edge Detection》** 虽然主要聚焦于高分辨率遥感影像中的桥梁提取技术,但其中提到的方法论同样可以迁移应用于类似 SeaShips 的近岸区域船只监测情境下[^2]。 4. **《A Comprehensive Study of Maritime Surveillance Systems Utilizing Deep Neural Networks》** 提供了一个全面综述性质的文章,涵盖了近年来利用深度神经网络改进海上监控系统的各类尝试案例。其中包括对 SeaShips 等公开可用资源的有效利用率讨论。 对于上述提及到的具体 PDF 或者全文获取方式可以通过 IEEE Xplore 平台完成检索操作;如果遇到权限限制,则考虑通过学校图书馆订阅服务或者联系作者请求副本等形式解决访问障碍问题。 ```python import requests from bs4 import BeautifulSoup def fetch_paper(url): response = requests.get(url) soup = BeautifulSoup(response.text, 'html.parser') title = soup.find('title').text.strip() abstract = soup.select_one('.abstract-text').text.strip() if soup.select_one('.abstract-text') else '' return {'Title': title, 'Abstract': abstract} paper_url = "https://ieeexplore.ieee.org/document/8438999" details = fetch_paper(paper_url) print(f"Paper Title: {details['Title']}\n\nAbstract:\n{details['Abstract']}") ``` 以上脚本可以帮助快速抓取指定 URL 页面内的基本信息作为初步了解参考资料内容之用,请注意实际部署前需确认目标站点允许此类自动化行为遵循相应 robots.txt 文件规定。
评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值