高运运,陈国良
(武汉理工大学 机电工程学院,湖北 武汉 430070)
随着生活节奏的加快,越来越多的人选择饲养猫狗等宠物来缓解压力。但是工作时间宠物的看管是一个令人困扰的事情。同样的陪同问题也出现在老人和婴儿身上。具有生物体目标检测功能的室内移动机器人可以在一定程度上解决这个问题。通过视觉检测到生物体之后,机器人通过多传感器融合获得生物体的状态,实现看管的功能。
目标检测分为传统的目标检测方法和基于深度学习的目标检测方法两种。传统目标检测方法包括生成先验框、特征向量提取和区域分类3个步骤。每个先验框输出的特征向量是由对尺度变化、光照变化和旋转变化具有一定鲁棒性的SIFT(scale-invariant feature transform)[1]、Harr[2]、HOG(histogram of oviented gradient)[3]或者SURF(speeded up robust features)[4]这些手工视觉特征进行编码的。区域分类器通常使用在小规模数据上表现良好的SVM(support vector machine)[5],同时加入Bagging[6]、级联学习[7]和AdaBoost[8]等分类技术来提高目标检测的精度。基于深度学习的目标检测算法包括单阶段目标检测和两阶段目标检测两种。两阶段目标检测算法是一个“从粗到细”的过程,包括建议框生成和预测两个步骤。典型的两阶段目标检测算法有RCNN(regions convolutional neural networks)[9]、Fast RCNN[10]和Faster RCNN[11]。单阶段目标检测算法可以实现输入图像到预测框预测的端对端操作,代表性的算法有YOLO(you only look once)[12]、SSD(single shot multibox detector)[13]和RetinaNet[14]。
传统的目标检测算法和基于深度学习的目标检测算法在生物体检测领域都得到广泛应用。Kozakaya[15]等采用基于Haar特征的AdaBoost分类器级联基于CoHOG特征的线性分类器进行猫脸检测,检测精度相比仅使用Haar+AdaBoost方法有较大提升,检测一幅图像需要3 s,检测速度极慢。Wang[16]等采用LBP(local binary patterns)和HOG相结合的特征进行行人检测,当FPPW(false position per vindow)为106时,算法在INRIA数据集上的检测率可以达到91.3%,但是算法对于人体姿态变化的鲁棒性差,漏检率高,检测速度也很慢。基于传统目标检测算法进行生物体目标检测精度较低,漏检率高,检测速度慢,逐渐被基于深度学习的目标检测算法所取代。Zhou[17]等采用改进的Mask RCNN设计了流浪猫检测网页应用,对于个体的平均识别率达到89.4%,但是采用服务器进行目标检测运算,不适合移动机器人的移动处理器。Sinnott[18]等采用改进的Faster RCNN实现移动端实时检测狗品种,但是检测模型对于移动端处理器来说过于庞大,图像检测过程通过服务器来完成,移动端只进行图像的采集。
笔者使用MobileNetV3网络结构作为YOLOv4(you only look once v4)的主干网络实现网络轻量化以适应移动机器人的移动处理器。同时,针对人和猫、狗等室内生物体在成像平面大小差异大的情况,增加主干网络的输出特征层并对每个特征层进行空间金字塔池化,从而增加输出特征图的语义特征和空间信息,提高目标检测的精度,增强小目标检测的能力。针对K-means算法对于初始质心敏感的问题,使用K-means++算法对生物体数据集进行聚类得到先验框,减小初始点对聚类结果的影响,提高目标检测的精度。
YOLO系列算法首先将输入图像调整为指定的大小,然后将图像划分为S×S的网格单元,每个网格单元负责预测成像中心落到该网格单元中的物体,YOLOv4检测原理如图1所示。
图1 YOLOv4检测原理
为使YOLOv4算法可以在移动机器人处理器上运行,将YOLOv4的主干特征提取网络CSPDarknet53替换为MobileNet系列以实现网络的轻量化。针对移动端和嵌入式视觉,Google提出了基于深度可分离卷积的轻量型深度学习框架MobileNet[19]。
深度可分离卷积分为深度卷积和点卷积两步进行。与传统卷积相比,在精度基本保持不变的情况下,深度可分离卷积的卷积核参数数目大大减少,运算速度大大提高,如图2所示。在深度可分离卷积的基础上,MobileNetV2[20]增加了具有线性瓶颈的倒残差网络结构。2019年推出的MobileNetV3[21]算法使用与MnasNet相同的基于RNN(recurrent neural network)的控制器和分层分级搜索空间进行平台感知神经网络搜索,得到粗略的全局框架。然后使用NetAdapt方法对每一层进行微调得到最终的网络结构。在深度可分离卷积和具有线性瓶颈的倒残差模块之外,MobileNetV3还引入了类似于swish的h-swish激活函数并且在网络中加入了SE(squeeze excitation)模块,进一步提升目标检测的精度。
图2 传统卷积和深度可分离卷积示意图
将MobileNetV3网络的深度特征提取部分作为YOLOv4主干网络进行算法的轻量化,以适应移动机器人应用场景。
在YOLOv4的PANet(path aggregation network)模块基础上,增加一个从主干网络输入的底层特征图,将更加丰富的空间信息通过较短路径的下采样传递到顶层特征图。改进后的颈部网络如图3所示,顶层特征图的语义信息通过PANet的FPN(feature pyramid networks)上采样传递到新增特征层。在PANet增加的特征层处增加一个输出YOLO层,将3尺度检测改为4尺度检测,预测网格更加细化,提高小目标检测能力,减少漏检。
图3 PANet网络结构
改进后的的目标检测算法对每个主干网络输出特征都进行金字塔最大池化,增加输出特征图的感受野。改进目标检测算法网络如图4所示,输入图像为416×416,Mod模块是目标检测算法主干网络的特征提取和下采样模块,对应于MobileNetV3是增加了SE模块且具有线性瓶颈的倒残差结构。CBL(ConV+BN+Leaky_relu)模块为卷积、批归一化和Leaky Relu函数激活的组合。
图4 改进目标检测算法网络
YOLOv4采用标定框和先验框的交并比(intersection over union, IOU)作为相似度评价指标,使用K-means算法进行聚类得到9个先验框的尺寸进行训练和预测。K-means算法的初始聚类中心是随机选取的,不同的聚类中心得到的聚类结果不同。针对K-means算法对初始质心敏感的问题,采用K-means++算法进行先验框的聚类。与K-means算法随机选择全部初始聚类中心不同,采取的K-means++聚类方法随机生成第一个聚类中心,其他初始聚类中心是在已知聚类中心的基础上产生的。算法首先计算所有标定框和所有已知聚类中心的距离后得到每个标定框对于所有聚类中心的最短距离。然后以这些最短距离作为依据使用轮盘赌法得出全部K个聚类中心。K-means++算法的伪代码如表1所示。
表1 K-means++算法伪代码
最常见的室内生物体包括人、猫、狗。使用PASCAL VOC2007数据集中包含人、猫、狗的图像和Microsoft COCO数据集中包含猫和狗的部分数据共14 252幅图像,30 913生物体实列,其中,训练集占60%,测试集占40%。模型训练环境为:CPU:Intel Core i7-9750(2.6 GHz/L3 12M),GPU:NVIDIA Geforce RTX 2070,使用Python的Keras框架。
采用K-means++对数据集聚类得到12个先验框的尺寸:(14,26),(22,64),(35,34),(38,110),(61,59),(64,171),(94,104),(108,243),(170,148),(191,317),(302,208),(362,360)。目标检测算法训练过程设置100个epoch,前50个epoch的学习率设置为0.001,batchsize设置为8,后50个epoch的学习率设置为0.000 1,每个epoch迭代1 120次,batchsize设置为2,每个epoch迭代4 480次,整个训练过程一共迭代280 000次。
在YOLOv4的基础上对目标检测算法进行改进,得到如表2所示的几组网络结构。算法1为YOLOv4算法,算法2为主干网络替换为MobileNetV1后的轻量化YOLOv4算法,在算法2的基础上依次增加YOLO层、改进先验框聚类算法和增加SPP(spatial pyramid pooling)模块得到算法3、算法4、算法5。算法6和算法7是将算法5的主干网络替换为MobileNetV2和MobileNetV3得到的。算法7为笔者提出的适用于移动机器人生物体检测的改进算法。
将表2所示7种不同结构的算法在训练环境对测试集进行检测得到表3的实验结果。从表3可知,将YOLOv4的主干网络CSPDarknet53轻量化为MobileNet系列之后,运算速度大大提高,单幅图像检测时间减少为原来的1/3。符合移动机器人的应用要求。算法3、算法4、算法5相比于算法2的平均检测精度逐步提升,验证了提出的改进策略可以提升算法的检测性能。
表2 算法配置
表3 算法性能比较
对算法主干网络替换为Mobilnet系列后的算法2和更改颈部网络后的算法5、算法6、算法7在测试集上的检测结果进行比较,分析改进算法在各种情况下的生物体检测性能。从图5可知,当图像中待检测生物体数目较少且目标较大时,算法2、算法5、算法6、算法7的检测效果相当。
图5 少目标检测示例
与增加了YOLO层的3个算法相比,算法2对于小目标的检测效果较差。从图6可知,算法5、算法6对于小目标物体的检测效果相当,主干网络中SE模块的引入使得算法7对极小的目标检测能力相比较算法5和算法6有所提升。
图6 小目标检测示例
从图7可知,当图像中生物体数量较多时,由于PANet输入特征层和金字塔最大池化层的增加,算法5、算法6、算法7比算法2检测效果好。主干网络为MobilenetV3的算法7在多目标检测中效果最好。
图7 多目标检测示例
将改进后的目标检测算法应用于如图8所示的移动机器人进行可用性分析。机器人的处理器为ARM Cortex-A72 1.5 GHz,GPU:Broadcom VideoCore VI@ 500 MHz。为了使得机器人有更强的运算能力,在树莓派4b上配置两个神经计算棒(intel neural compute stick 2)进行卷积神经网络的运算推理。
图8 移动机器人及其视觉单元
机器人分别在客厅、阳台和猫咖等场景进行视觉采样识别。在此过程中,树莓派4b控制相机实时采集图像数据,目标检测的推理过程在神经计算棒上进行。目标检测的结果保存在连接在树莓派上的SD(secure digital memorycard)卡中。机器人根据检测框在图像中的位置实时进行运动,保证待检测目标始终位于相机视野范围之内。
在客厅场景中,首先单人在机器人视野范围内进行往复直线运动,包括运动过程中的转身。然后双人进行圆周轨迹运动,运动过程中人会进行姿态的调整。在双人运动时会出现目标遮挡的现象。从图9可知,移动机器人视觉单元在客厅的环境中可以准确地识别人。对拍摄视角变化、人和摄像头距离远近及人的姿态变化具有鲁棒性。在阳台场景中,狗进行随机运动,人在狗的旁边与狗互动。整个过程狗的姿态有较大的变化,在距离相机较远时狗在图像中的投影较小。从图10可知,移动机器人可以识别不同姿态的狗和人,对于小目标和遮挡生物体具有较好的识别能力。猫咖场景较为复杂,生物体的数量也较多,人和猫都进行随机运动。从图11可知,改进的算法可以准确识别不同品种的猫,使移动机器人具备稳定的多目标多种类检测能力。同时算法对于在图像中较小的目标具有良好的识别能力,在复杂多变的场景中可以稳定准确地识别生物体。改进后的算法在机器人移动平台上的检测速度达到18 fps,比YOLOv4算法每秒多检测14帧图像,满足机器人的视觉采样需求。
图9 多人场景识别
图10 人、狗场景识别
图11 人、猫场景识别
通过实验可知,改进的YOLOv4算法可以在移动机器人上准确、鲁棒地检测生物体。
将YOLOv4的主干网络替换为MobileNetV3实现网络架构的轻量化,并在此基础上改进PANet结构、增加SPP模块数量得到适用于移动机器人的目标检测算法。在检测精度相当的情况下改进后的目标检测算法单幅图像的检测时间为YOLOv4的30.3%。实验表明,将改进后的算法应用于移动机器人可以实现对多目标、小目标和遮挡目标的检测,在复杂环境中可以稳定准确检测生物体,检测速度达到18 fps,比YOLOv4算法每秒多检测14帧图像。