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

  创建自定义的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模型的检测精度,它可以帮助火灾管理团队及时管理火灾,从而避免巨额损失。
  
  
  
  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值