如何训练自己的数据集之——恶劣天气目标检测数据集
恶劣天气下的目标检测数据集共有千余份, 混合格式YOLO/VOC的道路目标检测数据集, 包含四种典型的气象条件: 雨天、雾天、夜间及下雪夜, 并覆盖了分类识别行人与车辆的任务, 覆盖了恶劣天气下的所有场景, 同时也包含了极端气象条件下的测试用例, 以及不同时间段的道路场景.
复杂天气环境目标检测数据集
复杂天气环境目标检测数据集
天气状况: fog(雾)、nighttime(夜间)、rain(雨)和 snow(雪)。
类别: person(个人)、rider(骑行者)、car(汽车)、truck(卡车)、bus(公交车)、train(火车)、motorcycle(摩托车)和bicycle(自行车)八个类别

恶劣天气目标检测数据集
复杂天气条件下目标检测专用数据集
复杂天气条件下目标检测专用数据集
天气状况: fog(雾)、nighttime(夜间)、rain(雨)和 snow(雪)。
分类包括个人、骑手、汽车、卡车、公交车、火车、摩托车以及自行车等共计八类

恶劣天气目标检测数据集介绍

数据集概述
该数据集专门针对恶劣天气场景下的目标检测问题进行了研究与构建。其中包含了约两ooo张图像,并成功地将其划分为训练样本与验证样本两部分。这些图像被系统性地归类为八种类型:人、骑手、汽车、卡车、公共汽车、火车、摩托车以及自行车。值得注意的是,在本数据集中我们采用了YOLO与VOC两种主流目标检测标注格式,并确保其完整性以便于后续模型训练使用。

数据集特点
- 恶劣天气条件 :数据集包含四种典型的恶劣天气条件——雾(fog)、夜间(nighttime)、雨(rain)和雪(snow),这对于开发能够在不同天气条件下工作的目标检测系统至关重要。
- 多样化的目标类别 :数据集涵盖了八种不同类型的目标,包括行人、车辆等,能够帮助模型更好地理解复杂的城市交通场景。
- 多格式支持 :数据集提供YOLO格式和VOC格式的标注文件,方便使用不同框架的研究者和开发者。
数据集内容
- 图像文件 :该图像文件集包含了2000张JPG/PNG格式的图片。
- 标注文件 :每个图像均附有YOLO和VOC两种格式的注释文件。
数据集结构示例
数据集的根目录为 weather_detection_dataset,其结构可能如下所示:
weather_detection_dataset/
├── images/
│ ├── train/
│ │ ├── train_image_0001.jpg
│ │ ├── train_image_0002.jpg
│ │ └── ...
│ ├── val/
│ │ ├── val_image_0001.jpg
│ │ ├── val_image_0002.jpg
│ │ └── ...
├── labels_yolo/
│ ├── train/
│ │ ├── train_image_0001.txt
│ │ ├── train_image_0002.txt
│ │ └── ...
│ ├── val/
│ │ ├── val_image_0001.txt
│ │ ├── val_image_0002.txt
│ │ └── ...
├── labels_voc/
│ ├── train/
│ │ ├── train_image_0001.xml
│ │ ├── train_image_0002.xml
│ │ └── ...
│ ├── val/
│ │ ├── val_image_0001.xml
│ │ ├── val_image_0002.xml
│ │ └── ...
└── data.yaml # 数据集配置文件

数据集配置文件 data.yaml
按照以下步骤按照详细说明所述,请确保您按照以下步骤详细说明所述。请注意,在进行操作之前,请确保您的数据集被正确存放于名为`weather_detection_dataset的主目录中,并且该目录下应包含两个子目录:一个是用于图像的数据集(命名为images),另一个用于标签的数据集(命名为labels$)。
# data.yaml 文件
train: ../weather_detection_dataset/images/train/
val: ../weather_detection_dataset/images/val/
test: ../weather_detection_dataset/images/test/ # optional
nc: 8 # number of classes
names: ['person', 'rider', 'car', 'truck', 'bus', 'train', 'motorcycle', 'bicycle'] # class names
训练模型
使用YOLOv5框架进行训练的步骤如下:
示例代码
安装YOLOv5
如果您还没有安装YOLOv5,请按照官方文档执行以下命令:
git clone https://github.com/ultralytics/yolov5.git # clone repo
cd yolov5
pip install -r requirements.txt # install dependencies
使用YOLOv5命令行训练
使用以下命令开始训练模型:
cd yolov5
python train.py --img 640 --batch 16 --epochs 300 --data ../weather_detection_dataset/data.yaml --weights yolov5s.pt --cache
自定义训练脚本
如果需要更深入的控制,请考虑开发一个基于Python的训练脚本用于运行特定任务。例如, 下面是一个简单的脚本示例:
import torch
from utils.datasets import LoadImagesAndLabels # 导入数据加载器
from models.experimental import attempt_load # 导入模型加载器
from utils.torch_utils import select_device # 导入选用设备的函数
from utils.general import check_dataset # 导入检查数据集的函数
def main():
device = select_device('') # 选择设备,自动选择GPU/CPU
data_yaml = '../weather_detection_dataset/data.yaml'
train_images_folder = '../weather_detection_dataset/images/train/'
train_labels_folder = '../weather_detection_dataset/labels_yolo/train/'
val_images_folder = '../weather_detection_dataset/images/val/'
val_labels_folder = '../weather_detection_dataset/labels_yolo/val/'
# 加载数据集
train_set = LoadImagesAndLabels(train_images_folder, train_labels_folder)
val_set = LoadImagesAndLabels(val_images_folder, val_labels_folder)
# 创建数据加载器
train_loader = torch.utils.data.DataLoader(train_set, batch_size=16, shuffle=True, num_workers=4)
val_loader = torch.utils.data.DataLoader(val_set, batch_size=16, shuffle=False, num_workers=4)
# 加载预训练模型
model = attempt_load('yolov5s.pt', map_location=device) # 加载预训练权重
model.to(device)
# 设置损失函数和优化器
criterion = torch.nn.CrossEntropyLoss()
optimizer = torch.optim.Adam(model.parameters(), lr=0.001)
# 训练循环
epochs = 300
for epoch in range(epochs):
model.train()
for images, targets, _, _ in train_loader:
images = images.to(device)
targets = [t.to(device) for t in targets]
# 前向传播
outputs = model(images)
# 计算损失
loss = criterion(outputs, targets)
# 反向传播和优化
optimizer.zero_grad()
loss.backward()
optimizer.step()
print(f'Epoch [{epoch+1}/{epochs}], Loss: {loss.item()}')
torch.save(model.state_dict(), 'trained_model.pt')
print('Training complete.')
if __name__ == '__main__':
main()

注意事项
- 必须正确配置
data.yaml文件中的文件路径,并使数据集结构与前述描述一致。 - 请优化批量大小、学习率和迭代次数等关键参数设置,以适应您的计算资源和任务需求。
- 当数据集规模较大时,请确保有足够的计算资源和充足的时间来完成训练过程。
- 此脚本仅作为参考代码,请根据具体情况进行适当调整和优化。
测试模型
在训练完成后,您可以通过以下命令测试模型的性能:
python detect.py --weights runs/train/exp/weights/best.pt --img 640 --conf 0.4 --source ../weather_detection_dataset/images/test/
总结
该示例演示了在恶劣天气条件下利用YOLOv5框架进行目标检测模型训练的过程。您可以根据个人需求对脚本中的相关参数设置及整体逻辑架构进行相应优化。利用该数据集及其配套的训练代码库,在不同天气条件下进行针对性优化后,可以构建出具备多天气环境适应能力的目标检测模型。
