APP下载

6D姿态实时估计的轻量型YOLO网络*

2022-01-27钟志强陈新度刁世普

组合机床与自动化加工技术 2022年1期
关键词:置信度姿态卷积

钟志强,陈新度,吴 磊,刁世普

(广东工业大学 a.广东省计算机集成制造重点实验室;b.省部共建精密电子制造技术与装备国家重点实验室,广州 510006)

0 引言

6D目标姿态估计一直是计算机视觉领域中的一个重要问题,过去已经有大量的研究致力于此。深度神经网络(DNN)在实时姿态估计领域表现出卓越性能,但是,为了使DNN网络具有更好的泛化能力,现有网络本身的结构都是非常庞大且复杂的,从而导致它的计算效率低,实时性不够好,并且需要在有很强的计算能力和足够内存的计算机上才可以运行,这对一些计算能力不强和仅需要对单一目标姿态估计的场合非常不友好。

实时目标检测和6D姿态估计对于医学诊断、增强现实、虚拟现实和机器人技术至关重要[1]。6D目标姿态估计不仅需要对单幅RGB图像中的目标进行定位,还需要检测目标在三维空间中的旋转角度。总结大部分前人的工作来看,姿态估计方法主要分为三类:基于RGB-D的方法[2]、基于模板匹配的方法[3]和基于卷积神经网络的方法[4]。最近几年的研究中表明,基于深度学习的方法在RGB图像中的检测和6D姿态估计可以获得具有代表性的结果。SSD6D扩展了2D物体检测器的思想,基于离散视点分类而不是用直接回归法的6D姿态估计,以这种方式预测的结果是非常不准确的,因为它们是真实位置的近似离散,需要后期的优化提升精度[5]。BB8使用多阶段方法,在前两个阶段中,执行了从整体到精细的分割,其结果是对象边界框点的第三个或两个投影之间的交集,但这是一种多阶段的方法,从而导致计算的速度非常慢[6]。PVNet采用了回归指向关键点的像素单位向量的方法,并对这些向量使用RANSAC对关键点位置进行投票[7],这种表示提供了关键点位置的不确定性。PNP解算器又可以进一步利用这些不确定性[8]。基于SSD网络提出了Tiny SSD网络[9],该网络基于SSD改进而来,比SSD更轻量,占用的资源更少,但是精确度却和原网络一样优异。

受此启发,在单一目标物的6D姿态识别时,不需要网络有很好的泛化能力,但是对网络的识别速度有很高的要求,需要很强的实时性。针对以上问题,本文提出了一种基于YOLO6D[10]网络的端到端训练的单阶段网络结构,它可以直接检测三维边界框顶点的二维投影,不需要额外的后处理等细化步骤,比原网络更加轻量化,模型参数更少,占用的资源更少,从而运算的速度更快,可以做到很好的实时性。

1 YOLO网络结构

1.1 YOLOv2网络结构

YOLO6D网络主体框架是在YOLOv2主体框架上经过优化得到的,YOLOv2是单阶段检测网络,且无需优先生成预选区域,可以直接在整个输入图像中做目标回归预测,这样不仅训练过程中能够实现端到端的优化,而且检测效率高,能够满足实时处理需求。YOLOv2 相较于YOLOv3网络结构简单,并且在受限制的环境下有较好的实时性。

1.2 YOLO6D网络结构

YOLO6D网络框架是在YOLOv2网络框架上经过修改得到的。如表1所示,YOLO V2网络结构总共有31层,第0~22层是Darknet-19网络,其中卷积层数量为19个,最大池化层数量为5个。YOLOv2的最后一个卷积层的输出通道数为5(anchor数量)*[4(center_x,center_y,width,height)+ 1(confidence)+ num_classes。其中anchor表示锚框,center_x,center_y,width,height分别表示锚框的中心点坐标和宽高,confidence表示置信度,num_classes表示目标种类。YOLO6D将网络的输出改为5(anchor数量)*[18(9个顶点在像素坐标系下的坐标)+ 1(置信度)+ num_classes。

表1 YOLOv2网络结构

1.3 改进的YOLO6D网络结构

在卷积神经网络中,卷积层的作用是提取更深层次的特征信息,卷积层数量越多就意味着提取到的特征越细小,每增加一个卷积层,对应神经元的数量,网络的参数也都随之增加,从而模型就变得更加复杂,越复杂的模型计算量就越大,而且更容易出现过拟合现象。

池化层的主要作用:第一是去掉冗余信息,节约计算资源,第二是保留检测物体的特征信息,第三是降低参数量,提高模型性能,防止过拟合。特征提取的误差主要来自两个方面:①邻域大小受限造成的估计值方差增大;②卷积层参数误差造成估计均值的偏移。平均池化能减小第一种误差,更多地保留图像的背景信息,最大池化和平均池化都是对数据做了下采样,但是最大池化偏向于减小第二种误差,更多地保留纹理信息,选出分类辨识度更好的特征,提供了非线性。平均池化强调对整体特征信息进行下采样,偏向于减少参数数量,在减少维度的同时,更有利信息传递到下一个模块进行特征提取。

基于我们当前使用场景下姿态估计对象的单一性,我们的网络不需要很强的泛化能力,也不需要对小目标有很强的识别能力。综上所述,受文献[1,9]改进方法的启发,对原YOLO6D网络进行改进。将原网络的第5层去掉1个1×1和1个3×3的卷积层,将第6层去掉2个3×3的卷积层,并将原网络的5个最大池化层修改为4个最大池化层加上1个全局平均池化层,从而减少原网络中深层卷积层,减少参数,提升网络速度。

如图1为改进后的网络结构图,网络输入一张2D的彩色图片,输出一S×S×(9×2+1+C)的3D 张量。网络输入图片划分成S×S个网格,物体的中心点所在的网格负责预测该物体的9个坐标点(9×2),置信度1(confidence)以及类别(C)。

图1 改进的YOLO6D网络结构图

为了增加网络深度同时压缩特征,在3×3的卷积核之间加入1×1 的卷积核,每次最大池化操作后通道数会翻倍。在每一层网络前先对输入的图像数据进行批量归一化操作,可以有效提高准确率(mAP)以及显著改善收敛性,防止过拟合。

2 实现原理

2.1 目标定位

3D目标检测和2D目标检测一样,空间中存在一个可以将目标物包围住的3D边界框,我们的目标是检测出3D边界框并将其分类。3D边界框可以表示一个物体的姿态,其中包含物体在3D空间中的位置xyz,以及物体绕x轴,y轴和z轴的旋转角度等信息,即6个自由度,只要我们知道空间中任意物体的这6个自由度就可以确定唯一的物体姿态。在预测6D姿态之前,首先要预测3D边界框在2D图像上投影的1个中心点和8个角点,我们定义这9个控制点是3D对象模型的中心点和边界框角点。通过这9个点由PnP算法计算得到6D姿态。这样我们就可以把预测物体6D姿态的问题转化为预测9个坐标点的问题。

模型将一幅RGB图像作为输入,用图1所示的全卷积结构对其进行32倍降采样处理,输出的特征尺寸为13×13,将图像分割成一个包含S×S个网格的2D规则网格,输出3D张量中的每个网格位置将与一个多维向量相关联,该多维向量包括预测的9个控制点在2D图像上的位置、对象的类别概率和总体置信度值。

训练好的网络不仅能够预测精确的2D位置,而且能够预测物体存在区域的高置信度值和不存在区域的低置信度值。2D物体检测时,一般使用图像中预测的锚框和真实的2D矩形相关联的交集(IoU)分数作为其置信度值。而我们的对象是3D的,为了计算两个任意长方体的等效IoU分数,我们需要计算对应于它们交点的3D区域。这个计算是复杂的,并且会减慢训练速度。因此,这里采取了不同的方法。使用图2所示的置信度函数对预测的置信值进行建模。置信函数c(x)基于预测的2D点与实际目标2D点的距离,返回由x表示的预测点的置信值。函数公式如下[10]:

图2 置信度函数[10]

(1)

其中,DT(x)被定义为图像空间中的2D欧几里德距离,是一个具有截止值的尖锐指数函数,而不是单调递减的线性函数,因此可以实现精确定位。指数函数的锐度由参数α定义。在实践中,我们将置信函数应用于所有控制点,计算平均值并将其指定为置信度。

该方法还计算了预测的3D边界框与真实边界框的交并比得分,从而可以保证低置信度表示没有目标的区域,高置信度区域存在目标。为了提高对不同尺寸物体的鲁棒性,当网络按32的下采样因子对图像进行下采样时,我们将输入分辨率更改为从集合{320,352,…,608 }中随机选择的32的倍数。

2.2 姿态估计

在6D物体姿态估计的时候只需要调用一次网络,从而保证了网络快速运行。每个网格都可以预测该网格内物体的姿态,并且通过调整置信度阈值来删除具有低置信度的预测单元。对于尺寸较大的目标和位于两个网格相交处的投影对象,多个网格很可能都会预测出较高的置信度。为了获得更鲁棒的姿态估计,找出置信度得分最高的3×3邻域的单元,把相关单元的置信度得分当作权重,通过计算各个检测的加权平均值来组合这些相邻单元的各个角的预测。

网络给出目标质心的2D投影与其3D边界框的角以及对象标识。我们使用PnP姿态估计方法根据2D点和3D点之间的对应关系来估计6D姿态。PnP算法使用9个已知物体在相机坐标中的旋转矩阵和平移矩阵对应的点,包括8个角点和一个中心点。中心点和角点的预测不一样,因为中心点落在某个网格,相应的网格就负责预测这个物体,所以中心点的偏移一定会落在网格之内,因此通过sigmoid激活函数将网络的输出压缩到0~1之间,但对于其他8个角点,有可能落在网格之外,所以8个角点的坐标偏移可以表示为[10]:

gx=f(x)+cx

(2)

gx=f(y)+cy

(3)

其中,cx,cy表示cell的坐标。对于中心点而言,f(·)表示sigmoid函数,对于角点而言,f(·)表示恒等函数。通过最小化公式(4)[10]来找到目标的近似位置,然后再细化到顶点位置。

L=λptLpt+λconfLconf+λidLid

(4)

其中,Lpt为坐标损失;Lconf为置信度损失;Lid为分类损失。坐标损失和置信度损失用均方误差函数来表示,分类损失用交叉熵函数来表示。为了提高模型的稳定性,将不包含目标的权重设置为0.1,包含目标的权重设置为5,分类损失函数和坐标损失函数的权重都设为1。

2.3 评估指标

模型的6D姿态精度评估用3个标准来度量,即2D重投影误差、5 cm5°标准和算法运行时间对比。2D重投影误差表示的是物体3D网格顶点的2D投影和物体真实姿态之间的平均距离,当该误差小于5个像素的时候认为姿态估计是准确的。2D重投影误差公式如下[11]:

(5)

其中,Pi是像素i的位置;μ是像素分布的混合权重最大的平均值;H是估计的对象姿态;C是相机矩阵。

5 cm5°标准是指如果平移误差和旋转误差分别低于5 cm和5°则表示估计是正确的。公式如下[12]:

(6)

ekE=arccos[(Tr(RR′-1)-1)/2]

(7)

其中,t和t′分别是预测的平移矩阵和真实的平移矩阵;R和R′分别是预测的旋转矩阵和真实的旋转矩阵,由旋转的轴角的角度来表示误差ekE。

3 实验结果与分析

3.1 实验平台搭建

本文实验平台如图3所示,硬件配置为:SHANSU IRC100底盘,HUASHU CO602六轴机械臂,Intel D435i相机,因时机器人EG2-4B1电动夹爪,Intel(R)Core(TM)i7-9750H CPU @ 2.60 GHz 2.59 GHz,32 GB内存,GPU为:NVIDIA GeForce RTX 2060。软件环境为:ubuntu16.04,anaconda3,python3.6,pytorch0.4.1,cuda10.0,cudnn7.5。

图3 实验平台

3.2 实验数据集制作与实现细节

3.2.1 实验数据集制作

传统LineMod格式的数据集制作非常麻烦,首先要制作三维模型然后才可以得到目标的三维信息,对于不规则的目标物体,其三维模型制作非常复杂且存在精度不高的问题。本文利用二维码信息识别的方法生成三维信息数据集,该方法通过目标物体最小外接矩形的尺寸获得目标物体的三维坐标信息,从而规避了三维模型的制作过程。

数据集采集平台包含Kinect2.0相机、转盘、码盘、目标物体、三脚架等。数据采集的流程如图4所示,首先利用打印好的棋盘格对相机进行标定,获取相机的内外参数。然后利用Aruco库生成并打印包括至少一个二维码的码盘,并将目标物摆放在码盘平面正中间位置。启动转盘,设定转速大约在60 s/圈,在转盘转动的过程中,用相机对码盘上的物体进行实时视频采集,在这个过程中要调整相机的采集角度,从而可以获得物体的各个角度的数据。

图4 数据集制作流程图

采集的过程中码盘上的二维码至少有一个不被遮挡,如果有多个二维码都没有被遮挡,可以选择其中一个二维码的中心点为原点设立世界坐标系,计算出世界坐标系相对相机坐标系的旋转矩阵和平移矩阵。测量目标物体的外形尺寸和二维码之间的距离,从而计算出目标物体最小外接矩形的8个顶点的世界坐标。结合8个顶点的世界坐标和相机的内外参数,利用Opencv中的Projectpoint函数计算出8个顶点的像素坐标。将8个顶点连接成6个面,对面内外不同区域设置不同像素值从而得到相应的掩码mask文件和mask-show文件。通过查看mask-show文件,判断8个顶点的像素坐标是否精确,对于误差过大的图片可以手动删除。剔除不好的数据后,由掩码mask、目标物体、像素坐标生成LineMod格式数据集。

本文采取大约1000张目标对象各个角度的图片,其中70%用来当作训练集,30%用来当作测试集。

3.2.2 实现细节

为了提高网络模型的鲁棒性,避免过拟合,实验时对图像进行数据增强。每次从训练集读取图片之后,都对图像进行一次随机的翻转、旋转、抖动、或将图像的饱和度和亮度按照1.5倍的指数改变、或随机缩放和平移图像使其达到图像大小的20%。同时将置信度α设置为2,距离阈值设置为30 pix,设置学习率从0.001开始,每100个周期将学习率变为原来的十分之一。

3.3 单目标姿态估计

我们基于3.2节的数据集进行了单目标姿态估计的测试。该数据集不涉及深度图像信息,仅仅包含RGB图像。如图5所示,我们的目标对象包含不同颜色和形状,对这些目标从俯视,平视,侧视等不同的角度进行测试。图5的第一、二、三列分别展示同一目标物在不同的光照条件下从不同的角度进行姿态估计的结果,维他奶盒的尺寸为:长0.063 m、宽0.041 m、高0.105 m;可乐罐的尺寸为:半径0.033 m、高0.115 m;旺仔牛奶盒的尺寸为:长0.048 m、宽0.032 m、高0.087 m。第四列目标物材质分别是黄铜和红铜的圆柱体,半径为0.01 m,高为0.034 m,维他奶盒的体积是其25倍多。因此同时展示了对于同一种材质不同颜色的目标物进行姿态估计的结果也展示了改进后的算法对小尺寸目标位姿估计的效果。第五列展示了塑料的积木块和铜柱的姿态估计结果,并在铜柱上显示出坐标姿态。结果显示目标对象的最小外接矩形可以完整地把目标对象包围住,最终的姿态估计结果和真实的姿态非常接近,尤其是数据集中存在光照导致的亮度不同和模糊不清的数据时,算法依然能很好地计算出目标的姿态。

图5 姿态估计效果图

3.4 结果与分析

基于3.2节的数据集,对比了几种目前使用较广泛的算法。在本数据集中,Rcu和Ycu分别表示红色铜柱和黄色铜柱,半径为0.01 m,高为0.034 m,体积很小,维他奶盒是其体积的25倍多。由表2~表4结果可知,基于改进的姿态估计算法和当前主流的算法进行对比,对2D重投影误差和5 cm5°度量的结果而言,改进后的网络对于维他奶和可乐罐这种尺寸相对大,纹理相对丰富的目标物的识别准确率和原网络一样优异,比BB8精度高。对于Rcu和Ycu这样的小目标物位姿估计准确率稍低于原网络,但在运行速度方面本文的方法远远高于其它算法,运行速度是BB8算法的近12倍,是Brachmann算法运行速度的17倍多,可以达到35 FPS,适用于实时处理。

表2 重投影误差准确率 (%)

表3 5 cm5°准确率 (%)

表4 处理速度对比结果 (FPS)

因为改进后的网络结构简单,所以对于Rcu和Ycu这样的小目标物位姿估计准确率稍低于原网络。也正是因为改进后的网络结构简单,在运行速度方面我们的方法远远高于其它算法,适用于目标对象单一,对运行速度有要求的场合。

4 结束语

现有的基于卷积神经网络的位姿估计算法都需要增加后处理步骤来提升姿态估计精度,并且需要精确的三维模型,这会使程序的运行速度大大减慢。针对目前主流的三维位姿估计算法实时性不高的问题,提出了基于Yolo6D改进的位姿估计算法。改进后的算法通过输入图像和与之对应的三维模型之间的多组2D-3D对应关系,利用PnP和RANSAC方法计算6自由度姿态,是单阶段处理算法,且不需要精确的三维模型。相较于改进前的算法,改进后的算法在保留深度卷积神经网络特征提取能力的基础上,通过改变卷积层和池化层结构,减少特征图和模型参数等方法,使网络检测速度有了明显的提升。改进后的算法对小目标的兼顾还不是很好,在接下来的研究中,可以在此网络的基础上增加残差网络或者更换激活函数来提升对小尺寸目标的检测精度。

猜你喜欢

置信度姿态卷积
基于数据置信度衰减的多传感器区间估计融合方法
一种基于定位置信度预测的二阶段目标检测方法
基于3D-Winograd的快速卷积算法设计及FPGA实现
攀爬的姿态
卷积神经网络的分析与设计
从滤波器理解卷积
全新一代宋的新姿态
正负关联规则两级置信度阈值设置方法
基于傅里叶域卷积表示的目标跟踪算法
校核、验证与确认在红外辐射特性测量中的应用