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

在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

### 回答1: Seaships数据集包含三个类别:货船、油轮和渔船。货船指的是运输大量货物的船只,油轮指的是用来输送大量液态石油或其它化学品的船只,而渔船是专门用来捕捞海产品的船只。这三个类别分别代表了不同的功能和用途,也展现出了海上运输和经济活动的多样性和重要性。Seaships数据集通过对这三种不同类型的船只进行分类,可以为监测海上运输、经济和环境等方面的研究提供有力的数据支持。同时,该数据集还可以为计算机视觉和机器学习领域的研究提供有价值的基础数据,促进相关技术的发展和应用。 ### 回答2: Seaships数据集是一个用于目标检测数据集,其中包含的是海上船只的图像和相应的标注信息。这个数据集主要的目的是训练测试船只目标检测算法的性能。 这个数据集一共包含19个类别的目标,分别是“货轮”,“油轮”,“集装箱船”,“工作船”,“拖船”,“货船”,“钢材船”,“巨型油轮”,“客船”,“油船”,“快船”,“抗洪船”,“拖船及货船”,“远洋拖轮”,“航母”,“海监船”,“渔船”,“运输船”和“其他船舶”。 每个类别的目标都有多种不同的形状、尺寸和角度,这使得Seaships数据集适合用于训练测试船只目标检测算法的鲁棒性和准确性。对于想要研究或应用于航海、海洋环境、水上交通等领域的算法和产品的研究者来说,这个数据集是宝贵的资源。 ### 回答3Seaships(海船)数据集包含各种类型的海洋船只,包括货船、油轮、航空母舰、巡洋舰、驱逐舰等。数据集中的每个类别都有不同的特征和功能,例如货船主要用于运输物品,油轮主要用于海上石油运输,航空母舰用于航空作战,巡洋舰用于海上巡逻和打击,驱逐舰用于海上护航和反潜。在应用中,可以使用这些类别来训练船只分类的模型,以识别不同类别的船只。此外,数据集还包含每个船只的颜色,方向,速度和角度等属性,这些属性可用于构建船舶路径预测模型或船只目标跟踪等应用。Seaships数据集对于海洋航运相关的研究和应用具有重要价值。
评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值