基于深度学习的客滚船危险品检测技术
2022-05-09解相志李诺舟
解相志,刘 彤,李诺舟
(大连海事大学航海学院,辽宁 大连 116026)
0 引言
我国的滚装客船发展起始于上世纪60年代,其主要运输对象为货物、人员和车辆,承担着大量的内河、湖泊和近海一带的中短距运输工作。我国在渤海湾、琼州海峡、台湾海峡和长江三峡等许多地区开辟了多个客滚船运输市场,客滚船运输为我国的经济社会发展做出了重大贡献[1]。因为客滚船承载着大量的旅客,在运输过程中一旦发生火灾、有毒物质泄漏等事故会造成非常大的生命财产损失,所以客滚船的危险品监管工作一直是海事监管工作中的重中之重。随着经济的发展,客滚船也逐渐趋于大型化,更大的客流量带来了更多的安检任务,给监管部门的危险品查堵工作带来了更大的挑战[2]。
传统的危险品检查主要为人工识别车厢安检图像,再对发现的可疑目标进行开厢复检。但是实际工作中,港口客运部门对检查人员的培训各有不同,存在部分检查人员专业素质不高的问题,同时滚装车辆运输的货物种类繁多,对可疑目标的鉴别难度大,长时间工作会消耗检查人员大量的精力,为危险品查堵工作留下隐患[3]。采用深度学习分类模型替代人工可以减少人力成本,同时在长时间的工作中可以一直保持检测的准确性,为客滚船车载危险品查堵提供了一种新的手段。
1 模型设计
1.1 深度学习模型
作为机器学习的一个重要分支,深度学习能够在对数据的学习过程中发现数据集合内各样本之间的内在联系,并根据分析得到的相关信息对声音、文字、图像等数据进行解释,最终使机器获得像人一样拥有学习分析任务的能力[4]。
相较于传统的机器学习算法,深度学习不需要复杂的特征工程就可以实现良好的性能。同时深度学习的神经网络结构复杂,深度和宽度均很大,理论上可以实现到任意函数的映射,所以深度学习更容易地适应不同的领域和应用场景。当数据量足够时深度学习表现出了强大的性能,在图像分类、语义分割、自然语言处理等部分任务中甚至取得了超过人类的表现[5]。
深度学习根据研究内容主要分为:堆栈自编码网络(Stacked Auto-Encoder Network,SAE)、深度置信网络(Deep Belief Networks,DBN)和卷积神经网络(Convolutional Neural Network,CNN)。其中卷积神经网络具有感知局部信息能力出众和权值共享2个特点[6],可以在高效地提取样本特征的同时降低网络模型的复杂度,在图像分类任务上表现不俗。因此本文使用卷积神经网络搭建客滚船车载危险品检测模型,具体设计思路如图1所示。
图1 模型设计思路
1.2 CNN网络设计
近年来随着研究的深入和计算机性能的提升,深度学习进入爆发阶段,出现了一大批非常经典的卷积神经网络模型,例如AlexNet网络、VGG网络、GoogLeNet网络、ResNet网络等CNN网络在各种计算机视觉领域的比赛中均获得了优秀的成绩。AlexNet网络在训练过程中参数较多训练量大,但由于深度不够很难提取到高层特征。VGG网络由于网络深度进一步增加,训练时间极长,且权重太多导致文件体积极大,内嵌几乎不可能。GoogLeNet使用更深的网络,这会导致需要计算的参数太多,很容易产生过拟合,同时伴随着网络的加深,容易出现梯度消失问题,难以优化模型[7]。从AlexNet,VGG,GoogLeNet的发展过程来看,网络的深度对模型的性能至关重要,但是深网络也伴随着网络退化的问题,致使网络深度加深到一定程度时难以训练。ResNet网络使用残差学习单元(见图2)解决了这一难题,通过构建恒定映射通道(identity mapping)使得当输入为X时即使网络学到的残差F(X)为0堆积层,也可以通过恒等映射机制保证网络性能不会下降。同时在梯度反向传播的过程中残差学习单元所提供的短路机制可以无损的传播梯度,解决了深层网络梯度消失的问题[8]。因此本文CNN网络以ResNet网络为基础,并进行一定改进以适应实际的应用场景。
图2 残差学习单元
构建卷积神经网络首先搭建残差学习单元,残差学习单元正向通道含有2个卷积核尺寸为3×3的卷积层,采用多个小卷积核代替大卷积核,保持感受野范围不变的同时减少网络参数减小运算量,并且增加了非线性变换的操作使模型的泛化性能得到提升。将经过卷积操作得到的信息进行批归一化操作(Batch Normalization,BN),BN通过线性变换和规范化使每层网络的输入数据均值及方差都分布在一定范围内,大大地减小了深层网络对浅层网络输入的依赖,加快了模型的学习速度。在训练过程中每个Batch样本的方差和均值都有所不同,这相当于在网络训练的过程中随机加入了噪声,使得BN操作具备一定的正则化效果,提升了网络的泛化性能。然后使用激活函数处理前端网络得到的参数,为网络加入非线性因素,增强模型对样本的描述能力。因sigmoid函数、tanh函数在输入值过大或过小时,导数容易接近0造成梯度消失,所以本文采用Relu函数作为激活函数,相较于前两者Relu函数的导数更好求,在防止梯度消失的同时可以加快网络的训练速度。恒等映射通道采用卷积核尺寸为1×1的卷积层加BN层组成,实现特征升维和降维的功能,保证恒等映射通道的输出与正向通道的输出维度一致。
本文CNN网络首先由一个卷积核尺寸为7×7的卷积层对输入的图像信息进行初步提取,然后经过池化层对提取到的信息进行下采样,减少参数量。因为平均池化(mean-pooling)提取全局信息,最大池化(max-pooling)对纹理特征敏感,所以根据任务需求采用最大池化方法处理获得的信息。信息处理好之后经由8个残差学习单元对图像信息进行进一步学习,最终将得到的数据传递给均值池化层进行全局的信息提取然后使用全连接层对结果进行预测。由于在实际的客滚船车载危险品检查工作中车辆大小各不相同,获得的扫描图像尺寸也有所差异,原始的ResNet网络很难适应不同尺寸的输入图像,因此本文采用自适应平均池化(AdaptiveAvgPool)替代全连接层(Fully Connected Layers,FC)前原有的池化层,使本文设计的CNN网络可以匹配任意尺寸的输入图片,满足实际工作场景的需要。最终网络结构如表1所示:
表1 CNN网络结构
1.3 损失函数
在深度学习中一般使用损失函数来衡量网络预测与真实情况之间的不一致程度,一般情况下它是一个非负函数,并且损失函数越小,模型的稳健性越好。在分类任务中,图像经过全连接层后给出的预测值都会加上一个softmax函数,计算公式为:
式中:Pc为某一类别预测值,Pi为每个类别的预测值,为预测正确的概率。这样输出的预测值就转换成了概率值,所有类的概率和为100%。
交叉熵函数作为分类任务中常使用的一种损失函数,计算公式为:
对Loss求Pi的偏导数可以得到:
从这个结果可以看出,使用交叉熵函数作为损失函数时,求得的偏导数非常简洁,在网络训练中利用Loss对预测值的梯度非常重要,简洁的梯度会让训练变得更加简单,因此对经过softmax函数得到的输出来说,交叉熵函数是最适合的损失函数。
1.4 优化算法
为了能使模型的性能达到最优的状态,各种神经网络模型都会使用优化算法对模型中的参数进行不断地更新。常用的优化算法一般分为一阶优化算法,如梯度下降法、Mini-Batch梯度下降法、随机梯度下降法等;二阶优化算法,如牛顿法、拟牛顿法、共轭梯度法等。由于二阶算法存在的计算量大训练极慢和对数据本身精度要求高稳定性差等问题,目前梯度下降法是最常用的优化方法[9]。
对比多个使用梯度下降思想的优化算法,随机梯度下降法(SGD)选择合适的学习率较难梯度下降速度慢,并且在某些情况下容易被困在鞍点,在局部形成已经求得最优解的假象[10]。Adam算法在实际使用过程中,随着训练的加深可能会造成学习率无法稳定导致网络没办法收敛,同时Adam算法可能会错过全局最优解。所以本文采用SGD+Momentum优化算法更新模型权值,Momentum是来自物理学中的动量概念,在这里Momentum就是积攒的历史梯度。如果当前时刻与历史时刻梯度方向相似,那么就加强这种趋势,否则就减弱这种趋势,通过引入动量因子加入到SGD算法中可以有效地抑制震荡加速收敛,并且容易跳过局部最优值,找到全局最优解。
2 数据集搭建
深度学习网络的性能除了受网络结构设计优劣的影响,在很大程度上也十分依赖数据样本的质量。通常情况下训练数据集过少会导致设计复杂的模型无法拟合,而网络结构简单的模型又容易产生过拟合。因此充足的数据样本对网络的训练至关重要。
为了贴合研究实际,构建符合实验需求的安检图像数据集,本文主要的数据来源为港口安检站实际工作中所积累的滚装车辆车厢X光图像。经过多次实地调研共取得旅顺新港安检站半年内的X光安检图像7132张,经过人工挑选,去除其中的不良样本和空白图片共获得高质量样本4322张。
为使网络获得更好的训练效果,防止过拟合,采用数据增强的方法进一步扩充样本。第一种增强方法为向原始数据中增加噪声,创建具有不同噪声的样本数据扩充样本多样性,增加网络学习的难度,防止过拟合。第二种方法是使用随机裁剪和平移变换等方法增加样本数量,更多的样本数量给算法提供了更多机会理解输入到输出的映射关系,从而获得性能更好的模型。最后将进行数据增强后数据打上标签组成训练所需的滚装车辆车厢扫描图像数据集,数据集分为安全图像数据和风险图像数据2类,共计13862张。
3 网络训练及实验结果
3.1 实验准备
实验采用PyTorch深度学习框架构建网络模型。训练使用的计算机配置为:图形处理器(GPU)——NVIDIAGeForceGTX 960M,2G显存,CUDA10.0.1;中央处理器(CPU)——IntelCorei5-6300HQ,内存:8G。
3.2 训练及结果分析
从滚装车辆车厢扫描图像数据集中随机抽取90%组成训练集,剩余10%作为验证集进行数据预处理后传入网络模型进行训练。实验过程中训练集上的损失值变化如图3所示,在验证集取得的预测准确率,如图4所示。
图3 训练集损失值
图4 验证集准确率
通过实验结果可以看出,经过10000轮次的迭代模型已经高度收敛,损失值已经稳定在0.1以下且震动幅度也在不断减小,模型性能趋于稳定。最终在验证集上的准确率达到了96.7%,性能比较可靠。
3.3 模型应用
为在实际工作环境中更好应用本文设计的模型进行客滚船危险品检测,本文使用PyQT设计并搭建了如图5所示的滚装车辆货物检测平台。
图5 货物检测平台
执法人员按照现有的工作方法检查一辆车的安检信息需要十几分钟,使用此平台自动识别图像信息可以将识别时间缩短至几秒钟,极大地提升了安检效率。同时使用信息化技术,不会受到疲劳等因素的影响,保证了安检工作的准确率。
4 结语
本文提出了以深度学习网络代替人工对滚装车辆安检图像进行检测的设想,经过数次实地调研,自行采集滚装车辆X光扫描图像组建了安检图像数据集,并在ResNet网络的基础上改良了网络结构使其能够适应实际的工作需求。经过长时间的网络训练,本文设计的模型在风险安检图像的识别上取得了较为理想的效果,论证了使用深度学习网络进行客滚船车载危险品检测的可行性,增加了客滚船危险品查堵的手段。本文还设计了滚装车辆的货物检测平台,能够有效提升安检效率和准确率,对解决日渐增长的客流量所带来的人力不足、效率低下等问题具有重大意义。