【小应用】使用深度学习和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的火灾检测系统 的相关文章

  • 动态向类添加类方法

    我有以下片段 FEED TYPES fan mail Fan Mail review Review tip Tip fan user Fan User fan song Fan Song fan album Fan Album played
  • 为什么 Python 在导入脚本时只保存脚本的字节码?

    既然执行Python字节码会比运行原始源代码更快 因为Python不需要重新编译 为什么Python在导入脚本时只保存编译后的字节码呢 为每个执行的脚本保存 pyc 文件不是更好吗 无论如何 Python 解释器的启动时间都需要时间 即使您
  • 通过 python 中的另外两个修改数组[重复]

    这个问题在这里已经有答案了 假设我们有三个一维数组 A 长度为 5 B 长度相同 示例中为5 C 更长 比如长度为 100 C最初用零填充 A给出索引C应更改的元素 它们可能会重复 以及B给出应添加到初始零的值C 例如 如果A 1 3 3
  • 雅虎财务请求功能出现 404 客户端错误

    yahoo Financials的请求功能出现404 Client Error 直接点击以下网址没有问题 https finance yahoo com quote AAPL financials p AAPL https finance
  • 将 Python Pandas DataFrame 写入 Word 文档

    我正在努力创建一个使用 Pandas DataFrames 的 Python 生成的报告 目前我正在使用DataFrame to string 方法 但是 这会作为字符串写入文件 有没有办法让我实现这一目标 同时将其保留为表格 以便我可以使
  • 类型错误:“datetime.datetime”和“str”的实例之间不支持“>”

    我是 python 日期和时间类型的新手 我有一个日期值 date 2018 11 10 10 55 31 00 00 我需要检查该日期值是否超过 90 天 我试过 from datetime import datetime from da
  • django 模板 - 如何动态访问变量?

    假设我有一个具有以下上下文的 django 模板 data1 this is data1 data2 this is data2 data name data2 现在我知道了data name 假设它是 data2 是否可以用它来访问变量d
  • 带有 mkdocs 的本地 mathjax

    我想在无法访问互联网的计算机上使用 MathJax 和 Mkdocs 因此我不能只调用 Mathjax CDN Config mkdocs yml site name My Docs extra javascript javascripts
  • 设置高亮大括号的 vim 颜色主题

    如何更改突出显示大括号的 vim 配色方案 我希望实际编辑 vim 主题文件以使更改永久生效 问候 克雷格 匹配括号的自动高亮颜色称为MatchParen 您可以通过执行以下操作来更改 vimrc 中的颜色 highlight MatchP
  • 在请求中设置端口

    我正在尝试利用cgminer使用 Python 的 API 我对利用requests图书馆 我了解如何做基本的事情requests but cgminer想要更具体一点 我想缩小 import socket import json sock
  • 高级描述熊猫

    有没有像 pandas 那样更高级的功能 通常我会继续这样 r pd DataFrame np random randn 1000 columns A r describe 我会得到一份很好的总结 就像这样 A count 1000 000
  • Python-验证我的文档 xls 中是否存在工作表

    我正在尝试在空闲时间设计一个小程序 加载 xls 文件 然后在要扫描的文档中选择一张纸 步骤1 用户导入 xls文件 导入程序后检查文件是否存在 我能做到的 第 2 步 我要求用户提供要分析的文档表 xls 的名称 这就是它停止的地方 该程
  • python Recipe:列出最接近等于值的项[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 考虑像这样的列表 0 3 7 10 12 15 19 21 我想获得最接近任何值的最近的最小数字 所以如果我通过4 我会得到3 如果我
  • 为什么 Collections.counter 这么慢?

    我正在尝试解决罗莎琳德的基本问题 即计算给定序列中的核苷酸 并在列表中返回结果 对于那些不熟悉生物信息学的人来说 它只是计算字符串中 4 个不同字符 A C G T 出现的次数 我期望collections Counter是最快的方法 首先
  • 是否可以在Python中将日+月(不是年)与当前日+月进行比较?

    我正在获取 5 月 10 日 格式的数据 我试图弄清楚它是今年还是明年 该日期仅一年 因此 5 月 10 日表示 2015 年 5 月 10 日 而 5 月 20 日表示 2014 年 5 月 20 日 为此 我想将字符串转换为日期格式并进
  • Python:如何在不先创建整个列表的情况下计算列表的总和?

    通常我们必须 1 声明一个列表 2 使用以下方法计算该列表的总和sum 但现在我希望指定一个以 1 开头 间隔为 4 100 个元素的列表 如下所示 1 5 9 13 17 21 25 29 33 37 我不想涉及数学公式 所以 1 如何在
  • python中有没有一种方法可以将存储在列表中的正则表达式模式列表应用到单个字符串?

    我有一个正则表达式模式列表 存储在列表类型中 我想将其应用于字符串 有谁知道一个好方法 将列表中的每个正则表达式模式应用于字符串 和 如果匹配 则调用与列表中该模式关联的不同函数 如果可能的话我想用 python 来做这件事 提前致谢 im
  • Python 相当于 Scala 案例类

    Python 中是否有与 Scala 的 Case Class 等效的东西 就像自动生成分配给字段而无需编写样板的构造函数一样 当前执行此操作的现代方法 从 Python 3 7 开始 是使用数据类 https www python org
  • MoviePY 无法在 Windows 上检测 ImageMagick 二进制文件

    我刚买了一台新笔记本电脑 想要设置MoviePY在那新的Windows 64x Python3 7 0 机器 我对所有内容都进行了三次检查 但是当涉及到我的代码的文本部分时 它向我抛出了这个错误 OSError MoviePy Error
  • 在Python中停止ThreadPool中的进程

    我一直在尝试为控制某些硬件的库编写一个交互式包装器 用于 ipython 有些调用对 IO 的影响很大 因此并行执行任务是有意义的 使用 ThreadPool 几乎 效果很好 from multiprocessing pool import

随机推荐

  • 关于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架构用于室内和室外火灾检测 本文为翻墙阅读的国外博客的翻译 亲测代码可实现 嵌入式技术的最新进展