新闻详情

新闻详情

首页 / 资讯中心 / 详情

240张火焰烟雾图像,用YOLOv8训练自己的检测模型

发布时间:2026/9/14 3:40:34来源:尧图网络
240张火焰烟雾图像,用YOLOv8训练自己的检测模型
简介此数据集聚焦火焰、烟雾与正常三类场景的图像分类共包含约240张已标注图片已有110人学习下载适合图像分类初学者、烟火检测项目开发者以及需要小型标注数据集验证模型流程的研究者使用。压缩包共243个文件以240张JPG图片为核心另提供1个Python可视化脚本、1个目录结构PNG和1个包含标签信息的JSON文件整体约504KB轻量便携目录按类别整理结构与标注信息一目了然。数据已划分训练集与测试集同一类别的图片集中存放便于按目录加载JSON文件明确了各样本所属类别show脚本可快速可视化样本帮助使用者直观检查数据分布与标注质量免去自行整理的繁琐。这份小规模已标注数据可用于CNN分类网络的快速原型验证、YOLOv5分类分支的配置测试也可支撑课程设计或论文前期实验对想要快速跑通图像分类流程的读者尤其友好。1. 240张已标注的火焰、烟雾、正常图像正好卡在能训练和不能训练的边界上240张带标注的火焰、烟雾、正常图像放在真实项目里是个尴尬又典型的规模。指望它直接训出一个能过验收的工业级识别模型不现实但它恰好是验证yolov8训练自己的数据集全流程的最小样本量迁移学习能覆盖、数据增强能救、评估还能暴露问题。对需要快速建立火焰烟雾检测baseline、做边缘设备原型验证或者打算用半监督方式起步的工程师来说这份数据集已经替你完成了最耗时的数据标注环节你把精力留给划分、增强和评估就行。用之前先想清楚一件事小数据集的挑战不在训练而在你怎么验证它没白训以及能不能设计一个持续回灌数据的闭环。2. 火焰烟雾数据集的标注格式核对与label质量体检拿到标注好的数据第一件事不是急着训练而是确认标注格式和label质量。数据标注环节埋下的坑比模型训练里的更隐蔽240张的小规模下几个坏标注就能把验证集指标带偏。2.1 先分清YOLO txt、COCO JSON和VOC XML三种标注格式常见做法是数据集只提供一种格式或者三种都给了。绝大多数检测训练流程用的是YOLO格式因为yolov8和yolov5原生支持省去转换步骤。YOLO格式是每张图像对应一个同名txt文件每行一个标注框class_id x_center y_center width height坐标是归一化到0-1的相对值类别id从0开始。COCO JSON是单文件汇总全部标注VOC XML是每张图一个xml文件。三种格式的取舍看下表格式文件组织坐标类型常见工具适配框架YOLO txt每图一个txt归一化中心点宽高labelimg、CVATYOLO系列COCO JSON单JSON含全部标注像素级左上角宽高CVAT、coco-annotatorDetectron2、MMDetectionVOC XML每图一个xml像素级左上角右下角labelimg、labelme图像标注老版框架、MMDetection先用Python脚本确认这240张数据到底是哪种格式。以YOLO格式为例import os from collections import Counter, defaultdict label_dir labels/train stats Counter() area_stats defaultdict(list) for fname in os.listdir(label_dir): if not fname.endswith(.txt): continue with open(os.path.join(label_dir, fname), r, encodingutf-8) as f: for line in f: parts line.strip().split() if len(parts) ! 5: print(f格式异常: {fname} - {line.strip()}) continue cid int(parts[0]) w, h float(parts[3]), float(parts[4]) stats[cid] 1 area_stats[cid].append(w * h) print(类别出现次数:, dict(stats)) for cid, areas in area_stats.items(): print(f类别{cid}: 平均归一化面积 {sum(areas)/len(areas):.4f})这段脚本干三件事检查txt每行是否5个字段、统计每个类别的框数量、累计框的归一化面积。类别id的含义要和classes.txt对一眼最常见的坑是类别名和id错位比如classes里写的是fire、smoke、normaltxt里0、1、2的顺序却是反的。240张图全部跑完不到一秒钟顺手就完成了数据标注格式的体检。2.2 用CVAT或LabelImg抽检重点看半透明烟雾的标注边界240张图不算多花2到3小时人工抽检完全值得。用cvat标注工具打开数据集或者用LabelImg逐张过重点看三类问题。第一烟雾框是否把整团烟都框住了烟雾是半透明的标注经常只框浓烟中心漏了淡烟边缘模型学到的烟雾特征会偏浓部署时对淡烟完全不敏感。第二火焰和烟雾重合时标注策略是否统一是火焰优先还是重叠区域记成烟雾不同标注者习惯不同混用会让模型在重合区域输出摇摆的置信度。第三正常类别是否包含近火场景比如橙色灯光、红色尾灯、晚霞这类Hard Negative直接决定误报率。在设计标注准则时可以像写图像标注提示词那样把边界情况列成明确条目火焰与烟雾重叠时火焰优先、晚霞和路灯不标为火焰按统一规则执行比事后抽检更早规避一致性风险。提示发现同一图像中重叠目标的标注策略不一致时建议自己定一条简单规则火焰框优先烟雾只标与火焰不重叠的部分再用CVAT按规则批量修正。标注一致性比标注精细度更影响小模型的收敛。2.3 统计类别不平衡决定先做重采样还是改loss权重240张图里如果火焰框有300个烟雾框只有90个就是典型的不平衡。检测模型按正样本框数量参与loss计算少数类被多数类压住会表现为recall偏低。处理顺序建议是先看原始分布再优先用数据增强补少数类比如对烟雾样本多做水平翻转和1.1到1.3倍缩放不要一上来就改loss权重240张的训练量改权重很容易在验证集上过拟合。另外正常类别如果以空背景图形式存在训练时会作为纯负样本参与背景分类这类样本数量越接近火焰图像的一半越好少了会导致背景误报。如果normal本身有框需要再看框住的是什么对象避免检测头把无关物体当成第四类隐式目标来拟合。3. 在YOLOv8上训练火焰烟雾识别模型的最小可复现流程格式核对完正题开始yolov8训练自己的数据集。240张数据能不能训起来前提是用预训练权重做迁移学习这是深度学习图像识别在小样本场景下能成立的根本原因。从零初始化卷积核模型会在前几十轮就把特征偏向数据里的偶然纹理预训练权重则把底层的边缘、颜色、形状先验带过来。3.1 按7:2:1分组划分并固定随机种子240张图的划分要格外小心。如果数据里存在同一场景的多张连续截图直接随机划分会让训练集和验证集出现近亲验证指标虚高真实场景一测就露馅。稳妥做法是先按图像来源或文件名前缀分组再把组整体划入不同split没有来源信息时至少按文件名排序后固定随机种子再切。下面这段划分脚本可以直接执行import random from pathlib import Path imgs sorted(Path(images).glob(*.jpg)) random.seed(42) random.shuffle(imgs) n len(imgs) splits { train: imgs[:int(n * 0.7)], val: imgs[int(n * 0.7):int(n * 0.9)], test: imgs[int(n * 0.9):], } # 按YOLO目录约定整理: images/{split} 与 labels/{split} 同级 for split, plist in splits.items(): for p in plist: dest_img Path(data/images) / split / p.name dest_img.parent.mkdir(parentsTrue, exist_okTrue) p.rename(dest_img) lbl Path(labels) / (p.stem .txt) if lbl.exists(): lbl.rename(Path(data/labels) / split / lbl.name) for split, plist in splits.items(): print(split, len(plist))参数说明random.seed(42)固定划分结果保证后续改动可复现train/val/test按7:2:1落到约168/48/24张。test这24张一旦划出就不能再参与任何调参、改阈值、选epoch的决策否则你对测试集做的每次调整都会让评估结果失真。val和test可以并小但先后顺序不能颠倒。3.2 编辑data.yaml并配置增强参数YOLOv8的数据配置集中在一个yaml文件里path: /data/fire_smoke train: images/train val: images/val test: images/test nc: 3 names: 0: fire 1: smoke 2: normalnc: 3和names顺序必须和前面检查的classes.txt一致。normal的语义在2.3节确认过空txt的背景图是负样本有框的normal则是独立类别两者处理方式不同混淆会直接影响背景误报率。训练命令和增强参数yolo detect train \ modelyolov8n.pt \ datafire_smoke.yaml \ epochs150 \ imgsz640 \ batch16 \ mosaic1.0 \ close_mosaic10 \ hsv_h0.02 hsv_s0.7 hsv_v0.5 \ fliplr0.5 \ scale0.5 \ device0关键参数的解释和推荐值参数推荐值作用与理由modelyolov8n.ptnano级预训练权重240张数据用s以上更容易欠拟合epochs150小数据集收敛慢配合val loss做早停mosaic1.0前140轮马赛克增强有效扩充上下文close_mosaic10最后10轮关闭mosaic恢复目标真实尺寸分布hsv_h0.02色相抖动要小火焰橙色范围窄抖动过大颜色失真scale0.5随机缩放0.5到1.5倍烟雾形状多变但小火焰会缩没close_mosaic10是最容易被忽略的参数。mosaic把四张图拼成一张目标尺度分布和真实场景差异很大一直开到训练结束模型会在小目标检测上退化。v8默认值是10但如果你的数据里火焰占比普遍很小可以把close_mosaic提到15给模型更多轮次适应真实尺度反之火焰占满全图的样本多降到5问题也不大。3.3 训练监控看哪两条曲线判断过拟合训练起来不要只盯mAP小数据集上主要看两条曲线train/box_loss与val/box_loss的间距以及val/cls_loss是否回升。如果val loss从第80轮开始抬头而train loss还在降就是过拟合信号直接用patience早停别硬跑150轮。训练结束后best.pt和last.pt的指标如果差距超过2个点说明后期震荡严重优先用best.pt做后续所有验证。yolo detect val modelruns/detect/train/weights/best.pt datafire_smoke.yaml输出里能看到每类的precision、recall、mAP50和mAP50-95。小数据集上mAP50-95整体偏低是正常的烟雾边界模糊IoU阈值提高后框贴合度对标注精度极其敏感重点看mAP50和每类recall就够了。4. 火焰烟雾检测模型在小数据集上的评估陷阱mAP可信度与漏检定位240张图训出来的模型在单一测试集上的mAP波动可能很大。评估要做两层先用交叉验证估计真实水平再逐类看PR曲线定位漏检两步缺一不可。4.1 用5折交叉验证替代单次7:2:1划分单次划分下测试集只有约24张换一次随机种子mAP50可能上下浮动5到8个点根本分不清是模型进步还是划分运气。稳妥做法是test先冻结不用把trainval约192张做5折交叉验证每折独立训练并记录验证集指标最后取均值和标准差。from pathlib import Path from sklearn.model_selection import KFold imgs sorted(Path(data/images/train).glob(*.jpg)) \ sorted(Path(data/images/val).glob(*.jpg)) kf KFold(n_splits5, shuffleTrue, random_state7) for fold, (tr_idx, va_idx) in enumerate(kf.split(imgs)): train_list [imgs[i] for i in tr_idx] val_list [imgs[i] for i in va_idx] # 写 fold{fold}/train 与 fold{fold}/val 的 images/labels 软链接 # 每折调用 yolo detect train ... datafold{fold}.yaml # 记录 val mAP505折结束后输出 mean±std计算逻辑每折相当于重新训练一次完整模型5个val mAP50的均值代表该数据规模下模型的期望水平标准差代表数据划分敏感度。如果均值还行但标准差超过3个点说明数据本身分布不稳后续该补的是场景多样性而不是单纯加帧数。交叉验证的代价是5倍训练时间240张图的nano模型单折在消费级GPU上不到10分钟完全跑得起。4.2 烟雾半透明特性导致的系统性漏检漏检不是均匀分布的。火焰有高亮中心和锐利边缘YOLO的特征层很容易抓住烟雾是半透明渐变颜色从灰白到浅蓝边缘模糊背景透光进来特征图和墙面、云层高度相似。典型漏检场景集中在两类淡烟扩散区标注不全模型学到的烟雾特征偏浓傍晚低色温下的烟颜色偏暖和砖墙、路灯底座在特征空间里距离很近置信度压在阈值下面。遇到这类问题先看confusion matrix确认是recall问题再针对性补Hard Negative样本不要直接上直方图均衡之类的预处理。训练和部署管线不一致会让线上效果更难收敛也不会提升模型对半透明目标的语义理解。4.3 用逐类recall和混淆矩阵定位具体瓶颈YOLOv8验证完会在runs/detect/val/下输出confusion_matrix.png。对240张规模更实用的是把逐类指标拉成一张表类别训练box数验证recall50典型误分类fire3120.91与smoke重叠区漏检smoke960.73与background混淆normal240(背景)0.95无烟雾类recall明显低时优先做两件事在训练集中补带淡烟扩散的样本或把烟雾类的NMS阈值从0.5放宽到0.45保留更多低置信度框配合帧间投票去抖。阈值放到0.4以下不建议框数量暴涨且误报率上升240张数据训出的模型扛不住这种噪声宁可漏检也别把每帧都判成火警。5. 240张火焰烟雾标注数据的落地技巧测试时增强与伪标签回灌数据量就这么大还能榨的价值基本在推理侧和数据闭环。5.1 测试时增强不重训也能涨点YOLOv8推理时加--augment参数推理阶段对每张图做多尺度、翻转的多次前向再融合小数据集模型通常能提升1到3个点recallyolo detect predict \ modelruns/detect/train/weights/best.pt \ sourcetest_images/ \ conf0.25 \ augmentTrue \ save_txtTrue代价是推理时间乘以3到5倍适合离线分析、报表生成不适合边缘设备实时推理。5.2 伪标签挑选规则与半监督扩展240张要扩数据最稳的路径是伪标签用当前模型预测一批无标注图只保留高置信度且无重叠框的图像人工快速确认后并入训练集。挑选条件参考下表条件建议值理由单框最高置信度 0.7更低容易引入错误框同一区域重叠框数 1重叠多说明模型不确定新增类别比例与现有分布接近防止类别倾斜恶化筛选后的预测txt直接并入labels重训一轮。循环两三轮烟雾recall通常能稳定上修这是半监督学习标注yolo在检测任务里最朴素的落地形态。注意每轮新增数据量控制在原规模的30%以内避免一次引入过多噪声。5.3 帧级投票阈值把单帧检测变成时间判决部署到视频流时单帧conf0.5会产生大量闪烁误报。工程上常用连续N帧至少M帧检出的投票逻辑比如5帧中至少3帧检出火焰才触发报警。这个N和M不需要改模型直接在推理循环外层做滑动窗口统计。240张小数据训出的模型帧级投票抑制误报的效果通常比调conf更明显因为置信度抖动在时间维度上被平均掉了。最后一招是维护一个错例回灌夹线上误报和漏检截图定期整理、标注、并入训练集。240张起步的火焰烟雾模型前50张高质量回灌带来的收益往往大于连续调一个月NMS和阈值参数。本文还有配套的精品资源点击获取
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

ESP32-C3+DDSU666电表数据采集:Modbus转MQTT与OTA远程升级实践 2026/9/14 4:28:38

ESP32-C3+DDSU666电表数据采集:Modbus转MQTT与OTA远程升级实践

简介:基于ESP32-C3与DDSU666智能电表的数据采集与MQTT物联网传输系统,是一套面向物联网开发者及嵌入式学习者的完整工程示例,项目以低功耗WiFi/蓝牙双模MCU为核心,实现电表数据实时采集与MQTT可靠传输,并集成WiFi配网、…

阅读更多 →
AI写作工具如何革新学术论文写作流程 2026/9/14 4:28:38

AI写作工具如何革新学术论文写作流程

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
荧光原理与检测实战:从斯托克斯位移到量子产率 2026/9/14 4:28:38

荧光原理与检测实战:从斯托克斯位移到量子产率

你有没有过这样的经历:商场里有人穿着白T恤,在紫光灯下一照,整件衣服都在发蓝紫色的光,大家管这叫“夜光衣”,其实严谨点说,那是荧光。我第一次在紫外灯下看自己的工牌号码亮起来的时候,也愣了几…

阅读更多 →
wgpu 多渲染目标(MRT)实战:一次 Render Pass 同时输出到多个颜色附件 2026/9/14 4:28:38

wgpu 多渲染目标(MRT)实战:一次 Render Pass 同时输出到多个颜色附件

wgpu 多渲染目标(MRT)实战:一次 Render Pass 同时输出到多个颜色附件 【免费下载链接】wgpu A cross-platform, safe, pure-Rust graphics API. 项目地址: https://gitcode.com/GitHub_Trending/wg/wgpu 本指南以 wgpu 仓库中 multipl…

阅读更多 →
fairseq 非自回归机器翻译(NAT)训练脚本全解:NAT、iNAT、InsT、CMLM 与 Levenshtein Transformer 实战指南 2026/9/14 4:28:38

fairseq 非自回归机器翻译(NAT)训练脚本全解:NAT、iNAT、InsT、CMLM 与 Levenshtein Transformer 实战指南

fairseq 非自回归机器翻译(NAT)训练脚本全解:NAT、iNAT、InsT、CMLM 与 Levenshtein Transformer 实战指南 【免费下载链接】unilm Large-scale Self-supervised Pre-training Across Tasks, Languages, and Modalities 项目地址: https://…

阅读更多 →
iCloud 照片下载老断线?icloudpd 网络故障 5 招解决 2026/9/14 4:25:38

iCloud 照片下载老断线?icloudpd 网络故障 5 招解决

iCloud 照片下载老断线?icloudpd 网络故障 5 招解决 【免费下载链接】icloud_photos_downloader A command-line tool to download photos from iCloud 项目地址: https://gitcode.com/GitHub_Trending/ic/icloud_photos_downloader icloudpd 是一个从 iClou…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞