【恶劣天气目标检测数据集】共2000张,包含YOLO格式和VOC 格式,已划分为训练验证。
天气状况: fog(雾)、nighttime(夜间)、rain(雨)和 snow(雪)。
类别: person(人)、rider(骑手)、car(汽车)、truck(卡车)、bus(公共汽车)、train(火车)、motorcycle(摩托车)、bicycle(自行车)八个类别。
数据集名称
恶劣天气目标检测数据集 (Adverse Weather Object Detection Dataset, AWOD)
数据集描述
AWOD数据集是一个专门用于在恶劣天气条件下进行目标检测的大规模数据集。该数据集旨在帮助研究人员和开发者训练和评估能够在雾、夜间、雨和雪等复杂环境下工作的目标检测模型。数据集包含2000张高质量的图像,涵盖了八个不同的目标类别,并且提供了两种标注格式:YOLO格式和PASCAL VOC格式。数据集已经预先划分为训练集和验证集,方便直接使用。
数据规模
- 总样本数量:2000张图像
- 类别数量:8个不同类别的目标
- 天气状况:
- 雾 (Fog)
- 夜间 (Nighttime)
- 雨 (Rain)
- 雪 (Snow)
图像特性
- 多样化场景:数据集中包括城市道路、乡村道路、高速公路等多种环境下的图像。
- 多变环境:图像拍摄于不同的时间点(白天、黄昏、夜间),保证了算法对光照变化的适应能力。
- 高质量图像:所有图像都具有高分辨率,确保细节清晰,有助于提高模型的识别精度。
- 恶劣天气条件:图像覆盖了多种恶劣天气条件,如雾、夜间、雨和雪,以增强模型在这些条件下的鲁棒性。
类别列表
- 人 (Person)
- 骑手 (Rider)
- 汽车 (Car)
- 卡车 (Truck)
- 公共汽车 (Bus)
- 火车 (Train)
- 摩托车 (Motorcycle)
- 自行车 (Bicycle)
应用场景
- 智能交通系统:在恶劣天气条件下提高交通监控系统的准确性。
- 自动驾驶:增强自动驾驶车辆在不同天气条件下的感知能力。
- 安全监控:提高视频监控系统在恶劣天气条件下的目标检测性能。
- 灾害响应:快速识别受灾区域的目标,支持应急响应和救援行动。
数据集结构
一个典型的文件夹结构可能如下所示:
1adverse_weather_object_detection/
2├── images/
3│ ├── train/
4│ │ ├── img_00001.jpg
5│ │ ├── img_00002.jpg
6│ │ └── ...
7│ ├── val/
8│ │ ├── img_00001.jpg
9│ │ ├── img_00002.jpg
10│ │ └── ...
11├── annotations/
12│ ├── train/
13│ │ ├── yolo/ # YOLO格式标签
14│ │ │ ├── img_00001.txt
15│ │ │ ├── img_00002.txt
16│ │ │ └── ...
17│ │ ├── voc/ # PASCAL VOC格式标签
18│ │ │ ├── img_00001.xml
19│ │ │ ├── img_00002.xml
20│ │ │ └── ...
21│ ├── val/
22│ │ ├── yolo/ # YOLO格式标签
23│ │ │ ├── img_00001.txt
24│ │ │ ├── img_00002.txt
25│ │ │ └── ...
26│ │ ├── voc/ # PASCAL VOC格式标签
27│ │ │ ├── img_00001.xml
28│ │ │ ├── img_00002.xml
29│ │ │ └── ...
30├── train.txt # 训练集图像路径列表
31├── val.txt # 验证集图像路径列表
32└── class_names.txt # 类别名称文件
标签格式说明
-
YOLO格式:
- 文件名与对应的图像文件名相同,但扩展名为
.txt
。 - 每行代表一个目标,格式为
class_id x_center y_center width height
,其中所有的值都是相对于图像尺寸的比例形式(归一化到[0, 1]之间)。
- 文件名与对应的图像文件名相同,但扩展名为
-
PASCAL VOC格式:
- 使用XML文件存储每个图像的标注信息。
- 包含每个对象的类别名及其对应的边界框坐标(xmin, ymin, xmax, ymax)。
示例
假设一张图片img_00001.jpg
的分辨率为800x600像素,其对应的YOLO格式标签文件img_00001.txt
内容如下:
10 0.5 0.3 0.2 0.1 # Person
21 0.3 0.4 0.1 0.1 # Rider
32 0.7 0.6 0.2 0.2 # Car
对应的PASCAL VOC格式标签文件img_00001.xml
内容如下:
1<annotation>
2 <folder>train</folder>
3 <filename>img_00001.jpg</filename>
4 <size>
5 <width>800</width>
6 <height>600</height>
7 <depth>3</depth>
8 </size>
9 <object>
10 <name>person</name>
11 <bndbox>
12 <xmin>320</xmin>
13 <ymin>180</ymin>
14 <xmax>480</xmax>
15 <ymax>240</ymax>
16 </bndbox>
17 </object>
18 <object>
19 <name>rider</name>
20 <bndbox>
21 <xmin>200</xmin>
22 <ymin>200</ymin>
23 <xmax>280</xmax>
24 <ymax>260</ymax>
25 </bndbox>
26 </object>
27 <object>
28 <name>car</name>
29 <bndbox>
30 <xmin>560</xmin>
31 <ymin>360</ymin>
32 <xmax>640</xmax>
33 <ymax>420</ymax>
34 </bndbox>
35 </object>
36</annotation>
数据准备
为了使用此数据集来训练YOLO或基于PASCAL VOC格式的目标检测模型,您需要执行以下步骤:
- 确认数据集划分:确保训练集和验证集已经正确划分。
- 加载数据:根据所选的框架(如YOLOv5/v7或Faster R-CNN)加载数据。
- 设置配置文件:根据所选的框架设置相应的配置文件,指定类别数和其他相关参数。
- 开始训练过程:启动训练过程并监控模型的性能。
工具和脚本
您可以利用Python库如xml.etree.ElementTree
来读取PASCAL VOC格式的XML文件,并将其转换为YOLO格式。下面是一个简单的示例脚本,用于将PASCAL VOC格式的标注转换为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 = {'person': 0, 'rider': 1, 'car': 2, 'truck': 3, 'bus': 4, 'train': 5, 'motorcycle': 6, 'bicycle': 7}
38
39# 执行转换
40for xml_file in os.listdir('annotations/train/voc/'):
41 if xml_file.endswith('.xml'):
42 convert_annotation(os.path.join('annotations/train/voc/', xml_file), 'annotations/train/yolo/', classes)
43
44for xml_file in os.listdir('annotations/val/voc/'):
45 if xml_file.endswith('.xml'):
46 convert_annotation(os.path.join('annotations/val/voc/', xml_file), 'annotations/val/yolo/', classes)
这段代码会遍历指定目录下的所有XML文件,并根据给定的类别映射表生成相应的TXT标签文件。