如何训练自己的数据集之——DIOR遥感小目标目标检测数据集
DIOR遥感小目标目标检测数据集 遥感目标检测数据集 数据集共包括20个类别;共计图片23463张图片,训练集11725,验证集11738已处理成yolo格式、voc格式,可直接用于训练;遥感数据集


标签类别及各类别标签个数如下(train/test) 0 harbor 港口 2369 3140
1 ship 船舶 27292 35108
2 storagetank 储罐 3053 23361
3 chimney 烟囱 649 1032
4 dam 水坝 512 537
5 trainstation 火车站 502 509
6 basketballcourt 篮球场 1076 2149
7 airport 机场 661 666
8 expressway-service-area
高速公路服务区 1080 1085
9 airplane 飞机 1892 8212
10 baseballfield 棒球场 2384 3433
11 expressway-toll-station
高速公路收费站 610 688
12 vehicle 车辆 13715 26655
13 golffield 高尔夫球场 511 575
14 bridge 桥梁 1363 2604
15 groundtrackfield
地面跑道场 1158 1880
16 overpass 立交桥 1363 1778
17 windmill 风车 2365 2998
18 tenniscourt 网球场 4906 7360
19 stadium 体育场 595 673

DIOR(Drones In Optics Recognition)遥感小目标检测数据集是一个用于遥感图像中小目标检测的大规模数据集。该数据集包含了20个类别,共计23463张图像,其中训练集包含11725张图像,验证集包含11738张图像。数据集已经处理成YOLO和VOC格式,可以直接用于目标检测模型的训练。以下是各个类别的标签及其数量:
- harbor 港口 :2369(训练集)/ 3140(验证集)
- ship 船舶 :27292(训练集)/ 35108(验证集)
- storagetank 储罐 :3053(训练集)/ 23361(验证集)
- chimney 烟囱 :649(训练集)/ 1032(验证集)
- dam 水坝 :512(训练集)/ 537(验证集)
- trainstation 火车站 :502(训练集)/ 509(验证集)
- basketballcourt 篮球场 :1076(训练集)/ 2149(验证集)
- airport 机场 :661(训练集)/ 666(验证集)
- expressway-service-area 高速公路服务区 :1080(训练集)/ 1085(验证集)
- airplane 飞机 :1892(训练集)/ 8212(验证集)
- baseballfield 棒球场 :2384(训练集)/ 3433(验证集)
- expressway-toll-station 高速公路收费站 :610(训练集)/ 688(验证集)
- vehicle 车辆 :13715(训练集)/ 26655(验证集)
- golffield 高尔夫球场 :511(训练集)/ 575(验证集)
- bridge 桥梁 :1363(训练集)/ 2604(验证集)
- groundtrackfield 地面跑道场 :1158(训练集)/ 1880(验证集)
- overpass 立交桥 :1363(训练集)/ 1778(验证集)
- windmill 风车 :2365(训练集)/ 2998(验证集)
- tenniscourt 网球场 :4906(训练集)/ 7360(验证集)
- stadium 体育场 :595(训练集)/ 673(验证集)
数据集特点
- 大规模 :包含23463张图像,提供了丰富的训练样本。
- 多样性和全面性 :涵盖20种不同类型的目标,能够适应广泛的遥感应用场景。
- 预处理完成 :数据集已经处理成YOLO和VOC格式,可以直接用于模型训练。
- 标签清晰 :每个图像都有详细的标签信息,方便模型学习。
- 小目标检测 :专为遥感图像中的小目标设计,适合检测较小的目标物体。
数据集内容
- 图像文件 :包含23463张JPG/PNG格式的图像文件。
- 标签文件 :每张图像对应一个
.txt格式的标签文件(YOLO格式)或.xml格式的标签文件(VOC格式)。 - 数据集划分 :
/train:训练集,包含11725张图像及其标签。/valid:验证集,包含11738张图像及其标签。
数据集结构示例
假设数据集的根目录为 DIOR_dataset,其结构可能如下所示:
DIOR_dataset/
├── train/
│ ├── images/
│ │ ├── image_0001.jpg
│ │ ├── image_0002.jpg
│ │ └── ...
│ ├── labels_yolo/
│ │ ├── image_0001.txt
│ │ ├── image_0002.txt
│ │ └── ...
│ ├── labels_voc/
│ │ ├── image_0001.xml
│ │ ├── image_0002.xml
│ │ └── ...
├── valid/
│ ├── images/
│ │ ├── image_0001.jpg
│ │ ├── image_0002.jpg
│ │ └── ...
│ ├── labels_yolo/
│ │ ├── image_0001.txt
│ │ ├── image_0002.txt
│ │ └── ...
│ ├── labels_voc/
│ │ ├── image_0001.xml
│ │ ├── image_0002.xml
│ │ └── ...
└── data.yaml # 数据集配置文件
AI写代码
数据集配置文件 data.yaml
创建一个 data.yaml 文件来描述您的数据集。这里假设数据集被放置在一个名为 DIOR_dataset 的目录中,且包含 train 和 valid 子目录。
# data.yaml 文件
train: ../DIOR_dataset/train/images/
val: ../DIOR_dataset/valid/images/
test: null # 如果有单独的测试集路径,则填写
nc: 20 # number of classes
names: ['harbor', 'ship', 'storagetank', 'chimney', 'dam', 'trainstation', 'basketballcourt', 'airport', 'expressway-service-area', 'airplane', 'baseballfield', 'expressway-toll-station', 'vehicle', 'golffield', 'bridge', 'groundtrackfield', 'overpass', 'windmill', 'tenniscourt', 'stadium']
AI写代码
关键训练代码
安装YOLOv8
如果您还没有安装YOLOv8框架,请按照官方文档执行以下命令:
git clone https://github.com/ultralytics/ultralytics.git # 克隆YOLOv8仓库
cd ultralytics
pip install -r requirements.txt # 安装依赖项
AI写代码
将VOC格式转换为YOLO格式
如果需要将VOC格式的XML标签转换为YOLO格式的TXT文件,可以使用以下Python脚本:
import xml.etree.ElementTree as ET
import os
def convert_voc_to_yolo(xml_file_path, txt_file_path, img_width, img_height):
tree = ET.parse(xml_file_path)
root = tree.getroot()
with open(txt_file_path, 'w') as txt_file:
for obj in root.iter('object'):
difficult = obj.find('difficult').text
cls = obj.find('name').text
if int(difficult) == 1 or int(difficult) == -1:
continue
cls_id = names.index(cls)
xmlbox = obj.find('bndbox')
b = (int(float(xmlbox.find('xmin').text)),
int(float(xmlbox.find('xmax').text)),
int(float(xmlbox.find('ymin').text)),
int(float(xmlbox.find('ymax').text)))
# 将坐标转换为YOLO格式
x_center = (b[0] + b[1]) / 2.0
y_center = (b[2] + b[3]) / 2.0
width = b[1] - b[0]
height = b[3] - b[2]
x_center /= img_width
y_center /= img_height
width /= img_width
height /= img_height
txt_file.write(f"{cls_id} {x_center:.6f} {y_center:.6f} {width:.6f} {height:.6f}\n")
# 使用方法
img_width, img_height = 1024, 1024 # 图像尺寸
convert_voc_to_yolo('path/to/image_0001.xml', 'path/to/image_0001.txt', img_width, img_height)
AI写代码
使用YOLOv8训练
使用以下命令开始训练模型:
cd ultralytics
python train.py --img 1024 --batch 16 --epochs 100 --data ../DIOR_dataset/data.yaml --weights yolov8m.pt --cache
AI写代码
自定义训练脚本
如果需要更详细的控制,可以编写一个Python脚本来执行训练过程。以下是一个简单的脚本示例:
import torch
from ultralytics import YOLO # 使用YOLOv8的API
def main():
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
data_yaml = '../DIOR_dataset/data.yaml'
# 加载预训练模型
model = YOLO('yolov8m.pt').to(device) # 使用YOLOv8m作为基础模型
# 设置训练参数
epochs = 100
batch_size = 16
img_size = 1024
# 开始训练
model.train(data=data_yaml, epochs=epochs, batch=batch_size, imgsz=img_size, device=device)
# 保存模型
model.save('trained_model.pt')
print('Training complete.')
if __name__ == '__main__':
main()
AI写代码
注意事项
- 数据一致性 :确保所有图像和标签的大小一致,并且标签的格式符合模型要求。
- 标签格式 :确保YOLO格式的
.txt标签文件和VOC格式的.xml标签文件正确无误。 - 数据集划分 :在实际使用中,建议将数据集进一步划分为训练集、验证集和测试集,以评估模型性能。
- 超参数调整 :根据实际训练情况调整学习率、批次大小等超参数。
测试模型
在训练完成后,您可以使用以下命令测试模型的性能:
python detect.py --weights runs/train/exp/weights/best.pt --img 1024 --conf 0.4 --source ../DIOR_dataset/valid/images/
AI写代码
使用预训练模型进行测试
如果您已经有了训练好的模型权重文件,可以直接使用它来进行测试。假设权重文件名为 best.pt,可以使用以下命令:
python detect.py --weights best.pt --img 1024 --conf 0.4 --source ../DIOR_dataset/valid/images/
AI写代码
总结
这个示例展示了如何使用YOLOv8框架训练DIOR遥感小目标检测数据集。您可以根据自己的需求调整脚本中的参数和逻辑。通过使用这个数据集和相应的训练代码,您可以有效地训练出一个能够在多种条件下检测遥感图像中小目标的模型。在实际应用中,可以根据具体需求调整模型结构和训练参数。此外,提供的训练代码可以让您快速启动训练流程,并获得良好的检测效果。
