时间:2024-05-04
吴珊
(西南交通大学信息科学与技术学院,成都611756)
火灾是自然灾害和社会灾害中最具破坏性的灾害之一,它严重影响了人类日常的生产生活,一方面威胁着人类的生命安全,造成难以挽回的经济损失,另一方面,它造成环境污染、破坏动植物生存环境。经过长期观察人们发现在火灾发生之前往往会产生一定的烟雾,因此烟雾识别在防火工程中引起了人们的更多关注,可以用来进行早期的火灾预警。传统的烟雾识别方法采用特征提取和分类器设计等模式识别技术,其主要重点是静态和动态特征相结合的烟雾识别。典型特征包括颜色和运动概率[1]、烟雾的LBP 直方图序列[2]、使用小波变换和HMT 模型的动态纹理[3]、烟雾时间轨迹[4]、局部极值区域分割[5]和运动方向模型[6]等。
由于近年来人工智能深度学习发展十分迅速,深度卷积神经网络(CNN)在许多计算机视觉任务(例如目标检测、视频跟踪等)上均表现出出色的性能,与基于手动设计的传统特征提取器的这些方法相比,一些研究人员建议将深度卷积神经网络(CNN)应用于烟雾识别[7-8],从而可以学习到更深的特征以获取具有较高泛化能力的模型。但是深度学习有一个令人头疼的缺点,那就是需要大量样本来进行训练才能达到较好的泛化,然而据我们所知,先前烟雾识别研究中使用的数据集仍然相对较小且单调,用于训练的可用烟雾图像通常是从Internet 和视频切割中获得的,这显然不利于深度学习。所以为了解决烟雾识别中训练数据集不足的问题,本文使用生成对抗网络(GANs)[9]技术来实现烟雾图片的生成,以达到扩充烟雾数据集的作用。
生成对抗网络(GANs)主要由生成器网络和判别器网络构成,生成器(Generator)网络主要通过机器生成数据(大部分情况下是图像),目的是骗过判别器网络,判别器(Discriminator)网络判断这张图像是真实的还是机器生成的,目的是找出生成器网络做的假数据。随着训练的进行,生成器网络能够逐渐生成越来越逼真的图像,甚至达到以假乱真的程度,使判别器网络也没办法马上区分它们的真假。同时,判别器网络也在不断提高鉴别真假的能力,与生成器网络相互对抗,共同提升性能。最终训练结束时可以得到一个效果非常好的生成器网络模型,就可以用它来生成想要的图片了。生成对抗网络(GANs)在生活中已经有了很多有趣的应用,包括生成人脸照片、生成现实照片、生成动画角色、图像到图像的转换(将白天景观转化成夜晚景观、将素描转化成彩色图片等)、文字到图像的转换、语义图像到逼真图片转化、生成人体模型新体态、照片编辑、预测不同年龄的长相、提高照片分辨率、照片修复、自动生成3D 模型等。本文根据各种GANs衍生算法的特点结合烟雾图片生成的实际需求,选择了CycleGAN[10]进行烟雾图片的生成,并使用该扩充烟雾数据集在VGG-16[11]、ResNet-50[12]、ResNet-101[12]等深度卷积神经网络上进行烟雾识别对比实验,最终取得更好的效果。
CycleGAN[10](使用一致循环生成网络进行非配对图像转换)的原理就是能够将一类图片转换成另一类图片。它利用非成对数据也能进行训练,不必满足对应关系,所以用CycleGAN 可以做出很多有趣的应用。它可以实现画与照片,斑马与马,夏天与冬天,苹果与橘子,男人与女人,猫与狗,卫星地图与行政地图等图片之间的转换。CycleGAN 的原理图解如图1。
图1 CycleGAN原理图解
CycleGAN 的创新点在于能够在源域和目标域之间,不用建立训练数据间一对一的映射,就能够实现这种迁移。图1(a)中X、Y 对应两个领域,现在想要将X领域中的图片转换成Y 领域中的图片;G、F 分别对应正向和逆向GAN 中的两个生成器,即G 将X 领域中的图片x 转换成Y 领域中的图片G(x),然后用判别器DY判别是否属于Y 领域的图片,由此构成生成对抗网络的基本结构。图1(b)和图1(a)相比增加了一些结构,即要求G(x)再经过逆向GAN 中的生成器F 生成F(G(x)),使之与原输入x 尽可能接近,即cycle-consistency loss 尽量小,这样就能解决GAN 无法针对性地输出对应图片的问题。图1(b)过程x->G(x)->F(G(x))≈x,称为forward cycle consistency。为了提高训练效果,类似地,又训练从Y 领域到X 领域的转换,如图1(c)过程y->F(y)->G(F(y))≈y,称为backward cycle consistency。
VGGNet[11]通过重复堆叠若干个3×3 卷积内核和2×2 的最大池化层,成功构建出16~19 层的深度卷积神经网络。实验证明了卷积神经网络的深度增加和小卷积核的使用能够有效提升网络的最终分类识别效果,错误率大大降低,可扩展性非常强,并且迁移到其他图像样本时也表现出良好的鲁棒性。
VGG 网络中使用多个3×3 的卷积核来模拟大卷积核对样本的局部感知,该操作最突出的优点在于可以大规模减少参数,例如9×9 的卷积核需要81 个权重参数,而3×3 的卷积核只需要9 个权重参数。参数减少,运算时间也会成比例减少。图2 为VGGNet 的网络结构。
图2 VGGNet的网络结构
ResNet[12]分类网络是当前应用最为广泛的CNN 特征提取网络,传统的卷积网络或者全连接网络在信息传递的时候不可避免的会存在信息丢失、损耗,或者由于网络结构自身的问题如梯度消失、梯度爆炸或者其他因素造成性能下降,导致较深的网络无法训练等问题。 而 深 度 残 差 网 络(Residual Neural Network,ResNet)通过直接将输入信息传递给输出来保护特征信息的完整性,这样的设计既解决了梯度问题,也使得网络的性能得到了提升,并且使用残差网络结构还能够加快网络的训练速度,使网络更快收敛。
在ResNet 网络结构中用到两种残差模块,图3 中展示了它们的详细结构设计。其中,图3(a)是以两个3×3 的卷积网络串接在一起作为一个残差模块,图3(b)使用串联的1×1、3×3、1×1 的三个卷积网络作为残差模块。
图3 ResNet基本结构
由于网络下载的大部分烟火视频烟雾片段都比较短,多数为火焰场景,所以视频切帧滤除相似图片以后数据量也比较小,加上直接在网络上下载的其他可用烟雾图片,经过手动裁剪调整图像大小后标记为烟雾或是非烟雾样本,建立了烟雾图像数据集SMOKEGENERATION,最终用于生成训练的烟雾数据smoke共1000 张图片,对应的无烟数据nosmoke 共1000 张图片,模型训练完成后使用其他2000 张无烟数据进行烟雾图片的生成。表1 中罗列出了数据集的具体信息。
表1 SMOKE-GENERATION 数据集
使用CycleGAN 训练时将输入网络的烟雾图片resize 为256×256 大小,使用脚本将图片转换为tfrecords格式,使用工具为PyCharm、Python3.6、TensorFlow,优化器选择Adam,学习率初始化为0.0002,对于前100个周期,保持相同的学习速率0.0002,然后在接下来的100 个周期内线性衰减到0,batch_size 大小为1,设置迭代40000 次。最终使用TensorFlow 内置的可视化工具TensorBoard 绘制loss 曲线如图4 所示。
图4 CycleGAN损失曲线
训练完成后使用模型文件来测试将无烟数据生成有烟数据,部分实验生成结果如图5 所示。
图5 CycleGAN生成结果图
从图4 CycleGAN 的损失曲线可以看出,在训练开始时,判别器D_X 和D_Y 损失曲线逐步下降,与两个生成器震荡的方向相反,二者相互对抗,而随着网络迭代次数增加,生成器与判别器的“博弈”加剧,生成器生成的样本越来越逼近真实样本,最终生成器G、F 和判别器D_X、D_Y 的损失曲线逐渐趋于平和,两个判别器损失总体呈现下降趋势,直至模型收敛,在训练过程中实际出现了多次损失震荡现象,也是二者“博弈”的体现。CycleGAN 网络需要保证生成的图像必须保留有原始图像的特性,所以如果我们使用生成器G 生成一张假图像,那么要能够使用另外一个生成器F 来努力恢复成原始图像,这个过程必须满足循环一致性,Cycle Consistency loss 保证原始图像和循环图像之间的差异应该尽可能小,保证生成器G 和F 不仅能满足各自的判别器,还能应用于其他图片。从图4 CycleGAN 的损失曲线可以看出Cycle Consistency loss 越来越小,最后趋于平稳。
图5 展示了CycleGAN 生成的部分结果图,整体看来图像的分辨率较高,多样性很强。实验证明Cycle-GAN 能在无烟图片上比较自然的添加烟雾生成烟雾数据,人眼难以分辨出其中的差别。
第一次基于深度卷积神经网络的烟雾识别对比实验通过调整SMOKE-GENERATION 数据集,建立了烟雾识别图像数据集SMOKE-RECOGNITION,分为训练集train,验证集val,测试集test,其中训练集数据包含1200 张图片,验证集数据包含400 张图片,测试集数据包含400 张图片。表2 中罗列出了详细的数据分布。
表2 SMOKE-RECOGNITION 数据集
第二次基于深度卷积神经网络的烟雾识别对比实验通过调整SMOKE-GENERATION 数据集,以及添加生成对抗网络生成的烟雾数据,建立了扩充烟雾识别图像数据集AUG-SMOKE-RECOGNITION,详细的数据分布参见表3,其中训练集样本数量增加了4000 张,测试集和验证集中的数据分布不变。
表3 AUG-SMOKE-RECOGNITION 数据集
进行基于深度卷积神经网络的烟雾识别对比实验,首先需要配置PyTorch 训练环境,包括Python3.6、PyTorch1.1、CUDA9.0 等,然后使用VGG-16、ResNet-50、ResNet-101 网络,以及pytorch_classifier 代码在自制烟雾数据集上进行训练。训练具体参数设置见表4,部分参数不同是根据不同模型进行了调整,以便使各个网络均能充分收敛。
表4 烟雾识别对比实验参数设置
使用SMOKE-RECOGNITION 数据集分别在VGG-16、ResNet-50、ResNet-101 网络上训练后在测试集上的精度如表5 所示。
表5 SMOKE-RECOGNITION 数据集烟雾识别对比实验结果
使用AUG-SMOKE-RECOGNITION 数据集分别在VGG-16、ResNet-50、ResNet-101 网络上训练后在测试集上的精度如表6 所示。
表6 AUG-SMOKE-RECOGNITION 数据集烟雾识别对比实验结果
对比分析表5 和表6 中的结果可以发现,在这几个网络模型上均是烟雾数据的识别准确率要高于非烟雾数据,ResNet 网络模型的识别准确率要高于VGG 网络模型,且卷积神经网络越深效果越好,VGG-16、ResNet-50、ResNet-101 网络模型均在扩充数据集AUG-SMOKE-RECOGNITION 上获得了不同程度的提高,其中VGG-16 网络模型总体准确率提升了1.5%,在非烟雾数据的识别上提升了1%,在烟雾数据的识别上提升了2%,ResNet-50 网络模型总体准确率提升了2%,在非烟雾数据的识别上提升了3%,在烟雾数据的识别上提升了1%,ResNet-101 网络模型总体准确率提升了1.5%,在非烟雾数据的识别上提升了2%,在烟雾数据的识别上提升了1%,最后实验充分证明了Cycle-GAN 数据仿真的可行性,能够在一定程度上解决实际应用中烟雾训练数据集不足的问题。
在深度学习人工智能如此火爆的如今,对数据集的要求也越来越大,本文通过使用循环生成对抗网络CycleGAN 进行烟雾图片的生成,从一定程度上解决了实际训练中烟雾数据集不足的问题,并在VGG-16、ResNet-50、ResNet-101 网络模型上进行烟雾识别对比实验,最后充分证明了CycleGAN 数据仿真的可行性及扩充数据集对烟雾识别效果提升的重要性。
我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!