一、项目背景与需求

视频介绍

【图像算法 - 09】基于深度学习的烟雾检测:从算法原理到工程实现,完整实战指南

今天我们使用深度学习来训练一个烟雾明火检测系统。这次我们使用了大概一万五千张图片的数据集训练了这次的基于深度学习的烟雾明火检测模型,然后在推理的基础上使用PyQt设计了可视化的操作界面。

在这里插入图片描述

二、为什么选择深度学习?

在这里插入图片描述

在烟火检测领域,传统算法与深度学习的技术路径存在本质差异,这些差异直接影响检测效果、适用场景和落地难度。以下从核心逻辑、技术细节、优劣势等维度展开对比,解释两者的不同:

1. 核心逻辑:“人工设计” vs “自动学习”

  • 传统算法:依赖 ”人工设计特征 + 规则判断“
    核心逻辑是:通过人类对烟火的先验知识(如颜色、形状、动态特性),手动设计特征提取规则,再用简单分类器判断是否为烟火。
    例如:

    • 颜色特征:用 HSV 阈值筛选红色 / 橙色区域(火焰典型色)、灰色 / 白色区域(烟雾典型色);
    • 动态特征:通过帧差法检测区域的闪烁(火焰)或缓慢扩散(烟雾);
    • 形状特征:用边缘检测判断是否存在不规则、动态变化的轮廓(火焰)或模糊扩散的区域(烟雾)。
  • 深度学习:依赖 “数据驱动 + 自动特征学习”
    核心逻辑是:无需人工设计特征,通过神经网络从大量标注数据中自动学习烟火的本质特征(包括人类难以描述的细微特征),端到端完成 “输入图像 / 视频→输出是否为烟火” 的判断。
    例如:

    • 用 CNN(如 ResNet、YOLO)自动提取烟火的空间特征(纹理、梯度、高阶组合特征);
    • 用 RNN/LSTM 或 3D-CNN 学习烟火的时间动态特征(如火焰的跳跃、烟雾的流动趋势);
    • 模型通过反向传播不断优化,最终形成对烟火的 “抽象认知”。

2. 技术细节:从特征到泛化能力的全面差异

对比维度传统算法深度学习
特征提取方式手工设计(颜色、形状、运动、纹理等规则)自动学习(神经网络从数据中挖掘深层特征)
数据依赖对数据量要求低(依赖先验规则,无需大量样本)强依赖大规模标注数据(数据量不足易过拟合)
鲁棒性弱(受场景干扰大): - 光照变化(如夕阳误判为火焰)、遮挡(部分遮挡即失效)、复杂背景(如红色广告牌误判)会严重影响效果; - 对烟火形态变化(如小火苗、浓 / 淡烟雾)适应性差。强(复杂场景适应性好): - 能学习到抗干扰特征(如区分火焰与夕阳的细微纹理差异); - 对遮挡、形态变化的容忍度高(通过大量多样本训练实现)。
计算成本低(轻量级算法,可在 CPU / 嵌入式设备运行)高(需 GPU 加速,模型参数量大,计算耗时)
泛化能力差(规则固定,换场景需重新设计特征)强(通过迁移学习可快速适配新场景)
典型方法颜色阈值分割、帧差法、SVM 分类器、AdaBoost 等CNN(ResNet)、目标检测模型(YOLO、Faster R-CNN)、3D-CNN(处理视频)等

3. 适用场景:各有侧重,按需选择

  • 传统算法:适合简单场景、资源受限的场景
    例如:固定摄像头监控空旷区域(如仓库、森林),烟火形态单一、背景简单(无复杂干扰物),且设备算力有限(如嵌入式摄像头、低端 CPU)。

    优势是部署成本低、实时性强(毫秒级响应),但需人工针对场景调参。

  • 深度学习:适合复杂场景、高精度需求的场景
    例如:城市街道(背景复杂,有车辆、行人干扰)、室内场所(光照多变、可能有遮挡),需要区分 “烟火” 与 “类似物”(如红色灯笼、蒸汽)。

    优势是检测精度高、泛化能力强,但需 GPU 支持,部署成本较高(需服务器或边缘计算设备)。

二、数据集

此次训练使用的烟雾明火数据集,有两类,即smoke、fire。然后下面是数据集的统计分析图。一共有10000余火焰目标、近6000的烟雾目标,标签的中心坐标分布比较均匀,居中较多,同时都不靠近边缘;目标,即抽烟目标的长宽同样比较集中,属于小目标的范围(小于图像长宽的0.2倍)。

在这里插入图片描述

三、网络选择

这里我们选择的是yolo11s的网络结构,其参数如下表所示:

# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
# Ultralytics YOLO11 object detection model with P3/8 - P5/32 outputs# Parameters
nc: 80 # number of classes
scales: # model compound scaling constants, i.e. 'model=yolo11n.yaml' will call yolo11.yaml with scale 'n'# [depth, width, max_channels]n: [0.50, 0.25, 1024] # summary: 181 layers, 2624080 parameters, 2624064 gradients, 6.6 GFLOPss: [0.50, 0.50, 1024] # summary: 181 layers, 9458752 parameters, 9458736 gradients, 21.7 GFLOPsm: [0.50, 1.00, 512] # summary: 231 layers, 20114688 parameters, 20114672 gradients, 68.5 GFLOPsl: [1.00, 1.00, 512] # summary: 357 layers, 25372160 parameters, 25372144 gradients, 87.6 GFLOPsx: [1.00, 1.50, 512] # summary: 357 layers, 56966176 parameters, 56966160 gradients, 196.0 GFLOPs# YOLO11n backbone
backbone:# [from, repeats, module, args]- [-1, 1, Conv, [64, 3, 2]] # 0-P1/2- [-1, 1, Conv, [128, 3, 2]] # 1-P2/4- [-1, 2, C3k2, [256, False, 0.25]]- [-1, 1, Conv, [256, 3, 2]] # 3-P3/8- [-1, 2, C3k2, [512, False, 0.25]]- [-1, 1, Conv, [512, 3, 2]] # 5-P4/16- [-1, 2, C3k2, [512, True]]- [-1, 1, Conv, [1024, 3, 2]] # 7-P5/32- [-1, 2, C3k2, [1024, True]]- [-1, 1, SPPF, [1024, 5]] # 9- [-1, 2, C2PSA, [1024]] # 10# YOLO11n head
head:- [-1, 1, nn.Upsample, [None, 2, "nearest"]]- [[-1, 6], 1, Concat, [1]] # cat backbone P4- [-1, 2, C3k2, [512, False]] # 13- [-1, 1, nn.Upsample, [None, 2, "nearest"]]- [[-1, 4], 1, Concat, [1]] # cat backbone P3- [-1, 2, C3k2, [256, False]] # 16 (P3/8-small)- [-1, 1, Conv, [256, 3, 2]]- [[-1, 13], 1, Concat, [1]] # cat head P4- [-1, 2, C3k2, [512, False]] # 19 (P4/16-medium)- [-1, 1, Conv, [512, 3, 2]]- [[-1, 10], 1, Concat, [1]] # cat head P5- [-1, 2, C3k2, [1024, True]] # 22 (P5/32-large)- [[16, 19, 22], 1, Detect, [nc]] # Detect(P3, P4, P5)

四、模型训练

本次训练使用的预训练模型是YOLO11s.pt(COCO数据集训练所得),epochs设置为100,batch设置为16,imgsz设置为640,其他均采用默认参数,训练时间大概4小时。

在这里插入图片描述

五、可视化模型推理

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/94434.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/94434.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/94434.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

间接制冷技术概念及特征

1、基本概念 (1)间接制冷技术即二次制冷技术。常规做法:二次冷却液储液罐增加放置于制冷系统管路,促使冷量再快捷的传递给载冷剂,继而载冷剂冷量促使冷库达到制冷效果。间接制冷技术:通过常压的二次冷却介质进行大循环传送冷量,在直接制冷剂不易应用的位置或者不可运用直…

Antlr学习笔记 01、maven配置Antlr4插件案例Demo

文章目录前言源码插件描述pom引入插件案例:实现hello 标识符 案例1、引入Antlr4的pom运行依赖2、定义语义语法,配置.g4文件实现java代码3、编写完之后,执行命令实现编译4、编写单测测试使用参考文章资料获取前言 博主介绍:✌目前…

PostGIS面试题及详细答案120道之 (101-110 )

《前后端面试题》专栏集合了前后端各个知识模块的面试题,包括html,javascript,css,vue,react,java,Openlayers,leaflet,cesium,mapboxGL,threejs&…

第十七天:原码、反码、补码与位运算

原码、反码、补码与位运算 一、原码、反码、补码 1、原码 定义:原码是一种简单的机器数表示法。对于一个有符号整数,最高位为符号位, 0 表示正数, 1 表示负数,其余位表示数值的绝对值。示例:以 8 位二进制…

一次完整的 Docker 启动失败排错之旅:从 `start-limit` 到 `network not found

一次完整的 Docker 启动失败排错之旅:从 start-limit 到 network not found 你是否也曾自信地敲下 sudo systemctl start docker,却只得到一个冰冷的 failed?这是一个开发者和运维工程师都可能遇到的场景。本文将通过一个真实的排错案例&…

Tdengine 时序库年月日小时分组汇总问题

年月分组select to_char(collection_time ,"yyyy-mm") AS date, cast(SUM(a.stage_value)as DOUBLE) as stage_value from TABLE GROUP BY date年月日分组select to_char(collection_time ,"yyyy-mm-dd") AS date, SUM(a.stage_value)as DOUBLE) as stage_…

数据结构(01)—— 数据结构的基本概念

408前置学习C语言基础也可以看如下专栏:打怪升级之路——C语言之路_ankleless的博客-CSDN博客 目录 1. 基本概念 1.1 数据 1.2 数据元素 1.3 数据项 1.4 组合项 1.5 数据对象 1.6 数据类型 2. 数据结构 2.1 逻辑结构 2.2 存储结构 2.3 数据的运算 在学…

什么是模型并行?

模型并行c 简单来说,就是把一个模型拆开来放到多个 GPU 上,一起训练,从而化解“显存塞不下模型”的问题!更多专业课程内容可以听取工信部电子标准院《人工智能大模型应用工程师》课程获得详解!

跑yolov5的train.py时,ImportError: Failed to initialize: Bad git executable.

遇到的问题&#xff1a; Traceback (most recent call last):File "D:\miniconda\envs\yolov5\lib\site-packages\git\__init__.py", line 296, in <module>refresh()File "D:\miniconda\envs\yolov5\lib\site-packages\git\__init__.py", line 287…

TCP如何实现可靠传输?实现细节?

TCP如何实现可靠传输&#xff1f;实现细节&#xff1f;如何实现可靠传输&#xff1f;拥塞控制的主要机制TCP流量控制怎么实现的&#xff1f;如何实现可靠传输&#xff1f; TCP通过自身的序列号、确认应答、数据效验、超时重传、流量控制、拥塞避免&#xff0c;确保了数据传输的…

Linux 服务器性能监控、分析与优化全指南

Linux 服务器性能监控、分析与优化在现代 IT 架构中&#xff0c;Linux 服务器作为承载业务系统的核心载体&#xff0c;其性能表现直接决定了服务的稳定性、响应速度与用户体验。无论是高并发的 Web 服务、数据密集型的数据库集群&#xff0c;还是承载虚拟化平台的宿主机&#x…

基于wenet和模型做企业直播敏感语音屏蔽技术

本文介绍了基于Wenet语音识别工具包的实时敏感词屏蔽技术方案。该方案通过客户端缓存25秒直播内容&#xff0c;利用Wenet的流式识别和断句检测功能&#xff0c;实时检测讲师语音中的敏感词&#xff0c;并将对应位置的语音替换为"哔"声。文章详细阐述了Wenet的两种识别…

42.MySQL视图

1.一个需求emp 表的列信息很多&#xff0c;有些信息是个人重要信息 (比如 sal, comm, mgr, hiredate)&#xff0c;如果我们希望某个用户只能查询 emp 表的 (empno、ename, job 和 deptno ) 信息&#xff0c;有什么办法&#xff1f;表的数据&#xff1a;想让用户查询到的&#x…

MinIO01-入门

零、文章目录 MinIO01-入门 1、介绍 &#xff08;1&#xff09;介绍 MinIO 是一款基于 Apache License v2.0 的开源对象存储系统&#xff0c;专为海量非结构化数据&#xff08;如图片、视频、日志文件等&#xff09;设计&#xff0c;兼容 Amazon S3 API&#xff0c;支持高性…

*Docker数据卷(Volume)核心机制剖析:持久化与共享的终极解决方案

根本问题当容器被删除时&#xff0c;其内部产生的所有文件&#xff08;包括配置文件、数据库、日志&#xff09;都会不可逆丢失。数据卷&#xff08;Volume&#xff09;通过外置存储方案彻底解决此痛点。一、数据卷与普通容器存储对比实验 场景1&#xff1a;无卷模式下的写入悲…

原型模式在C++中的实现与面向对象设计原则

引言 在软件开发中&#xff0c;原型模式是一种常用的设计模式&#xff0c;主要用于创建对象的克隆。通过原型模式&#xff0c;我们可以避免复杂的对象创建过程&#xff0c;尤其是当对象的初始化需要大量资源或复杂操作时。本文将通过一个具体的例子&#xff0c;详细介绍如何在C…

SpringCloud学习------Gateway详解

在微服务架构中&#xff0c;随着服务数量的激增&#xff0c;如何统一管理服务入口、实现请求路由、保障服务安全等问题日益突出。SpringCloud Gateway 作为 Spring 官方推出的网关组件&#xff0c;凭借其强大的功Gateway 是 Spring 官方基于 Spring、SpringBoot 和 Project Rea…

计算机网络:子网掩码在路由转发中的关键作用

在路由表中,子网掩码是一个不可或缺的组成部分,其核心作用是精确界定IP地址中“网络位”和“主机位”的边界,从而实现路由器对数据包的准确转发。以下从多个角度详细解释其必要性: 1. 区分网络位与主机位,定位目标网络 IP地址由“网络标识”(网络位)和“主机标识”(主…

14.Home-新鲜好物和人气推荐实现

新鲜好物实现1.准备模板<script setup>import HomePanel from ./HomePanel.vue</script><template><homePanel></HomePanel><!-- 下面是插槽主体内容模版<ul class"goods-list"><li v-for"item in newList" :ke…

Linux 系统重置用户密码指南

Linux 系统重置用户密码指南 在 Linux 系统运维中&#xff0c;重置用户密码&#xff08;尤其是 root 密码&#xff09;是一项核心技能。当您忘记密码时&#xff0c;可以通过进入单用户模式或恢复模式来修改密码。此方法适用于大多数 Linux 发行版&#xff0c;如 RHEL/CentOS、D…