烟火检测数据集,烟火火焰火灾数据集无人机视角拍摄,共25000张,coco,yolo,voc,标注fire和smoke类,14GB 火灾数据集 火焰数据集 烟火数据集UAV无人机拍摄,应急救援数据集

 

应急救援数据集,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()

代码说明

  1. 数据生成器:

    • 使用自定义的数据生成器data_generator来加载和预处理数据。
    • load_data 和 preprocess_data 是自定义函数,用于加载数据和预处理图像及标签。
  2. 模型构建:

    • 构建YOLOv3模型,包括Darknet-53骨干网络和三个输出层。
    • 模型输出三个尺度的特征图,每个特征图包含边界框的位置和类别的预测。
  3. 模型编译:

    • 使用Adam优化器,学习率为0.0001。
    • 损失函数为自定义的yolo_loss,该损失函数需要根据YOLOv3的损失函数公式实现。
  4. 模型训练:

    • 使用fit方法进行训练,设置早停机制、最佳模型保存和学习率衰减。
    • 训练过程中会记录训练集和验证集的准确率和损失。
  5. 可视化:

    • 训练完成后,绘制训练集和验证集的准确率和损失曲线,帮助分析模型的训练效果。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值