APP下载

融合深度学习的机器人目标检测与定位

2020-12-26黄怡蒙

计算机工程与应用 2020年24期
关键词:卷积损失机器人

黄怡蒙,易 阳

南京工业大学 电气工程与控制科学学院,南京211816

1 引言

随着物联网、机器人等领域的视觉处理技术的出现,人们对复合高效卷积神经网络模型在资源受限的硬件设备上进行实时目标检测与定位需求越来越大,如何在降低硬件成本的同时,保证目标检测实时性并提高其检测准确度,成为制约其实用性的重要因素[1-3]。

传统的目标检测一般使用滑动窗口的框架,主要包括三个步骤:首先在图像上选取一些候选区域,然后对这些候选区域进行特征提取,比如人脸检测常用的Harr特征,行人检测和普通目标检测常用的HOG特征等,最后使用训练的分类器进行分类,比如常用的SVM模型[4-5]。

近年来基于深度学习的目标检测方法大幅提高对图像分类准确度,成为当前目标检测领域主流算法,如R-CNN、Fast R-CNN、Faster R-CNN[6-8]。但检测准确度往往依赖于复杂框架和高强度硬件加速器,不能直接移植于机器人平台。YOLO 和SSD 等轻量级网络对硬件要求比较低,检测速度较快,处理速度可以达到45 帧/s,其Tiny版本甚至可以达到155 帧/s。这主要得益于其网络设计是将分类和定位合二为一,而且这种统一的设计也使得训练和预测可以端到端的进行,非常简便[9-10]。不足之处是小对象检测效果不太好,对边框的预测准确度不是很高,总体预测精度略低于Fast-RCNN。主要是因为网格层结构比较稀疏,而且每个网格只预测两个边框,另外池化层也会丢失一些细节信息,对定位存在影响。

为了提高YOLO 模型的精度,Joseph Redmon 团队先后又提出了YOLOV2和YOLOV3。YOLOV3将网络深度推至106 层,其中引用残差网络结构思想,同时采用多尺度特征融合,使得YOLOV3 在小目标物体上的检测效果更好[11]。由于YOLOV3的网络结构比较复杂,因此在模型训练时对电脑的CPU 要求比较高,相比于YOLOV3,Tiny-YOLOV3网络层数少,是YOLOV3的简化版本,并且在网络中融合了金字塔特征和全卷积网络技术,可使检测的模型更加精简,并且能提取更深层次的语义信息,使检测精度更高[12-13]。而且Tiny 的网络层数比较少,因此速度快,占内存小,被广泛使用。然而将Tiny网络应用于机器人目标检测领域,其精度还需要进一步的提高。

针对实时目标检测准确率与实时性难以兼顾的问题,本文改进了检测算法Tiny-YOLOV3 模型的网络结构与损失函数的设计。为了提高检测精度,本文提出一类Tiny-YOLOV3 改进模型,调整YOLO 检测网络架构的损失结构层,以卷积层和特征图的相关系数矩阵表征特征图分布,设计损失函数优化损失特征层分布,增强网络特征的表达能力。采用三角函数定位将基于图像的目标检测位置转换为机器人坐标系位置,实现NAO机器人对日常生活小物件的实时目标检测与快速定位。

2 系统简介

本文设计了实时目标检测与定位系统,系统框图如图1。离线部分使用VOG 格式自制的数据集基于改进Tiny-YOLOV3 网络模型进行训练,更新迭代网络权重矩阵。实时检测部分使用NAO机器人的CMOS摄像头,设置分辨率640×480 为图片改进Tiny-YOLOV3 进行实时目标检测,使用三角函数将图片目标信息转换为机器人的位置信息,通过运动规划实现机器人手臂抓取实验。

图1 Tiny-YOLOV3改进模型的机器人实时目标检测与定位系统框架

3 原始Tiny-YOLOV3网络介绍

相比较YOLOV3,Tiny-YOLOV3将网络进行压缩,没有使用残差层,主干网络采用的是一个7层的卷积层和池化层相结合的网络提取特征[14-15]。具体结构如图2所示。

虽然Tiny-YOLOV3 简化了网络结构,但是总体思想还是可以借鉴YOLOV3,其中maxpool 表示池化层,conv 代表卷积层,upsample 表示的是上采样。在Tiny-YOLOV3 网络中通过卷积层和池化层来对输入的图片提取特征和降采样,再通过上采样的方式,将不同通道的特征相拼接输出三种不同尺度的特征图,分别是13×13、26×26 和52×52。之所以输出三种不同尺度的特征图,是为了适应不同尺寸的目标。13×13 适合检测大尺寸的目标,而52×52 其感受野比较小,适合检测小尺寸的目标。因此Tiny-YOLOV3 中引入的特征金字塔网络,可以利用多层融合后的特征进行检测,能够增强语义信息,有助于提升小目标的检测率。

图2 原Tiny-YOLOV3的网络架构

4 改进后的Tiny-YOLOV3网络

为了提高Tiny-YOLOV3 网络的精度,在不影响速度的条件下,在网络中添加一层损失相关层,原始的Tiny 网络没有考虑当网络同一层的卷积核的数量较多时,输出的特征图之间的差异性不能得到保障,从而会导致部分特征图重复,降低模型的精度。而改进后的网络由于新添加了损失相关层可以提高输出特征图的多样性,并且在保证模型性能基本不变的情况下降低特征图的数量,提高模型的检测精度,改进后的模型图如图3所示。

损失特征层作为一个独立的网络层将其添加到第7个卷积层和池化层后面,改进后的网络包含网络特征提取、目标分类检测对应的输出和损失相关网络对应输出的系数矩阵。新添加的损失特征网络层的作用主要是在模型训练更新权重的过程中输出第7 个卷积层和池化层后的特征图的相关系数矩阵,具体过程为:将第7个卷积层和池化层后面的M个S×S的特征图转化为M个长度为S2的特征向量,然后计算两两特征向量之间的协方差和相关系数,最终得到一个S×S的相关系数矩阵K 。具体公式如公式(1)和公式(2)所示:

其中,Cov(Xp,Xq)表示的是第p和第q个特征向量之间的协方差,Var[Xp] 表示第p个特征向量的方差。Kpq表示第p和第q个特征向量之间的相关系数,相关系数的绝对值越大,意味着两个特征向量的线性相关性越大;相关系数的绝对值越小,意味着两个特征向量的线性相关性越小。

5 损失函数设计

5.1 原始的损失函数

原始的损失函数主要分为三大部分:坐标损失,置信度损失以及分类损失。损失函数公式如公式(3)所示:

图3 改进后Tiny-YOLOV3网络架构

其中,xi,yi,wi,hi,Ci,pi为真实值,̂ 为预测值。表示第i个网格中负责预测该目标物体的第j个预测框是否含有检测的物体,如果有,则进行这一项的计算,如果没有,则进行这一项的运算。在所有的网格中,不包含物体中心坐标的网格占大多数,所以累计起来这一项的数值会很大,为了平衡相互之间的大小关系,这里取λnoobj为0.5。

5.2 改进后损失函数设计

改进后的损失函数是在原始的损失函数式子当中添加一项损失特征项,计算公式如式(4)所示:

其中,M表示特征图的输出个数,表示M维的相关系数矩阵K 在(i,j)处的值,表示M维单位矩阵在(i,j)处的值,β用来平衡检测损失和相关性损失之间的误差,实验中β取0.3,Tb是一个以b为系数的分段函数,如公式(5)所示:

在相关系数矩阵中,Tb可以抑制小于阈值b,或者减弱大于阈值b所带来的损失。当输出的特征图之间的相关性较低时,b值可以避免模型训练好的参数被破坏。在本文实验中,b取0.15,即不考虑相关系数小于0.15时产生的损失。最终的损失函数如公式(6)所示:

6 机器人三角函数定位

NAO拥有两个摄像头,可以跟踪、学习并识别不同的图像。NAO机器人根据检测算法识别出要检测的物体,在没有发现目标时,NAO机器人按程序设定调整当前的朝向以及头部的角度。在发现目标以后,不断地调整身体的位置直到让目标处于视野的中心。

在整个目标检测的过程中,机器人为了保证目标检测的稳定性和准确性,身体朝向和头部角度的调节均采用P控制。如公式(7)所示:

其中,k为比例系数,实验中取0.8,θ为要检测的图像与视野中心的偏角,由目标在图像中的位置和摄像机的张角决定。计算公式如式(8)所示:

其中,x和y代表图像中目标的位置,yyaw和ypitch分别代表NAO摄像头的仰角和张角,分别为60.97°和47.64°,w和h为图片的宽和高,θyaw和θpitch分别表示目标的位置与视野中心位置形成的偏航角和俯仰角,如图4所示。

图4 目标图像定位示意图

在图5空间定位示意图中X方向为当前NAO机器人身体所正对的方向,Y方向为机器人身体的垂直方向,其中Θyaw由头部相对于身体的偏航角和图4中目标位置与视野中心位置形成的偏航角θyaw决定,Θpitch由头部相对于水平方向的俯仰角和图4 中目标位置与视野中心位置形成的俯仰角θpitch决定。其中NAO机器人在X和Y方向上的距离可由公式(9)计算得到:

其中,H1 为NAO 机器人的摄像头到地面的高度,H2为目标距离地面的高度。

图5 空间定位示意图

7 模型训练与实验结果

7.1 实验环境与数据

模型的训练机器是一台配置型号为Intel i5-6600,内存为16 GB,GPU 为NVIDIA GTX 1070 的个人计算机,操作系统为Ubuntu16.04,实验硬件平台为NAO 机器人。

实验的检测类别为三类:足球(football)、杯子(cup)、笔(pen)。数据集主要是由自己拍摄和网上搜集的图片组成,然后使用标注工具labelImg对数据集进行标注,并且将标注好的数据集制作成VOC 数据集的格式,如图6所示。

图6 VOC数据集格式

其中Annotations文件夹里放置标注好的xml文件,JPEGImages 文件夹里放置要训练的图片,Main 文件夹里会在后期网络训练过程中生成训练、验证、测试这三个文件夹。训练模型时按照8∶2 的比例来划分训练集和测试集,测试集中又随机抽取10%当作验证集。数据集中的各个类别的数量信息如表1所示。

表1 数据集中各个类别的数量信息

7.2 实验过程及分析

模型训练时使用GPU 加速,全程训练时间大约为9 h,模型最终在遍历训练集第81 次时,达到“早停”条件。改进后的Tiny-YOLOV3模型训练过程中的学习率和特征项损失函数曲线如图7和图8所示。

图7 改进后的Tiny-YOLOV3学习率衰减曲线

从图7中可以看出,模型训练的初始阶段学习率为0.000 1,在第60 次迭代时,学习率下降得非常快,在第70次迭代以后,学习率趋近于平稳,最终模型在遍历训练集第81 次时,学习率下降至0.000 000 1,使得模型能够进一步收敛。

从图8(b)改进后的损失曲线中可以明显看出,模型在第0~10次遍历训练集时,损失值下降得非常快,在第50次迭代以后,损失值趋近于平稳,说明在损失特征层的作用下,特征图之间相关性在逐渐降低,通过对比图8(a),图8(b)的模型曲线下降得更快并且更加平稳,也进一步说明了在网络层中增加一个损失特征层以及在损失函数中引入损失特征项能够提高模型的输出特征能力同时保证模型的收敛。

在自制的数据集上,本文改进的算法同原始的Tiny-YOLOV3算法进行对比,结果如表2所示。

图8 改进前后的Tiny-YOLOV3损失函数曲线

表2 模型改进前后检测精度与速度对比

从表2 中可以看出,改进后的模型准确率达到了72.11%,相比较原始的模型,准确率提高了4.08 个百分点。其中杯子和足球的AP 值提升得最明显,约5 个百分点和6 个百分点。虽然在Tiny-YOLOV3 网络中添加了一层损失特征层,但是检测速度只下降了3 ms,因此对目标的检测速度影响可以忽略不计。

7.3 不同算法下的抓取对比误差实验

为了验证该算法的稳定性,将机器人摆放在不同的角度,每个角度进行10次的抓取实验,并与未改进前的算法进行比较,对比实验如图9和表3所示。

其中,x轴代表每个角度进行误差实验的次数,y轴代表真实值与测量值的绝对误差,单位为mm,图9中橙色的线表示期望误差,蓝色的线表示改进后的算法测得的误差,绿色的线表示使用未改进的算法测得的误差,每组实验分别在白天光线较好和晚上光线较差的环境中进行,结合图9和表3可以看出,改进后的模型在这五组实验中的平均置信度都明显高于原始模型,而检测的速度和总花费的时间几乎没有受到影响。表明本文改进的模型可以在不影响检测速度的前提下提高检测的精度,而且相比较原始模型,机器人使用改进后的模型,抓取误差更趋于稳定,表明改进后模型的鲁棒性也有所提高。

同时,当检测物体的颜色相近时,原始模型会出现漏检、误检的情况,而改进后的模型这两种情况都得到了很大的改善,部分效果图如图10所示。

图9 各角度下原始模型与改进模型的抓取误差对比

表3 模型改进前后抓取实验效果对比

7.4 机器人抓取实验

机器人在接收到指令以后,启动摄像头拍摄图片并检测图片中是否含有目标物体,其中笔在机器人视野中的变化过程如图11所示。

从图11中可以看出,NAO根据笔在视野中的位置,不断调整自己的姿势,让笔慢慢调整到视野的中心。从图12中可以看出,NAO机器人在检测到物体后,不断地定位,并且慢慢移动接近目标,最终在调整到合适的距离之后实现对笔的抓取。

图10 原始模型与改进模型的检测效果对比

图11 笔在NAO视野中心的变化过程

图12 NAO机器人检测和抓取目标物体过程

8 结论

本文以Tiny-YOLOV3 网络为基础,通过在原始的网络中添加一层损失特征层、在损失函数中添加一项损失特征项来改进Tiny-YOLOV3。通过增加损失特征层,优化了输出特征图在模型训练过程中的分布,提高了模型的表达能力。改进后的损失函数,可以平衡检测损失和特征损失之间的误差,进一步促进模型的收敛。并且将改进后的算法应用在NAO 平台,在保证检测速度的前提下,机器人实时检测精度有了很大提升。可满足硬件约束下机器人在分拣、采摘、监控、服务等多样实时性目标检测应用场景需求。在今后的研究中如果采用更深的网络,检测的精度将有更进一步的提升。

猜你喜欢

卷积损失机器人
基于3D-Winograd的快速卷积算法设计及FPGA实现
胖胖损失了多少元
卷积神经网络的分析与设计
从滤波器理解卷积
玉米抽穗前倒伏怎么办?怎么减少损失?
基于傅里叶域卷积表示的目标跟踪算法
菜烧好了应该尽量马上吃
机器人来帮你
认识机器人
机器人来啦