可见光船舶目标检测数据集

可见光船舶目标检测数据集,7000张


数据集包含6个类别,相对应标签为xml格式


可转化为txt标签格式,用于yolov5/v7训练

可见光船舶目标检测数据集

数据集描述

该数据集专为可见光条件下的船舶目标检测而设计,旨在支持计算机视觉和深度学习研究者开发高效的船舶识别与跟踪系统。它包含7000张高质量的图像,每张图像中都标注了至少一艘船舶的位置信息。所有标签以XML格式提供,并且可以轻松转换为YOLOv5/v7所需的TXT格式,以便进行模型训练。数据集涵盖了多种环境、天气状况以及不同的光照条件,确保了模型在实际应用中的鲁棒性。

数据规模

  • 总样本数量:7000张图像
  • 类别数量:6个不同类型的船舶
  • 标注格式
    • 原始:XML (PASCAL VOC)
    • 转换后:TXT (YOLO)

图像特性

  • 多样化场景:数据集中包括了从开阔海域到繁忙港口的各种场景。
  • 多变环境:图像拍摄于不同的天气条件下(晴天、阴天、雨天等)以及不同的时间点(白天、黄昏、夜间),保证了算法对各种环境因素的适应能力。
  • 高质量标注:每个船舶目标都经过精确的手动标注,提供了准确的边界框坐标。

类别列表

  1. 油轮
  2. 集装箱船
  3. 散货船
  4. 游艇
  5. 拖船
  6. 其他小型船只

应用场景

  • 海上交通管理:监控海上的船舶流量,预防碰撞事故。
  • 边境安全:加强海岸线的安全监控,防止非法入境。
  • 环境保护:监测海洋污染源,如油泄漏事件。
  • 科研用途:支持海洋生物学研究,比如追踪特定种类的船只活动。

数据集结构

一个典型的文件夹结构可能如下所示:

1ship_detection_dataset/
2├── images/
3│   ├── img_00001.jpg
4│   ├── img_00002.jpg
5│   └── ...
6├── annotations/
7│   ├── img_00001.xml
8│   ├── img_00002.xml
9│   └── ...
10├── labels/  # 可选,如果已转换为YOLO格式
11│   ├── img_00001.txt
12│   ├── img_00002.txt
13│   └── ...
14├── train.txt  # 训练集图像路径列表
15├── val.txt  # 验证集图像路径列表
16└── test.txt  # 测试集图像路径列表

标签格式说明

  • 原始XML格式: 使用PASCAL VOC标准,包含每个对象的类别名及其对应的边界框坐标(xmin, ymin, xmax, ymax)。

  • 转换后的TXT格式: YOLO要求的格式是class_id x_center y_center width height,其中所有的值都是相对于图像尺寸的比例形式(归一化到[0, 1]之间)。

示例

假设一张图片img_00001.jpg的分辨率为800x600像素,其对应的XML文件img_00001.xml中有一艘油轮,位置信息如下:

1<object>
2    <name>oil_tanker</name>
3    <bndbox>
4        <xmin>100</xmin>
5        <ymin>50</ymin>
6        <xmax>200</xmax>
7        <ymax>150</ymax>
8    </bndbox>
9</object>

转换成YOLO格式的TXT文件img_00001.txt内容将是:

10 0.15625 0.08333333 0.125 0.125

这里0代表油轮类别的ID,其余数值分别是中心点的x/y坐标及宽度和高度的比例。

数据准备

为了使用此数据集来训练YOLOv5或v7模型,您需要执行以下步骤:

  1. 将所有XML标签文件转换为YOLO兼容的TXT格式。
  2. 创建图像路径列表文件(train.txtval.txttest.txt),列出用于训练、验证和测试的图像路径。
  3. 设置YOLO配置文件,指定类别数和其他相关参数。
  4. 开始训练过程。

工具和脚本

您可以利用Python库如xml.etree.ElementTree来读取XML文件并将其转换为YOLO格式。下面是一个简单的示例脚本,用于将XML标注转换为YOLO格式:

1import os
2import xml.etree.ElementTree as ET
3
4def convert(size, box):
5    dw = 1./size[0]
6    dh = 1./size[1]
7    x = (box[0] + box[1])/2.0
8    y = (box[2] + box[3])/2.0
9    w = box[1] - box[0]
10    h = box[3] - box[2]
11    x = x*dw
12    w = w*dw
13    y = y*dh
14    h = h*dh
15    return (x,y,w,h)
16
17def convert_annotation(xml_file, output_dir, class_dict):
18    tree = ET.parse(xml_file)
19    root = tree.getroot()
20    size = root.find('size')
21    w = int(size.find('width').text)
22    h = int(size.find('height').text)
23
24    out_file = open(os.path.join(output_dir, os.path.basename(xml_file).replace('.xml', '.txt')), 'w')
25    
26    for obj in root.iter('object'):
27        cls = obj.find('name').text
28        if cls not in class_dict:
29            continue
30        cls_id = class_dict[cls]
31        xmlbox = obj.find('bndbox')
32        b = (float(xmlbox.find('xmin').text), float(xmlbox.find('xmax').text), float(xmlbox.find('ymin').text), float(xmlbox.find('ymax').text))
33        bb = convert((w,h), b)
34        out_file.write(str(cls_id) + " " + " ".join([str(a) for a in bb]) + '\n')
35
36# 定义类别字典
37classes = {'oil_tanker': 0, 'container_ship': 1, 'bulk_carrier': 2, 'yacht': 3, 'tugboat': 4, 'other_small_vessels': 5}
38
39# 执行转换
40for xml_file in os.listdir('annotations/'):
41    if xml_file.endswith('.xml'):
42        convert_annotation(os.path.join('annotations/', xml_file), 'labels/', classes)

这段代码会遍历指定目录下的所有XML文件,并根据给定的类别映射表生成相应的TXT标签文件。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值