应急救援数据集,UAV无人机拍摄,烟火检测数据集,全部为无人机视角拍摄,共25000余张图像,提供coco,yolo,voc格式标注,标注fire和smoke两类目标位置,数据量14GB
应急救援数据集 - 烟火检测数据集介绍
数据集概览
- 总大小: 14GB
- 图像数量: 25,000余张
- 类别数量:
fire
(火焰)smoke
(烟雾)
- 任务类型: 目标检测
- 拍摄视角: 无人机视角
- 标注格式: COCO、YOLO、VOC
- 用途: 用于烟火检测,特别是在应急救援场景中快速识别火灾和烟雾。
类别划分
- fire (火焰): 检测图像中的火焰目标。
- smoke (烟雾): 检测图像中的烟雾目标。
数据集结构
假设数据集文件夹结构如下:
emergency_rescue_dataset/
├── images/
│ ├── train/
│ ├── val/
│ └── test/
├── annotations/
│ ├── train/ # COCO, YOLO, VOC格式
│ ├── val/
│ └── test/
└── README.md
images/
目录下存放图像文件。annotations/
目录下存放不同格式的标注文件(COCO、YOLO、VOC)。README.md
文件包含数据集的使用说明和字段解释。
标注文件示例
以下是三种标注格式的示例:
COCO格式 (JSON)
{
"info": {
"description": "Emergency Rescue Dataset",
"url": "",
"version": "1.0",
"year": 2023,
"contributor": "",
"date_created": "2023-09-29"
},
"licenses": [
{
"url": "",
"id": 1,
"name": "MIT License"
}
],
"images": [
{
"license": 1,
"file_name": "000001.jpg",
"coco_url": "",
"height": 1080,
"width": 1920,
"date_captured": "2023-09-29 00:00:00",
"flickr_url": "",
"id": 1
}
],
"annotations": [
{
"segmentation": [[100, 100, 150, 100, 150, 150, 100, 150]],
"area": 2500,
"iscrowd": 0,
"image_id": 1,
"bbox": [100, 100, 50, 50],
"category_id": 1,
"id": 1
},
{
"segmentation": [[200, 200, 250, 200, 250, 250, 200, 250]],
"area": 2500,
"iscrowd": 0,
"image_id": 1,
"bbox": [200, 200, 50, 50],
"category_id": 2,
"id": 2
}
],
"categories": [
{
"supercategory": "fire",
"id": 1,
"name": "fire"
},
{
"supercategory": "smoke",
"id": 2,
"name": "smoke"
}
]
}
YOLO格式 (TXT)
# 示例:annotations/train/000001.txt
0 0.05208333 0.05555556 0.02604167 0.02777778 # fire
1 0.10416667 0.10416667 0.02604167 0.02777778 # smoke
VOC格式 (XML)
<annotation>
<folder>train</folder>
<filename>000001.jpg</filename>
<size>
<width>1920</width>
<height>1080</height>
<depth>3</depth>
</size>
<object>
<name>fire</name>
<bndbox>
<xmin>100</xmin>
<ymin>100</ymin>
<xmax>150</xmax>
<ymax>150</ymax>
</bndbox>
</object>
<object>
<name>smoke</name>
<bndbox>
<xmin>200</xmin>
<ymin>200</ymin>
<xmax>250</xmax>
<ymax>250</ymax>
</bndbox>
</object>
</annotation>
使用场景
- 应急救援: 用于快速检测火灾和烟雾,辅助应急响应人员进行决策。
- 智能监控: 结合无人机技术,实现大范围的实时监控和预警。
- 灾害评估: 帮助评估火灾和烟雾的影响范围,支持灾后重建工作。
- 安全检查: 用于工业场所的安全检查,及时发现潜在的火灾隐患。
Keras 训练代码示例
为了训练一个目标检测模型,我们可以使用预训练的YOLOv3或YOLOv4模型。这里我们使用Keras和YOLOv3来进行训练。如果你更喜欢使用PyTorch,可以考虑使用YOLOv5。
首先,确保你已经安装了所需的依赖项。你可以通过以下命令安装Keras和其他必要的库:
bash
深色版本
pip install keras tensorflow opencv-python
然后,创建一个配置文件 config.yaml
来指定数据集路径和类别信息:
train: /path/to/emergency_rescue_dataset/images/train
val: /path/to/emergency_rescue_dataset/images/val
test: /path/to/emergency_rescue_dataset/images/test
nc: 2 # 类别数量
names: ['fire', 'smoke']
接下来,使用以下脚本进行训练:
import os
import numpy as np
import tensorflow as tf
from tensorflow.keras.models import Model
from tensorflow.keras.layers import Input, Conv2D, BatchNormalization, LeakyReLU, MaxPooling2D, Add, UpSampling2D, Concatenate
from tensorflow.keras.optimizers import Adam
from tensorflow.keras.callbacks import EarlyStopping, ModelCheckpoint, ReduceLROnPlateau
from utils import load_data, preprocess_data, yolo_loss, parse_annotation # 自定义工具函数
# 配置文件路径
config_path = 'config.yaml'
# 读取配置文件
with open(config_path, 'r') as f:
config = yaml.safe_load(f)
# 数据集路径
train_images_dir = config['train']
val_images_dir = config['val']
# 图像生成器
def data_generator(images_dir, batch_size=32):
while True:
images, labels = load_data(images_dir) # 自定义函数加载数据
for i in range(0, len(images), batch_size):
batch_images = images[i:i + batch_size]
batch_labels = labels[i:i + batch_size]
batch_images, batch_labels = preprocess_data(batch_images, batch_labels) # 自定义函数预处理数据
yield batch_images, batch_labels
# 定义YOLOv3模型
def create_yolov3_model(input_shape=(416, 416, 3)):
inputs = Input(shape=input_shape)
# Darknet-53 backbone
x = Conv2D(32, (3, 3), padding='same')(inputs)
x = BatchNormalization()(x)
x = LeakyReLU(alpha=0.1)(x)
x = MaxPooling2D((2, 2))(x)
# ... 添加更多层以构建完整的Darknet-53骨干网络 ...
# YOLOv3输出层
output_1 = Conv2D(3 * (5 + config['nc']), (1, 1), activation='linear')(x)
x = Conv2D(128, (1, 1), activation='relu')(x)
x = UpSampling2D(2)(x)
x = Concatenate()([x, skip_connection_1])
x = Conv2D(256, (3, 3), activation='relu', padding='same')(x)
output_2 = Conv2D(3 * (5 + config['nc']), (1, 1), activation='linear')(x)
x = Conv2D(64, (1, 1), activation='relu')(x)
x = UpSampling2D(2)(x)
x = Concatenate()([x, skip_connection_2])
x = Conv2D(128, (3, 3), activation='relu', padding='same')(x)
output_3 = Conv2D(3 * (5 + config['nc']), (1, 1), activation='linear')(x)
model = Model(inputs, [output_1, output_2, output_3])
return model
# 创建模型
model = create_yolov3_model()
# 编译模型
model.compile(optimizer=Adam(lr=0.0001), loss=yolo_loss, metrics=['accuracy'])
# 打印模型概要
model.summary()
# 设置回调函数
early_stopping = EarlyStopping(monitor='val_loss', patience=10, restore_best_weights=True)
checkpoint = ModelCheckpoint('best_fire_smoke_detection_model.h5', save_best_only=True, monitor='val_loss', mode='min')
reduce_lr = ReduceLROnPlateau(monitor='val_loss', factor=0.1, patience=5, min_lr=1e-6)
# 训练模型
batch_size = 32
epochs = 50
train_gen = data_generator(train_images_dir, batch_size)
val_gen = data_generator(val_images_dir, batch_size)
history = model.fit(
train_gen,
steps_per_epoch=len(os.listdir(train_images_dir)) // batch_size,
epochs=epochs,
validation_data=val_gen,
validation_steps=len(os.listdir(val_images_dir)) // batch_size,
callbacks=[early_stopping, checkpoint, reduce_lr]
)
# 保存模型
model.save('fire_smoke_detection_model.h5')
# 可视化训练过程
import matplotlib.pyplot as plt
plt.figure(figsize=(12, 4))
plt.subplot(1, 2, 1)
plt.plot(history.history['accuracy'], label='Training Accuracy')
plt.plot(history.history['val_accuracy'], label='Validation Accuracy')
plt.legend()
plt.title('Accuracy')
plt.subplot(1, 2, 2)
plt.plot(history.history['loss'], label='Training Loss')
plt.plot(history.history['val_loss'], label='Validation Loss')
plt.legend()
plt.title('Loss')
plt.show()
代码说明
-
数据生成器:
- 使用自定义的数据生成器
data_generator
来加载和预处理数据。 load_data
和preprocess_data
是自定义函数,用于加载数据和预处理图像及标签。
- 使用自定义的数据生成器
-
模型构建:
- 构建YOLOv3模型,包括Darknet-53骨干网络和三个输出层。
- 模型输出三个尺度的特征图,每个特征图包含边界框的位置和类别的预测。
-
模型编译:
- 使用Adam优化器,学习率为0.0001。
- 损失函数为自定义的
yolo_loss
,该损失函数需要根据YOLOv3的损失函数公式实现。
-
模型训练:
- 使用
fit
方法进行训练,设置早停机制、最佳模型保存和学习率衰减。 - 训练过程中会记录训练集和验证集的准确率和损失。
- 使用
-
可视化:
- 训练完成后,绘制训练集和验证集的准确率和损失曲线,帮助分析模型的训练效果。