基于 Keras 的烟火检测
我们常见的在大厦内部安装的烟雾传感器,靠检测物质燃烧后空气中浓度升高的二氧化锡等来报警。视频监控中基于视觉的烟火检测可以覆盖较为广阔的区域,而且适合室外的环境,比如无人机森林防火巡查。

昨天 PyImageSearch 网站博主 Adrian Rosebrock 发布了一篇基于Keras的烟火检测博文,将数据和代码公布了,其使用的数据量有限,从效果看并不是可实际部署的烟火检测程序,但对于了解该领域还是很有帮助的。
整体思路
作者将烟火检测看作为图像分类问题,即图像中含有烟火和不含烟火。直接使用CNN网络 SoftMax分类。
数据集
作者使用了两个数据集,含有烟火数据集来自Google搜索“fire”“smoke”返回的图片,并经过手动挑选,共有1315幅图像。

不含烟火的数据集来自8-scenes数据集,其类目包括
- Coast
- Mountain
- Forest
- Open country
- Street
- Inside city
- Tall buildings
- Highways
可见主要是室外开放场景,总计2688幅图像。
网络结构
作者使用了4个卷积层、2个全连接层 SoftMax分类。
由于烟火检测经常部署于物联网终端等边缘设备,故作者选择使用深度可分离卷积,因为其计算和存储开销小,而且相比标准卷积效果也往往更好一些。
作者的程序和数据组织目录如下:

在训练时,为找到更好的初始学习率,使用 Learning Rate Finder 方法,

实验结果
经训练的烟火检测网络FireDetectionNet在该数据集上可以达到92%的分类精度:

下图为一些正确预测的结果展示:

虽然精度看起来挺高了,不过还是有一些明显的错误:

作者指出想要取得更好的效果,收集更大和更适合应用场景的数据集是关键。
另外,使用视频进行烟火检测应该可以提高检测的精度,因为燃烧过程明显动态发展的。
总体来说,该文实现了简单的烟火检测Demo,数据和代码完备,对于想要了解体验该方向的朋友是有帮助的。