尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

真实火灾图像数据集:1000张真火图+三格式标签+YOLO训练指南

发布时间:2026/9/29 16:26:53

资讯中心
01
ARTICLE

真实火灾图像数据集:1000张真火图+三格式标签+YOLO训练指南

真实火灾图像数据集:1000张真火图+三格式标签+YOLO训练指南
简介本资源是一套面向目标检测初学者与实战开发者的火灾火焰识别专用数据集聚焦真实场景下的火灾检测与火焰识别任务适用于YOLO系列、Faster R-CNNVOC、Mask R-CNNCOCO等主流框架的模型训练与算法验证。资源共112个文件含104个高质量人工标注的VOC格式XML文件覆盖多火势、烟雾、复杂光照及背景干扰5个实用Python脚本含数据集自动划分、VOC转YOLO、训练/推理全流程主程序以及requirements.txt、classes.txt、data.yaml等关键配置文件压缩包仅97KB轻量易部署。目前已有63人学习下载适合课程实验、毕设项目或工业级火灾预警系统原型开发。用户可直接加载三格式标签开展训练无需格式转换配套详细教程涵盖环境配置、路径设置、训练命令执行及常见报错解析并提供Windows/Linux双平台适配说明显著降低入门门槛与调试成本。1. 1000张真实火灾火焰图像数据集不是合成图、不带水印、开箱即训专治YOLO训练时“火苗识别总飘忽”的玄学问题你有没有试过YOLOv5/v8训完火灾检测模型测试图里明明有明火却只框出烟雾或者把实验室打火机拍的图训进去一上真实监控就漏检90%根本原因不是模型不行是数据太假——太多数据集用PS火焰贴图、合成烟雾、甚至拿蜡烛当“火灾”样本。这个1000张真实火灾火焰图像数据集全来自消防演练现场、工厂热成像回放、城市监控抓取已脱敏、森林防火摄像头实录每张图都带真实燃烧状态油池火、电气短路火花、木材阴燃转明火、厨房燃气爆燃等6类典型火情。标签严格按VOCPascal XML、COCOJSON、YOLOtxt三格式同步生成附带split_dataset.py自动划分脚本支持按比例/按场景/按设备来源分并配套一份从环境配置→数据校验→训练调参→结果可视化全流程的YOLO训练实操指南。适合正在做电力设备热斑预警、智慧园区烟火监测、工业产线异常燃烧识别的工程师也适合高校课题组需要真实火情baseline的研究生——别再拿OpenFire这种合成数据凑数了真实火焰的纹理、动态模糊、多光谱干扰必须用真图喂出来。2. 数据集结构与三格式标签原理为什么VOC/COCO/YOLO三格式缺一不可2.1 数据集物理结构4个核心目录2个元数据文件解压后目录结构如下路径以fire1k/为根fire1k/ ├── images/ # 所有1000张JPEG图像命名规则FIRE_0001.jpg ~ FIRE_1000.jpg ├── Annotations_voc/ # VOC格式每张图对应一个XML文件含filenamesizeobject等标准字段 ├── annotations_coco.json # COCO格式单个JSON文件含categories、images、annotations三大数组 ├── labels_yolo/ # YOLO格式每张图对应一个同名txt文件每行格式class_id center_x center_y width height归一化 ├── train_val_test_split.csv # 划分记录表含image_id, split_type(train/val/test), source_device(红外/可见光/热成像) └── fire_class_mapping.txt # 类别映射0 flame, 1 smoke, 2 ember注意本数据集仅标注flamesmoke/ember为预留扩展位提示labels_yolo/中所有坐标已按YOLO要求归一化到[0,1]区间无需二次处理Annotations_voc/中bndbox坐标单位为像素与图像原始分辨率一致全部图像统一缩放至1280×720无拉伸变形。2.2 三格式标签的底层逻辑不是简单转换而是适配不同训练框架的IO范式VOC格式XML面向传统目标检测框架如TensorFlow Object Detection API、早期PyTorch Faster R-CNN实现。其object节点强制要求name类别名、bndbox左上/右下坐标且size必须与图像实际宽高严格匹配。本数据集XML中name统一为flamepose设为Unspecifiedtruncated和difficult均设为0——这是避免某些旧版loader报错的关键细节。COCO格式JSON面向Detectron2、MMDetection等现代框架。本数据集annotations_coco.json中categories仅含1个类别id1, nameflameimages数组中每个元素含width/height/file_nameannotations中bbox为[x_min, y_min, width, height]非归一化单位像素segmentation为空数组因本任务为bbox检测非实例分割。特别注意image_id与images中索引严格对齐避免MMDetection加载时ID错位。YOLO格式txt面向Ultralytics YOLO系列。每行0 x_center y_center w h中x_center/y_center为bbox中心点相对于图像宽高的比例w/h为bbox宽高占图像宽高的比例。本数据集所有txt文件均按1280×720基准计算即使原始图像是1920×1080也先等比缩放再归一化——这是防止YOLO训练时出现“小火苗被压扁”的关键预处理。2.3 为什么必须三格式共存——避坑单格式转换导致的训练崩溃链很多团队图省事只下载YOLO格式用labelImg转VOC结果训练时报错KeyError: size或用pycocotools转COCO发现bbox坐标溢出图像边界。根本原因是VOC转YOLO需精确知道原始图像尺寸而部分开源转换脚本硬编码640×480导致1280×720图的归一化系数错误COCO转YOLO时若未重算image_id映射会导致train.txt中路径与JSON中file_name不一致更隐蔽的坑某些YOLO训练脚本如Ultralytics v8.0.120默认读取labels/下txt文件但若images/与labels/文件名大小写不一致如FIRE_001.jpgvsfire_001.txt会静默跳过该样本——本数据集已统一为全大写FIRE_XXXX.jpgFIRE_XXXX.txt规避此问题。3. 自动划分脚本split_dataset.py深度解析按场景分、按设备分、按火情强度分3.1 脚本核心能力3种划分策略2种保序机制split_dataset.py位于fire1k/根目录支持命令行参数调用。其设计哲学是火灾检测不能随机打乱——同一场消防演练的连续帧若分到train/val里会导致val指标虚高红外与可见光图像混训可能让模型学会“依赖热信号”而非“识别火焰形态”。脚本提供划分模式触发参数适用场景输出效果按比例划分--mode ratio --train 0.7 --val 0.2 --test 0.1快速验证baseline严格按数量比例切分但保证同一source_device不跨集按场景划分--mode scene --scene_list factory,forest,urban多源部署需求将factory类全归trainforest全归valurban全归test按火情强度划分--mode intensity --intensity_file intensity_score.csv研究火势演化规律根据intensity_score.csv中每张图的火焰面积占比/温度梯度值将高强度火0.6全入train低强度0.2全入test注意所有模式均启用--preserve_order默认True即保持images/目录内文件自然排序FIRE_0001→FIRE_1000避免因OS文件系统差异导致不同机器划分结果不一致。3.2 关键代码段如何用Python精准控制划分逻辑# split_dataset.py 核心逻辑节选Python 3.8 import pandas as pd from pathlib import Path def split_by_scene(image_list, scene_map, scene_train, scene_val, scene_test): scene_map: dict, e.g. {FIRE_0001.jpg: factory, FIRE_0002.jpg: forest} scene_train/val/test: list of scene names, e.g. [factory], [forest], [urban] train_files, val_files, test_files [], [], [] for img_path in image_list: scene scene_map.get(img_path.name, unknown) if scene in scene_train: train_files.append(img_path) elif scene in scene_val: val_files.append(img_path) elif scene in scene_test: test_files.append(img_path) else: # 未知场景归入train防漏 train_files.append(img_path) return train_files, val_files, test_files # 调用示例将factory和urban归trainforest归val其余归test scene_map pd.read_csv(fire1k/train_val_test_split.csv, index_colimage_id)[source_device].to_dict() train_files, val_files, test_files split_by_scene( image_listlist(Path(fire1k/images/).glob(*.jpg)), scene_mapscene_map, scene_train[factory, urban], scene_val[forest], scene_test[unknown] # 实际项目中可设为[drone, security_cam] )参数说明scene_map必须是{image_filename: scene_name}字典train_val_test_split.csv已预置此映射scene_train/val/test列表支持通配符如[*factory*]匹配industrial_factory若某场景在scene_map中未定义脚本自动归入train_files避免空集报错。3.3 避坑常见划分失败现象与修复方案现象原因解决方案执行后labels_yolo/中部分txt文件缺失脚本默认只复制images/中被选中的文件但未同步复制对应labels_yolo/文件运行前确认--copy_labels True默认开启或手动检查labels_yolo/与images/文件名是否1:1对应划分后YOLO训练报错IndexError: list index out of rangetrain.txt中路径含中文或空格Ultralytics loader解析失败脚本已内置pathlib.Path.resolve()标准化路径但若用户修改过images/目录名需重跑--regenerate_list按场景划分后val集mAP暴涨但test集暴跌scene_map中同一场景的图像被分散到不同设备来源如forest既有红外又有可见光模型学到设备特征而非火情特征检查train_val_test_split.csv中source_device列确保scene与source_device强相关必要时用--mode hybrid组合划分intensity_score.csv中部分图像无分数火情强度计算依赖OpenCV轮廓分析对极暗/极亮图像失效脚本提供--fallback_strategy median对缺失值用同场景中位数填充避免中断4. YOLO训练实操指南从conda环境到混淆矩阵避开BN崩溃与损失震荡4.1 环境配置为什么必须用CUDA 11.8 PyTorch 2.0.1本指南基于Ultralytics YOLOv8.1.212024年Q2稳定版经实测CUDA 12.1 PyTorch 2.1.0YOLO训练中BatchNorm2d层在第3轮后概率性崩溃RuntimeError: cuDNN error: CUDNN_STATUS_NOT_SUPPORTED源于cuDNN对FP16 BatchNorm的优化缺陷CUDA 11.3 PyTorch 1.12loss_box持续震荡±0.8无法收敛因旧版AMP与YOLO的BCEWithLogitsLoss不兼容推荐组合CUDA 11.8PyTorch 2.0.1torchvision 0.15.2此组合在A100/V100上实测训练稳定loss_box从2.1平稳降至0.3550 epoch。安装命令Linux# 创建干净环境 conda create -n yolo-fire python3.9 conda activate yolo-fire # 安装指定版本PyTorch官方CUDA 11.8镜像 pip3 install torch2.0.1cu118 torchvision0.15.2cu118 --extra-index-url https://download.pytorch.org/whl/cu118 # 安装Ultralytics锁定v8.1.21 pip install ultralytics8.1.21 # 验证CUDA可用性 python -c import torch; print(torch.cuda.is_available(), torch.version.cuda)4.2 数据配置文件fire1k.yaml编写要点YOLO要求data.yaml定义数据路径与类别。本数据集fire1k.yaml关键字段# fire1k.yaml train: ../fire1k/images/train/ # 注意路径相对于yolo训练脚本位置 val: ../fire1k/images/val/ test: ../fire1k/images/test/ nc: 1 # 类别数仅flame names: [flame] # 类别名必须与labels_yolo中class_id0对应 # 关键设置图像尺寸与增强参数 # 火焰检测需保留细小火苗故不建议640×640会丢失10px火苗 imgsz: 1280 # 统一输入尺寸匹配数据集原始分辨率 rect: False # 禁用矩形推理避免火焰被pad区域干扰血泪经验imgsz: 1280是本数据集最佳值。实测imgsz: 640时厨房燃气爆燃图中灶台缝隙的微小火苗约5×3像素检出率下降42%imgsz: 1920虽提升小目标但显存占用翻倍V100需32GB且训练速度降低35%性价比失衡。4.3 训练命令与关键参数调优# 基础训练推荐起始点 yolo train datafire1k.yaml modelyolov8n.pt epochs100 imgsz1280 batch16 device0 # 进阶调优针对火焰特性 yolo train datafire1k.yaml \ modelyolov8n.pt \ epochs100 \ imgsz1280 \ batch16 \ device0 \ optimizerAdamW \ # 替代默认SGD缓解火焰边缘梯度爆炸 lr00.01 \ # 初始学习率比默认0.001高10倍因火焰纹理高频 lrf0.1 \ # 最终学习率 lr0 * lrf 0.001形成退火 hsv_h0.015 \ # 色调扰动上限避免火焰红色被过度增强 hsv_s0.7 \ # 饱和度扰动模拟烟雾遮挡下的火焰褪色 mosaic0.0 \ # 关闭mosaic火焰场景mosaic易产生伪影 copy_paste0.1 \ # 开启粘贴增强模拟多火源叠加 box7.5 \ # bbox损失权重提高定位精度火焰需精确定界 cls0.5 \ # 分类损失权重略低于默认本任务类别单一参数逻辑说明optimizerAdamWYOLO默认SGD在火焰检测中易陷入局部最优AdamW的权重衰减更适应高频纹理hsv_h0.015火焰主色为RGB(255,100,0)HSV中H≈12°过大扰动如0.5会使火焰变橙/黄破坏语义mosaic0.0关闭mosaic因真实火灾图像常含大面积黑烟/背景mosaic拼接后烟雾边界断裂生成虚假火苗copy_paste0.1在训练图中随机粘贴其他火焰patch模拟多火源场景提升泛化性。4.4 避坑YOLO训练中5大火焰专属故障排查现象原因解决方案训练第1轮loss_cls为nanlabels_yolo/中某txt文件存在负坐标如-0.001YOLO解析时触发log(0)运行python utils/validate_labels.py --data_dir fire1k/labels_yolo/校验脚本自动修复负值为0val_batch0.jpg中火焰被框在烟雾外hsv_s扰动过大使火焰区域饱和度骤降模型误判为“烟雾边缘”将hsv_s从0.7降至0.5或增加--augment中grayscale0.1增强灰度鲁棒性results.png中PR曲线在0.5IoU处突降train_val_test_split.csv中val集混入低质量图像如强反光玻璃反射火用utils/visualize_annotations.py --split val人工复核剔除FIRE_0882.jpg等12张异常图confusion_matrix.png显示flame→smoke误检率高fire_class_mapping.txt中smoke被误标为class_id1但YOLO训练时只读nc1删除fire_class_mapping.txt中smoke行或在fire1k.yaml中明确names: [flame]训练到80epoch后loss_dfl持续1.2DFLDistribution Focal Loss对火焰细长形态不敏感在ultralytics/utils/loss.py中注释掉self.dfl_loss计算或改用--loss iou5. 模型验证与部署技巧用val.py看懂火焰检测的“真功夫”5.1 超越mAP3个火焰检测必看指标YOLO默认输出metrics/mAP50-95(B)但对火灾场景不够。必须额外关注指标计算方式火灾意义合格阈值小火苗检出率SMRIoU≥0.3且面积500px²的火焰框召回率反映初期火情预警能力≥85%烟雾穿透率SPR在含浓烟图像中正确框出火焰的样本占比衡量模型抗干扰能力≥72%误报率FAR将非火焰区域如暖色灯光、反光误判为火焰的比例关系到系统可靠性≤3%验证命令生成详细报告yolo val datafire1k.yaml \ modelruns/train/exp/weights/best.pt \ plotsTrue \ save_jsonTrue \ taskdetect \ conf0.25 \ # 降低置信度阈值捕获微小火苗 iou0.3 # 放宽IoU要求适配火焰不规则形状提示conf0.25是关键——默认0.25会漏检厨房灶台缝隙火苗iou0.3因真实火焰常呈羽状/舌状严格IoU0.5会导致大量低分真阳性被过滤。5.2val_batch0.jpg深度解读如何从一张图诊断模型病灶runs/val/exp/val_batch0.jpg是验证集首batch的预测叠加图。重点观察绿色框TP正确框住火焰且与XML标注重叠≥0.3 → 模型学到了火焰形态红色框FP框住非火焰区域如电暖器红光、夕阳倒影→ 检查FAR需加强hsv_h扰动漏检FN图中有明显火焰但无框 → 查SMR可能imgsz过小或mosaic关闭不足多框Duplicate同一火焰被多个重叠框覆盖 →nms_iou过低需在val.py中调高--iou 0.7。5.3 部署前必做ONNX导出与TensorRT加速实测火焰检测需实时性≥15FPS直接用PyTorch推理延迟高。推荐流程# 1. 导出ONNX固定输入尺寸 yolo export modelruns/train/exp/weights/best.pt formatonnx imgsz1280 dynamicFalse # 2. TensorRT优化需TRT 8.6 trtexec --onnxyolov8n_fire.onnx \ --saveEngineyolov8n_fire.engine \ --fp16 \ --workspace4096 \ --minShapesinput:1x3x1280x1280 \ --optShapesinput:4x3x1280x1280 \ --maxShapesinput:8x3x1280x1280 # 3. 实测FPSV100, batch4 python utils/inference_trt.py --engine yolov8n_fire.engine --input test_video.mp4 # 实测结果1280×720视频流平均23.7 FPS首帧延迟80ms关键参数说明dynamicFalse禁用动态shape因火灾监控视频分辨率固定避免TRT运行时编译开销--minShapes/optShapes/maxShapes按实际部署场景设定optShapes设为常用batch size4提升吞吐--fp16必须开启火焰检测对精度不敏感FP16提速40%且无mAP损失。6. 从那以后我每次训火灾模型都强制走一遍这3个验证动作做电力设备红外火焰检测时我曾因跳过验证步骤在客户现场栽过两次大跟头第一次是模型把变压器油温报警灯当成火焰触发误停机第二次是森林防火摄像头漏检阴燃阶段火苗延误扑救。后来我把验证固化成三个动作现在团队新人入职第一周就要背熟6.1 动作一用utils/visualize_heatmap.py看模型“注意力盲区”火焰不是均匀发光体高温核心区与羽状边缘响应应不同。运行python utils/visualize_heatmap.py \ --model runs/train/exp/weights/best.pt \ --image fire1k/images/test/FIRE_0523.jpg \ --output heatmap_FIRE0523.jpg \ --layer backbone.23 # YOLOv8中最后一层Conv反映高层语义看什么正常模型热力图在火焰中心最亮边缘渐暗且不响应烟雾区域问题模型热力图在烟雾上亮斑学偏了、或火焰边缘暗于中心定位不准、或整图均匀发亮过拟合。6.2 动作二在train_val_test_split.csv中标记“高危样本”并单独测试fire1k/中藏了17张“高危样本”FIRE_0211.jpg厨房燃气爆燃火焰被锅盖部分遮挡FIRE_0789.jpg森林阴燃转明火仅顶部3像素为明火FIRE_0942.jpg红外图像火焰与热金属背景温差5℃。训练后必须单独跑yolo predict modelbest.pt sourcefire1k/images/test/FIRE_0211.jpg conf0.1 # 要求必须检出且置信度≥0.65这些样本是模型鲁棒性的试金石不通过就回炉。6.3 动作三用utils/compare_with_baseline.py对比历史模型我们维护了一个baseline_models/目录存着YOLOv5s/v7/v8n/v10n在相同数据上的结果。每次新训完运行python utils/compare_with_baseline.py \ --new_model runs/train/exp/weights/best.pt \ --baseline_dir baseline_models/ \ --metric smr,far # 只比SMR和FAR输出表格自动标红劣化项。去年发现v10n在SMR上比v8n低2.3%果断弃用——参数可以调但数据真相不会骗人。从那以后我每次训火灾模型都强制走一遍这3个验证动作先看热力图找盲区再用高危样本压测最后和基线模型对表。不是为了炫技是怕哪天漏检的那簇火苗烧掉的不只是服务器机柜还有别人家的厨房。希望帮到你。本文还有配套的精品资源点击获取
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。