物体检测是计算机视觉领域的热门研究课题之一,其在智能交通、视频监控、医疗诊断、工业检测和智能机器人等领域具有非常广泛的应用. 物体检测的主要任务就是定位出感兴趣物体在图像中的位置,并指出其所属类别名称.
物体检测算法主要包括传统物体检测算法和深度学习物体检测算法两大类. 传统物体检测算法采用“人工设计特征+分类器”的设计思路:首先提取物体的特征,然后将提取到的物体特征送入训练好的分类器进行分类. 例如,Haar-like特征[1,2]+Adaboost分类器[3]、方向梯度直方图(histogram of oriented gradient,HOG)[4]+支持向量机(support vector machine,SVM)分类器[5]、尺度不变特征变换(scale-invariant feature transform,SIFT)[6]+SVM分类器以及可变形的组件模型(deformable part model,DPM)[7]等. 卷积神经网络(convolutional neural network,CNN)通过学习就能获得颜色、轮廓等底层的特征和更高级、抽象的特征. 与传统人工设计特征相比,基于CNN的物体检测算法对局部遮挡、光照条件和尺度变化等影响因素具有更好的鲁棒性和泛化能力,同时还能对多类物体进行检测.
近年来,基于CNN的仓储物体检测逐渐成为一个新兴的研究方向,其属于通用物体检测的范畴,而基于CNN的通用物体检测算法大体可以分为两大类:基于区域提议的算法和基于无提议的算法.
基于区域提议的物体检测算法采用两个阶段来解决物体检测问题. 该类算法中最具有代表性的是 R-CNN[8]、Fast R-CNN[9]以及Faster R-CNN[10]等. R-CNN首先采用选择性搜索(selective search,SS)[11]从图像中提取出物体区域,然后对提取出的物体区域进行分类. Fast R-CNN和Faster R-CNN主要通过共享计算和采用神经网络生成区域提议来提高物体检测效率.
基于无提议的物体检测算法仅采用单个阶段来处理物体检测任务. 该类算法中最具有代表性的是YOLO(you only look once)[12]和SSD(single shot multibox detector)[13]. 此类算法去除区域提议阶段,采用单个前馈卷积神经网络来直接预测物体类别和具体位置.
当前,公开的物体检测数据集大多都是基于自然场景. 例如,常用的物体检测数据集ImageNet、Pascal VOC(pascal visual object classes)均是在自然场景中采集的图像. 基于工业检测应用场景的公开数据集很少[14],而基于仓储环境中的物体检测公开数据集几乎没有. 因此,通过CNN来实现仓储环境中的物体检测,创建一个质量高且规模大的仓储物体数据集尤为重要.
本文通过摄像机采集真实仓储环境中包含货物、托盘和叉车的大量图像进行标注,创建了一个仓储物体数据集. 同时将基于CNN的DSOD(deeply supervised object detectors)[15]应用于仓储环境中,通过在自己创建的仓储物体数据集上从零开始训练DSOD模型,实现了仓储环境中的货物、托盘、叉车检测.
CNN是当前深度学习算法实现的主要途径和研究计算机视觉、图像处理以及人工智能等方向的重要工具之一,其主要由输入层、卷积层、池化层、全连接层和输出层构成,基本结构如图1所示.
卷积层是对输入层输出的特征做卷积运算,再经过激活函数得到特征图,其作用是提取一个局部区域特征,每一个卷积核相当于一个特征提取器,第l层卷积层中第j个特征图的计算公式如下:
式中,klijijl是卷积核矩阵,bljjl是卷积层的偏置,Mj表示前一层输出的特征图集合,uljjl表示卷积层l层的第j个神经元,xljjl是l层卷积层的第j个通道的输出结果,*表示卷积运算,对于l层某一特征图uljjl,其对应的每个输入图的卷积核大小可以是不同的,卷积核的大小一般为3×3或5×5. f(·)代表非线性激活函数,常用的激活函数有:
Sigmoid(x)=11+e−x(x)=11+e-x. (2)
Tanh(x)=ex−e−xex+e−xΤanh(x)=ex-e-xex+e-x. (3)
池化层是通过对不同位置的局部特征区域进行特征统计,实现特征合并和特征降维操作,以有效地缩小矩阵尺寸,从而减少参数数量,并且经过池化后的特征具有平移不变性,这对图像分类至关重要. 常用的池化操作有:最大池化、平均池化和随机池化,其原理如图2所示. 最大池化是选取图像区域的最大值作为该区域池化后的值;平均池化是计算图像区域的平均值作为该区域池化后的值;随机池化是对特征图中的元素按照其概率值大小随机选择,即元素值大的被选中的概率也大.
在整个CNN中,全连接层类似于分类器. 卷积层和池化层的作用是将原始数据映射到隐含层特征空间中,而全连接层的作用是将CNN学习到的特征映射到样本的标记空间中,同时将卷积输出的2维特征图转化为一个1维向量. 最终,网络将这些特征输入到Softmax分类器中,并通过最小化损失函数来进行全局训练.
分类是机器学习和人工智能领域的基本问题之一,例如,字符识别、图像识别、语音识别等都可以转化为分类问题. 逻辑回归(logistic regression,LR)是机器学习领域经典的二分类器,而Softmax回归是LR在多分类上的推广,其将分类问题转化成概率问题,即首先求解统计所有可能的概率,然后概率最大的就被认为是该类别.
假设有m个训练样本{(x(1),y(1)),(x(2),y(2)),...,(x(m),y(m))},对于Softmax回归,它的输入特征为:x(i)∈Rn+1,类标记为:y(i)∈{0,1,...,k}. 假设函数是对于每一个样本估计其所属的类别的概率p(y=j|x),其具体表达式如下:
式中,θi(i=1,2,...,k)∈Rn+1表示Softmax分类器的参数,1∑j=1keθTjx(i)1∑j=1keθjΤx(i)表示归一化因子,其使所有类别概率和为1. 对于每一个样本估计其所属类别的概率为:
p(y(i)=j|x(i);θ)=eθTjx(i)∑l=1keθTlx(i)θ)=eθjΤx(i)∑l=1keθlΤx(i). (6)
Softmax分类器的训练过程就是不断地调整参数,优化损失函数,使损失函数达到最小值的过程.
基于CNN的DSOD框架类似于SSD多尺度无提议框架. 它的网络结构主要由用于特征提取的主干子网(backbone sub-network)和用于在多尺度响应图上进行预测的前端子网(front-end sub-network)两个部分构成. 主干子网是密集连接卷积网络(densely connected convolutional networks,DenseNet)[16]16]结构的变体,它由主干块(stem block),四个密集块(dense blocks),两个过渡层(transition layers)和两个无池化层的过渡层(transition w/o pooling layers)组成. 前端子网(即DSOD预测层)融合了多尺度预测密集连接结构.
DSOD最大的亮点在于其可以在相应的数据集上从零开始训练网络,而不需要ImageNet预训练模型. 这有效地避免了从预训练模型领域到物体检测领域可能存在巨大差异的困难,同时DSOD训练的模型比较小,在内存开销上也占有相对优势. DSOD的设计原则如下:
(1)免提议. R-CNN和Fast R-CNN需要额外的区域提议提取算法,如:选择性搜索(SS);Faster R-CNN 需要区域提议网络(region propose network,RPN)来生成相对较少的区域提议;YOLO和SSD是不需要提议的算法,由于DSOD框架与SSD框架类似,故DSOD不需要区域提议.
(2)深度监督. 深度监督的核心思想是通过综合的目标函数来对浅层的隐含层进行直接监督,而不仅仅是输出层,附加在隐含层中的目标函数能有效缓解梯度消失问题. 免提议检测框架包含分类损失和位置损失,增加复杂的侧输出层是一个比较好的解决方案,以在每个隐藏层为检测任务引入附加目标函数. 根据文献[16]所述,使用DenseNet的密集层级连接,其中密集块是块中所有先前的层都连接到当前层. 这样,目标函数可以通过跳跃连接直接监督DenseNet中的浅层. 无池化层的过渡层,使得在增加密集块的数量时不会降低最终的特征图分辨率.
(3)主干块. 主干块由3个3×3的卷积层连接1个2×2的最大池化层组成,其目的是减少信息损失.
(4)密集预测结构. DSOD与SSD的预测结构略有不同,在SSD的简单预测结构中,每个后续的尺度直接由相邻的前一尺度转换得到,而DSOD一方面会综合每个尺度获取的多尺度信息. 另一方面DSOD中的每个尺度,一半的特征图是通过之前尺度连接卷积层学习得到,剩余的一半由相邻的高分辨率的特征图直接下采样得到. 每个尺度只学习一半新的特征图,并复用前一个特征图剩余的一半. 因此,DSOD的密集预测结构比SSD的简单预测结构产生的参数少.
DSOD的损失函数是位置损失(localization loss)和置信度损失(confidence loss)的加权和,其表达式为
L(x,c,l,g)=1N(Lconf(x,c)+αLloc(x,l,g))L(x,c,l,g)=1Ν(Lconf(x,c)+αLloc(x,l,g)). (7)
式中,N是匹配的默认框数目,l和g分别是预测框和真值框,c为多类置信度,α为权重项. 位置损失如文献[9]所述,是l和g之间的smoothL1损失,其表达式如式(8)所示. 类似于Faster R-CNN,DSOD回归得到边界框的中心及其宽度和高度的偏移.
位置损失:
Lloc(x,l,g)=∑i∈PosN ∑m∈{cx,cy,w,h}∑i∈ΡosΝ∑m∈{cx,cy,w,h}xkijsmoothL1(lmi−gˆmj)xijksmoothL1(lim-g^jm). (8)
式中,smoothL1(x)可以表示为:
置信度损失是多类置信度c下的Softmax损失,并且通过交叉验证将权重项α设置为1,其表达式如式(10)所示.
置信度损失:
Lconf(x,c)=-∑i∈PosN∑i∈ΡosΝxpijlg(cˆpi)−xijplg(c^ip)-∑i∈Neg∑i∈Νeglg(cˆc^0ii0). (10)
式中,cˆpi=c^ip=exp(cpi)∑pexp(cpi).exp(cip)∑pexp(cip).
本文实验所需的数据均是在真实仓储环境中通过摄像机采集获得的图像,其分辨率为1 920×1 080. 为了减少模型的训练时间,以使网络更快地收敛,凯时k66平台将图像的分辨率缩小了3倍,所以实验数据的最终分辨率为640×360. 本文创建的仓储物体数据集共有10 450张图像,这些图像中包含货物、托盘和叉车 3个物体类别,其中包含货物和托盘的图像共有7 893张,包含叉车的图像有2 557张.
图像标注采用图像标注工具LabelImg,通过该工具可以直接将仓储物体用矩形框的形式标注出来,并且还能将标注的矩形框生成为可扩展标记语言(extensible markup language,XML)文本文件. XML文件记录了标注矩形框的最小/最大坐标、宽、高以及物体类别等信息,以方便训练模型时直接读取图像信息. 仓储物体标注的实例图如图3所示.
本文算法实验所需的软硬件配置如表1所示,并且使用了深度学习中的Caffe框架.
表1 实验配置 导出到EXCEL
Table 1 Experimental configuration
Operating System |
CPU | Memory | GPU | CUDA |
Ubuntu16.04 |
Intel i7-7700k | 16 GB | NVIDIA TITAN X | CUDA8.0 |
在训练模型之前,凯时k66平台首先按4∶1的比例将自己创建的仓储物体数据集随机分为训练验证集和测试集,然后将训练验证集也按4∶1的比例随机分为训练集和验证集. 其中,训练集有6 688张,测试集有 2 090 张,验证集有1 672张.
采用CNN训练模型时,设置学习率的大小尤为重要. 如果学习率设置过大,模型收敛速度太快,但是训练误差会出现震荡,无法收敛到全局最优值;反之,如果学习率设置得过小,网络收敛速度就会很慢,需要花费大量的时间才能达到最优.
本文中,凯时k66平台将网络训练的迭代次数设置为60 000次,根据动态调整学习率的策略,凯时k66平台将学习率具体设置为:(1)初始迭代阶段(0~20 000)设为0.1;中间迭代阶段(20 001~40 000)设为0.01;(3)最后优化阶段(40 001~60 000)设为0.001. 同时,凯时k66平台采用动量为0.9,权重衰减为0.000 5以及批量尺度为5的随机梯度下降(stochastic gradient descent,SGD)在自己创建的仓储物体数据集上从零开始训练DSOD模型. 为了能更好地观察训练过程中损失(Loss)随迭代次数(Iterations)的变化情况,凯时k66平台画出了 0~60 000次的Loss-iterations 曲线图,如图4所示.
凯时k66平台从图4可以观察到,Loss曲线比较平滑,几乎没有出现震荡现象,说明凯时k66平台设置的学习率比较适当,使模型达到了最优收敛的状态.
在物体检测领域中,平均准确率均值(mean Average Precision,mAP)是评价物体检测算法优劣的主要评价指标. 因此,凯时k66平台同样采用mAP来评价本文仓储物体检测算法的优劣. 在相同训练集和测试集的情况下,本文算法与Faster R-CNN、SSD进行了比较,对比实验结果如表2所示.
表2 不同算法对比实验结果 导出到EXCEL
Table 2 Comparison of experimental results with different algorithms
算法 |
测试图像数量/张 | 模型大小/MB | mAP/% |
Faster R-CNN |
2 090 | 235.8 | 93.77 |
SSD |
2 090 | 94.7 | 92.37 |
本文算法 |
2 090 | 51.3 | 93.81 |
由表2可知,本文算法在自己创建的仓储物体数据集上的mAP达到了93.81%,比Faster R-CNN提高了0.04%,比SSD提高了1.44%. 并且模型大小仅有51.3 MB,比Faster R-CNN减少了184.5 MB,比SSD减少了43.4 MB. 因此,本文算法能较好地满足仓储物体检测的准确性要求,并且模型占用内存小,适用于移动、嵌入式电子设备等低端设备.
凯时k66平台给出部分仓储物体测试图像的检测效果图,如图5所示.
由图5(a)、图5(b)可知,对于不同颜色的货物,本文算法均能较好地检测出来. 由图5(c)可知,当仓储环境中的光照条件发生变化时,本文算法也能较好地检测出货物、托盘. 由图5(a)、图5(d)可知,无论是尺寸大的货物、托盘,还是尺寸小的货物、托盘,本文算法同样能较好地检测出来. 由图5(f)可知,对于局部遮挡的货物,本文算法依然能较好地检测出来. 因此,无论是光照条件、物体尺寸以及颜色等变化,还是存在局部遮挡,本文算法都能较好地检测出仓储物体,获得了较为满意的检测效果.
基于仓储环境中的物体检测应用场景,凯时k66平台创建了一个仓储物体数据集,将基于CNN的DSOD应用于仓储环境中,通过在自己创建的仓储物体数据集上从零开始训练DSOD模型,实现了仓储环境中的物体检测. 该算法的mAP比Faster R-CNN、SSD高,模型大小比Faster R-CNN、SSD小,并且对仓储物体颜色、尺寸大小以及光照条件等变化具有较好的鲁棒性,获得了较为满意的检测效果. 但本文算法对于尺寸较小的仓储物体仍然会出现漏检问题. 因此,下一步打算对DSOD的网络结构作相应的改进,并扩充仓储物体数据集,以进一步提升仓储物体检测准确率.
上一篇: 烟草仓储物流中心托盘信息管理系统技术分析
下一篇: 立体仓储系统货位优化算法比较与分析