【小应用】使用深度学习和OpenCV的火灾检测系统

2023-11-06

  创建自定义的InceptionV3和CNN架构用于室内和室外火灾检测。
  本文为翻墙阅读的国外博客的翻译,亲测代码可实现。
        在这里插入图片描述
  嵌入式技术的最新进展已使基于视觉的系统可以在监视过程中使用卷神经网络来检测火灾。
  在本文中,实现了两个自定义CNN模型作为监视视频的经济有效的CNN架构。第一个模型是受ALexNet架构启发的一个定制基础CNN架构,我们将实现并查看其输出和限制,并创建一个定制的InceptionV3模型。为了平衡效率和精度,考虑目标问题和火灾数据对模型进行微调。我们使用三个不同的数据集训练我们的模型。数据集的链接:
  [1]火灾检测数据集:https://www.kaggle.com/atulyakumar98/test-dataset
  [2]火灾数据集:https://www.kaggle.com/phylake1337/fire-dataset
  [3]DeepQuestAI/火灾、烟雾数据集:https://github.com/DeepQuestAI/Fire-Smoke-Dataset
接下来看代码部分。

1.创建定制的CNN架构

  我们使用TensorFlow的API Keras构建我们的模型。让我们首先创建我们的ImageDataGenerator用于标记数据。【1】【2】数据集用来训练。最后我们将提供980个训练图像和239个验证图像,也使用数据增强。
在这里插入图片描述
  上面的代码,应用了3种数据增强技术:水平翻转、旋转、高度变化。
  现在我们创建我们的CNN模型,这个模型包含了三个Conv2D-MaxPooling2D层对;紧接着是3个密集连接层;为了克服过拟合的问题,我们增加了dropout层;最后一层是softmax层,给我们提供火灾和非火灾的两个类别的概率分布。通过将类别的数量定为1,还可以在最后一层使用sigmoid激活函数。
在这里插入图片描述
  我们使用Adam作为优化策略,学习率使用0.0001.在训练50epoch之后,我们得到训练精度为96.83并且验证集损失为94.98.训练和验证损失分别为0.09和0.13。
模型的训练过程
  用任何图像测试模型,看看它是否可以正确预测出。为了测试,我选择了3个图像包括一个火灾图像、没有火的图像和包含火样颜色和阴影的我的照片 。
  这里我们可以看到,我们上面创建的模型在分类我的图片的时候出现错误。这个模型52%确定这个图像有火焰。这是因为数据集中几乎没有室内火焰的图像来使模型学习,因此这个模型仅仅知道室外火焰,当给模型输入类似室内火焰的阴影图像时会出错。另一个原因是我们的模型并不复杂,不能学习到火的复杂特征。
  我们接下来要做的是,使用一个标准的InceptionV3 模型并对其自定义。复杂的模型能够学习图像的复杂特征。

2.创建自定义inceptionV3模型

  这次我们使用了一个不同的数据集,数据集【3】,这个数据集包含了室外和室内的火灾图像。在这个数据集上,我已经训练过我们之前的模型(1中定义的模型),但是结果出现了过拟合,这是因为这个模型不能处理相对大的数据集也不能从图像中学习复杂的特征。
  让我们开始为我们的自定义InceptionV3模型创建ImageDataGenerato。这个数据集包含3个类别,但是本文中,我们仅仅使用了其中两个类。它包含1800个训练图像和200个验证图像。并且我增加了8张客厅图像来增加数据集的噪声。
在这里插入图片描述
  为了让训练更加准确,我们可以使用数据增强技术,在上述的代码中,我们使用了2个数据增强技术:水平翻转和缩放。
  让我们从Keras API中导入我们的InceptionV3模型。我们将会在InceptionV3模型的顶部增加我们的层,如下所示。我会添加一个全局空间平均池化层,然后之后是2个密集连接曾和两个dropout层来确保不会发生过拟合;在最后我们会为2个类别增加一个softmax激活的密集层。
  接下来,我们首先训练我们增加的层,并且随机初始化这些层的参数,我们使用RMSprop优化器。
在这里插入图片描述
  在训练我们的层20epoch之后,我们会冻结模型的249层,训练剩下的部分(既顶部的2个inception块)。这里我们使用SGD优化器,学习率为0.0001。
在这里插入图片描述
  在训练10epoch之后,我们得到训练精度为98.04并且验证集精度为96.43。训练和验证损失分别为0.063和0.118。
在这里插入图片描述
上述10epoch的训练过程
  让我们用相同的图片(上述的三种类型的图片)测试我们的模型,看它是否能预测正确。
  这次我们的模型3个图片都预测正确,它96%确定我的图片中不包含或,其他两个图片是:
在这里插入图片描述

3.实时测试

  现在我们的模型已经准备好在实际场景中进行测试,以下的代码是使用OpenCV去获取我们的网络摄像头,并预测每一帧是否包含火。如果一个帧包含火,我们改变这一帧的颜色为B&W。
在这里插入图片描述
  以下是上述代码的实时输出
在这里插入图片描述
  这个项目的Github链接为:https://github.com/jackfrost1411/fire-detection你可以发现数据集和所有的代码都在这。

4.结论

  使用智能相机,你可以识别各种可疑事件,例如碰撞、医疗紧急情况和火灾。其中火灾是最危险的异常事件,因为在早期阶段无法控制火灾会导致巨大的灾难,从而造成人员、生态和经济损失。受CNN巨大的潜力的启发,我们可以在早期阶段从视频或者图片中检测火灾。这篇文章展示了两个自定义模型用于火灾检测。考虑到火灾检测CNN模型的检测精度,它可以帮助火灾管理团队及时管理火灾,从而避免巨额损失。
  
  
  
  

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【小应用】使用深度学习和OpenCV的火灾检测系统 的相关文章

随机推荐

  • 关于show arp表,显示Incomplete问题

    最近出现一个问题 在核心交换机上查看交换机的ARP表的时候 很多ARP表项目会显示如信息 Internet 172 21 6 1 0 Incomplete ARPA 这表示没有学习到IP地址的mac地址 找了很久 终于找到问题 写下来分享一
  • Microsoft SQL Server Management Studio附加数据库时出错。有关详细信息,请单击“消息”列中的超链接。

    附加数据库时出错 有关详细信息 请单击 消息 列中的超链接 导入别人的项目时导入mdf和ldf数据库文件时 附加数据库出错 这是由于文件夹的权限问题 详细解决办法如下图所示 我们编辑ldf和mdf文件的上级目录数据库文件夹 gt 数据库文件
  • SPRINGBOOT的常用注解

    Spring是用来管理业务层的框架 通过集成持久层框架也可以用来管理持久层 主要的两大功能是控制反转和面向切面编程 主要目的是实现程序的解耦 SpringMVC是用来管理控制层的框架 主要是实现和WEB的交互 注意不要直接在控制层编写业务代
  • vue antv X6流程图

    第一 下载2 0插件 第二 引入代码
  • 外包公司值不值得去?

    一 目录 1 什么是外包岗位 2 外包岗位的优缺点 3 外包岗位面试有什么特点 二 前言 在我们IT行业 外包公司主要分为 人力外包 和 项目外包 人力外包指的是On Site形式 就是员工的工作地点在客户公司的内容 项目外包 的形式指的是
  • Linux的主次设备号

    主设备号用于区分不同种类的设备 次设备号用来区分同一类型的多个设备 在linux代码中 主次设备号是由dev t来定义的 高12位代表主设备号 低20位代表次设备号 比如 字符型设备 其中主设备号是4 代表着tty类类型的设备 而次设备号则
  • Elasticsearch的倒排索引理解

    Elasticsearch的倒排索引 1 把原文档进行分词 并找出单词所在文档编号 2 分词后的单词 在不同文档中出现的次数 TF 3 分词后的单词 在不同文档中出的次数 TF 位置 POS 4 名词解释 单词ID 记录每个单词的单词编号
  • EEG脑电信号处理--维基百科专业词汇解释

    脑电图分析 脑电分析是利用数学信号分析方法和计算机技术 从脑电信号中提取信息 脑电图分析的目标是帮助研究人员更好地了解大脑 协助医生进行诊断和治疗 以及促进脑 计算机接口 BCI 技术的使用 有很多方法可以粗略地对脑电图分析方法进行分类 用
  • STM32 SPI方式读写SD卡

    前段时间在51上模拟SPI实现了对SD卡的读取 效果还算不错 最近将其移植到STM32上 不过使用硬件SPI和使用软件SPI还是有差别的 代码如下 void User SPIInit void GPIO InitTypeDef GPIO I
  • QT中获取系统当前用户名

    代码 这里使用的是qgetenv 哦 感觉很简洁就记录一下 include
  • Java的基本语法

    上一篇分享了IDEA的安装 想必大家在知道我在开始学习JAVA了 今天我就来分享这几天学习Java的基本语法 Java基本语法就是指java中的规则 也是一种语言规则 规范 同时也能让您在后面的学习中避免不必要的一些错误和麻烦 是您学好ja
  • python中iloc的用法示例

    得到属性名 第一行数据 数据类型 print data iloc 0 No 1 square feet 150 loaction 4 built 10 price 6450 Name 0 dtype int64 得到属性名 第二行数据 数据
  • docker-compose部署Nginx

    docker挂载文件时会覆盖掉容器里面的目录 因此需准备一份默认的配置文件 准备配置文件 临时启动nginx容器 拷出默认配置文件 启动nginx docker run d name tmp nginx nginx latest 拷出默认配
  • cesium解决报错“DeveloperError: _workerName must be defined for asynchronous geometry”

    文章目录 1 报错问题 2 解决方法 Cesium实战系列文章总目录 传送门 1 报错问题 在使用Primitive方式加载Geojson数据时 报错An error occurred while rendering Rendering h
  • Qt窗口程序所有窗口关闭后进程不退出

    Qt窗口程序所有窗口关闭后进程不退出 Qt窗口程序在所有窗口关闭 Application对象的exec函数返回 main函数结束 程序结束 进程退出 如何实现关闭依然不退出 调用QApplication的函数 setQuitOnLastWi
  • YOLOv5-第Y1周:调用官方权重进行检测

    YOLOv5 第Y1周 调用官方权重进行检测 YOLOv5 第Y1周 调用官方权重进行检测 一 前言 二 我的环境 三 下载源码 四 运行代码 五 视频检测 八 总结 YOLOv5 第Y1周 调用官方权重进行检测 一 前言 本文为 365天
  • Java中的进制转换

    Java中的进制转换 十进制转成十六进制 Integer toHexString int i 注意转换后字母默认为小写 十进制转成八进制 Integer toOctalString int i 十进制转成二进制 Integer toBina
  • 政企云平台“一云多芯”路线全景图

    一云多芯 成为政企云平台可被信赖的关键 近年来 一云多芯 成为云计算领域的一个热词 不仅代表着云平台向着开放化标准化发展 也反应出政企守护 IT安全生命线 的刚性要求 狭义的 一云多芯 是指在一个云平台内可同时采用多种异构CPU等类型的国产
  • 【自然语言处理】条件随机场【Ⅴ】条件随机场解码问题

    有任何的书写错误 排版错误 概念错误等 希望大家包含指正 部分推导和定义相关的佐证资料比较少 供参考 讨论的过程中我会加入自己的理解 难免存在错误 欢迎大家讨论 在阅读本篇之前建议先学习 隐马尔可夫模型系列 最大熵马尔可夫模型 由于字数限制
  • 【小应用】使用深度学习和OpenCV的火灾检测系统

    文章目录 1 创建定制的CNN架构 2 创建自定义inceptionV3模型 3 实时测试 4 结论 创建自定义的InceptionV3和CNN架构用于室内和室外火灾检测 本文为翻墙阅读的国外博客的翻译 亲测代码可实现 嵌入式技术的最新进展