基于深度卷积神经网络的三维模型识别
2019-04-23王亦民
杨 军,王亦民
(兰州交通大学 电子与信息工程学院,兰州 730070)
0 引 言
语义对象识别对于检索真实环境中的物体有着极其重要的意义。越来越多的传感器如LiDAR和RGBD相机被使用在自动检索系统中,如无人驾驶汽车、无人机等,这些传感器大多被用于躲避障碍物或绘制地形图,由于这些传感器获取三维模型多由点云或网格的方式存储,损失大量表面纹理特征信息,给三维模型识别工作带来了很大的困难。目前,如何利用三维点云数据通过聚类等方式进行三维模型物体识别是现今机器识别物体的重点研究方向。
本文的主要研究问题是预测出给定三维点云数据的相应标签,达到目标识别和分类的目的。现有的解决办法大多是由人工提取出三维模型的特征描述符,然后将其送入分类器如支持向量机(support vector machine,SVM)进行训练,通过相同特征匹配原则以达到识别模型的目的。虽然这类方法是目前计算机视觉中图像识别的主要技术,然而,由于传统机器学习算法需要人工进行特征提取,需要消耗大量的人力物力,并且特征提取的质量直接影响分类器的精度。因此,这类方法正逐渐被基于卷积神经网络的深度学习方法所取代。卷积神经网络(convolution neural network,CNN)是深度学习的一种应用技术,其利用卷积核来自动提取特征,省去了人工提取特征的步骤。CNN利用端对端的模型结构通过反向传播更新权重参数,可以很好地处理分类与回归等问题。基于卷积神经网络的检索方法已经大大改进了图像对象识别的精度,并且也在其他领域中显示出了明显的优势。
利用三维模型空间信息与体积信息进行模型检索,虽然在概念上只是简单地将基本方法扩展到体积数据。但是由于三维模型特征的离散性,以及在处理模型的过程中所产生的非刚性形变对特征提取的影响,导致网络结构的设计以及超参数的选取问题变得尤为困难。此外,由于三维模型的存储多为点云或者三维网格数据,当模型使用稠密点云或者三维网格进行特征提取时,将造成大量的计算冗余,若采用稀疏采样方法对稠密数据进行采样,则会损失大量的细节信息。以上原因成为利用卷积神经网络解决三维模型识别和分类问题的瓶颈。
本文的主要贡献有2个方面:①构建了一个3D卷积神经网络架构,采用占用网格模型将点云数据在空间中所占区域用体素化立方体代替,以此作为卷积神经网络的输入数据,通过卷积层提取体素化模型的特征,池化层整合已提取的特征,最后在全连接层中对模型进行分类;②通过对训练集中体素模型进行旋转的方式来获取该模型的旋转副本以增加训练集的数据量,这不仅通过扩展训练集降低了网络的过拟合率,同时在训练过程中增强了网络对不同角度三维模型的识别能力。本算法在保证识别精度的同时,加快了反向传播对参数的更新速度。
1 相关研究工作
卷积神经网络从局部到整体层级式的映射,使卷积核经过多层映射后有巨大的感知域,这样模型在处理过程中既包含局部特征又具有整体信息。由于卷积运算过程中对所有的对象都没有主观偏好影响。因此,卷积运算所提取的数据特征均为基础特征,不受数据变换影响。此外,卷积操作既通过综合数据区域信息和非线性映射来优化局部的表达,又通过局部信息的整合来进行整体描述。因此,选取卷积神经网络为本文主体算法。
对于2.5D卷积计算的研究中,文献[1]通过定义视点及视角扫描方向对三维点云数据进行区域扫描,将获取的深度图像用于构建体素三维模型表面,识别空间遮挡关系及区分空白区域,以此对2.5D点云数据进行局部特征提取。但是2.5D点云空间表达不够准确,自遮挡问题无法解决,导致三维模型内部存在大量无效数据,在三维模型特征矩阵中这种无效数据均用零值表示,这使卷积神经网络在前向传播过程中大部分激活层都处于未激活状态,造成大量的计算冗余。文献[2]在提取2.5D点云数据特征的基础上,结合非监督的特征学习方法将扫描获得的2.5D点云数据进行分类,但点云数据的自遮挡所导致的空间信息描述不准确问题以及点云数据计算量大等问题并没有得到实质性的解决。
由于2.5D卷积神经网络存在固有的缺陷,在解决实际问题中不得不转向维度更高的3D卷积神经网络。3D卷积神经网络空间信息特征提取更准确,这意味网络具有更高的精度。但同时由于信息维度的增加,网络参数量会相应变多,计算量增大。因此,可以通过将中间层的特征进行降采样操作来减少网络计算次数,防止网络参数过拟合。
文献[3-4]提出的3D空间体卷积结构已经成功用于从RGB-D相机获取的深度图中检测三维物体。由于预先需要确定可能存在物体的区域,需要存储大量的三维信息点,消耗空间资源。同时在卷积神经网络进行反向传播时,该区域信息由于存储在外部,不能形成一个端到端(end-to-end)的结构,还需要消耗大量时间来进行信息传递。
文献[5]是使用无监督的体积特征学习用于检测室内物体。这种方法基于密集矩阵编码,以损失运算时间为前提追求更高精度。在同一时期,文献[6]提出了一种生成3D卷积形状模型的方法,并将其应用于RGB-D对象场景标记的无监督联合特征学习框架。文献[7]提出了一个使用LiDAR点云数据并采用二进制分类方法训练的三维卷积神经网络,虽然加快了运算时间,但损失了部分精度。文献[8]提出的三维卷积神经网络结构可直接处理多维点云数据,该方法采用了随机元梯度下降法来训练神经网络,并且将监督学习与无监督学习方式相结合进行室外复杂环境中三维模型数据的分类,但直接对复杂环境多维点云进行处理的过程中由于噪声干扰导致网络分类精度不高。
综上所述,由于点云数据空间信息不易提取,存在自遮挡问题且点云间混有大量噪声,难以使用视角渲染二维图像方式对其进行特征提取,若直接使用点云数据作为卷积神经网络的数据输入,则会消耗大量数据储存资源并影响网络训练速度及分类精度。因此,针对以上存在问题,提出一种体素化占用网格模型,将点云数据在空间中所占区域用体素块表示,解决了点云数据自遮挡以及噪声影响问题,同时体素块数据为正方体矩阵,大大降低了数据储存消耗,且包含了原始三维模型的结构信息。因此,本文以体素数据构建卷积神经网络来提取模型特征信息,以实现三维模型识别和分类。
2 体积占用模型方法
三维数据(或称为空间数据)具有多种表达方式,例如体素图像,三维点云以及RGB-D图像。这些信息载体在表达平面图像信息的基础上附加了三维空间中的深度信息,使三维数据点在空间中被唯一确定,在很大程度上丰富了获取空间信息的维度。
体素图像可以直观地观察到三维物体的形状与姿态,此外,将普通二维图像的处理和分析方法移植到体素图像上来相比于三维点云数据和RGB-D图像更容易。在相同分辨率下,三维点云数据占用更小的空间资源,且易于表达复杂纹理。RGB-D图像通过RGB-D相机同时记录RGB图像和深度图像,RGB图像包含物体表面颜色及纹理信息,深度图像则包含了物体的空间形状信息,通过将2种图像结合来检测和识别三维模型。由于体素图像的移植便利性。因此,本文采用体素图像作为三维数据的载体。
由于稠密点云数据具有很大的计算冗余度,运用3D的体素图像作为点云数据的载体可以大大减少计算量,并有良好的空间表达性。体素图像通常是由点云与物体边界框的交点给出的区域,压缩为固定大小后作为卷积神经网络的输入数据。
本文算法的任务是预测三维模型的类别标签从而对三维模型进行分类和检索,围绕这一任务主要完成2项研究工作:①表示估计空间的体积占用网格;②构建直接从体积占用网格预测类标签的三维CNN。
2.1 体素占用网格的框架
文献[10]提出的占用网格是将场景的三维特征表示为随机的三维网格,每个元素对应空间的三维信息,并且将这些由传感器转化得来的信息和占用的维度特征作为深度网络的输入数据。本文提取特征信息的方法借鉴文献[10]的占用网格算法。使用占用网格有2个主要原因:①占用网格模型所使用体素数据能够有效地估计出三维物体占据空间的大小,这种表示方式可以在保留空间信息的同时相对减少稠密点云数据的计算冗余度;②该方法能够更加简单有效地进行数据存储和数据分析。在本文提出的三维模型识别系统中,使用密集阵列来执行所有卷积操作,同时利用高性能GPU来使网格参数在训练过程中更快地收敛。为了更有效地提取模型特征,在训练之前,网络模型参数由高斯分布随机变量生成,通过梯度下降法对网络中神经元权重进行更新,并利用典型的ReLU激活函数使分类器产生非线性决策边界,这样可以大大提高网络模型的计算能力和鲁棒性。
在体积表示中,采用离散映射方法将每个点(x,y,z)映射到离散体素坐标(i,j,k)上,离散值大小取决于空间中的体素网格的方向和分辨率。
对于体素方向的确定,本文使用笛卡尔坐标系正方向作为体素网格生成方向。在卷积神经网络正向传播中,由聚类中心定义的起点会随着卷积层计算不断产生步长位移,然后,通过卷积神经网络反向传播,不断将体素网格对齐到离散体素坐标系下。 然而,对模型进行坐标系正方向的卷积计算所获取的训练集不足以拟合复杂的点云数据。因此,本文利用(x,y,z)3个方向随机翻转来扩大数据集实现数据增强。
对于分辨率,由于数据集的不同,模型空间分辨率也不同,而网络数据的输入要求具有统一的分辨率大小。在实验中,文中使用基于LiDAR传感器获取的三维点云信息,首先将模型通过占用网格体素数据规范化计算压缩至大小为48×48×48体素的固定占用网格,然后使用尺寸为5 m3的立方体包围盒对模型进行规范化处理,该分辨率的设置取决于实验中所用的中央图形处理器的最大计算能力,包围盒尺寸为体素化分辨率前后、左右、上下分别加1得到,即(1+48+1)×(1+48+1)×(1+48+1),为保证单个体素的数据为整数,因此,包围盒大小选择5 m3。其优点是通过对象的相对尺度给出的信息使三维模型具有了统一标准尺寸,有利于网格模型的收敛;此外,当体素太小(导致对象大于网格)或太大(导致细节因失真而丢失)时,避免了形状信息丢失。
2.2 占用网格体素数据规范化计算
(1)
(2)
对于该网格的占用状态计算公式为
(3)
通过对网格占用状态进行计算后所得的占用概率即为判断网格是否被占用的依据。根据文献[10]以及实验数据,当占用概率达到0.7以上时即可认为该网格处于被占用状态,即
(4)
最后,将确定为体素占用的网格作为单位矩阵来组成原始三维点云数据的三维向量体矩阵,并作为卷积神经网络的输入数据[12]。
体素化占用网格模型效果如图1所示。
2.3 三维卷积神经网络及架构
选择卷积神经网络有2个主要原因:①可以高效地利用空间结构;②卷积神经网络可以通过学习对分类任务进行有效的局部空间滤波。本文选择多层网络结构,每一层中又设置多个卷积核,使得对占用网格中不同平面结构以及角度信息进行充分的特征提取,同时,网络通过堆叠卷积层来进行二次特征提取。这使训练集数据能提供更精确的特征,且由于特征的二次提取,很大程度上提高了算法的适应能力,以应对更加多变与复杂的模型结构。
图1 体素化模型Fig.1 Voxelization model
文中构建的三维模型识别网络由基本卷积神经网络所完成,由输入层、卷积层、池化层、全连接层构成。
输入层(I,J,K)。该层接受固定尺寸为I×J×K的体素,文中设I=J=K=48。根据占用网格体素规范化计算的结果,体素矩阵中的元素呈二值化,在卷积运算过程中由于0值对特征提取的影响造成模型边缘信息不断减少,所以输入层将体素矩阵中的0值全部替换为-1,从而不仅保留了模型的边缘特征,并且不影响卷积层对模型的特征提取。
卷积层(f,d,s)。该层接受四维输入量,其中,3个维度是空间信息,第4个维度是特征图信息。该层通过将输入数据与形式为d×d×d×f0的卷积核进行卷积操作来创建f特征图,其中,d是空间维度;f0是输入特征图的数量,卷积计算中空间步幅长度值为s。卷积操作通过定义卷积核的个数来控制输出特征图的通道数,将输出的特征输入至固定参数为0.1的激活函数(Leaky-ReLU)中,以此对神经元进行非线性激活。
池化层(m)。该层的作用为对卷积操作后所获取m×m×m维度的特征图谱进行压缩,一方面使卷积特征图简化以降低网络计算复杂度;另一方面通过降采样方式提取上一卷积层计算所得的主要特征。本文通过最大池化方法用上一步卷积层计算结果中的最大特征值取代其他特征作为下一卷积层的输入,避免权重值数量过多产生的过拟合现象[15]。
全连接层(n)。该层具有n个输出神经元,每个神经元的输出是来自上一层的所有输出的线性组合。通过对前向所有特征的连接,最终将所有神经元输出值送入分类器中进行三维模型的识别和分类。
本文所采用的卷积神经网络的基本模型为C(64,64,64,1)-C(64,64,64,32)-C(64,64,64,32)-P(22,22,22,32)-C(22,22,22,64)-C(22,22,22,64)-P(8,8,8,64)-FL(32768)-FC(512)-FC(10),其中,C为卷积层;P为池化层;FL为展开层;FC为全连接层。卷积层中4项参数值的前3项为特征图谱的维数,第4项为卷积核个数;池化层中的前3项也是特征图谱维数,第4项为下层所需卷积核个数;展开层中参数为特征图谱中所有特征向量个数;全连接层中参数为网络识别结果的分类个数。卷积核尺寸在逐渐变小,旨在减少参数数量并提高计算效率,使网络计算更容易,能够更快速地进行训练。
2.4 旋转增强
由于原始点云没有规定的正方向,在占用网格体素化的过程中所获取的体素化数据不具有统一的标准方向,这将增大卷积神经网络最终的分类难度,为了解决这个问题,本文提出一个简单但有效的方法来确定三维模型的方向。
在训练时,通过每个对象绕Z轴旋转360°/k来创建每个输入实例的k个副本以增加数据集。在测试时,将输出层激活并汇总在所有k个副本上。文中k的取值要求是在采取尽量小的旋转计算开销前提下获取尽可能多的旋转副本,通过实验过程中对计算时间的评估,当k设置为12或18时,相同的计算时间内所获得的旋转副本最多,而旋转超过20个副本后其花费时间越来越多且实验结果与12个或18个副本的结果差异较小。k的取值可作为经验参数用于三维模型旋转副本的生成。这是一种数据增强方法,类似于文献[7]中对输入的图像进行的翻转方式,但不同的是,文献[7]通过对旋转图像进行全采样来达到数据增强的目的,而本文采用对旋转副本进行随机采样的方式来提高样本数量,同时可以避免由具体定义旋转量而产生的过拟合问题。
此外,由于卷积神经网络的局部连通与权重共享的特点,每层特征图谱之间共享权值,通过训练网络将适用于不同旋转模型的激活图谱信息融合后采样,使其适用于不同的旋转模型。通过池化层减小特征图谱的尺寸,从而减少计算量,同时一定程度上防止过拟合的发生。实验结果表明,上述方法具有良好的鲁棒性,同时不影响网络的收敛速度。
2.5 多分辨率输入
将体素网格作为卷积神经网络的输入能够保留三维模型除表面纹理特征以外的主要信息,同时为大多数较大物体提供了足够的空间环境。对于不同物体,采取相同的分辨率模型势必会造成信息的丢失。因此,本文参考了文献[4]视频分析的“中心凹”架构,构建了一个多分辨率的网络。对于多分辨率模型,使用2个具有相同架构的网络,并以2种的分辨率(分别为0.1 m/grid与0.02 m/grid)接收占用网格。2种分辨率的输入都以相同的位置为中心,但较粗糙的网络以较低的分辨率覆盖较大的区域,而另一个则以较高的分辨率覆盖较小的区域。为了融合2个网络的信息,连接各自的FC(128)层的输出作为Softmax分类函数的输入端,从而将不同分辨率模型特征提取结果进行融合。
3 实验模型数据选取
为了验证本文提出的系统,使用了2种不同领域的基准数据:LiDAR点云集,CAD模型集[16]。
3.1 LiDAR数据—悉尼数据集
第一组实验是在悉尼城市[14]对象数据集2上进行的,其中包含26个类别的631个城市对象标签(LiDAR Label)。选择对这个数据集进行评估,因为它提供了标记的对象实例和用于计算占用率的视点。当对点云进行体素化时,可使用该对象周围的边界框中的所有点,包括背景杂波[17]。按照文献[14]的建议,将数据集均分成14个批数据分别进行训练,每一批数据通过2.4节所述方法进行旋转增强,整个数据集迭代训练20次。
3.2 CAD模型数据—ModelNet数据集
ModelNet数据集是专门用来评估3D形状分类器的。ModelNet40是ModelNet中具有40个对象类别的151 128个3D模型的版本,是在NYUv2数据集中常见模型类型的子集。目前最新版本的ModelNet40模型集提供3D模型以及体素化版本,并且已经增加了2个旋转增强向量,本算法在其基础上继续执行2.4节所述的旋转增强操作。在进行体素化时,三维模型已经被缩放并置入到48×48×48的占用网格中。为了与原始数据集分辨率网格比较卷积神经网络计算性能,在实验时记录了每次迭代的平均精度。
本文使用ModelNet40数据集评估所提算法的占用网格模型时,将对象边框裁剪和缩放为48×48×48,使用旋转增强的18个旋转向量代替原始的12个。
4 系统参数设置与实验结果
本算法的实验环境为Linux Ubuntu 16.04系统,NVIDIA_GeForce_GTX1060 GPU处理器,编程开发环境为CUDA-Tookit 8.0,Python 2.7,机器学习框架为Theano 0.7.0[18]。
4.1 神经网络参数设置
对于LiDAR和ModelNet40数据集,本文采用具有动量参数0.9的随机梯度下降法(stochastic dradient descent,SGD)计算网络损失函数(Loss Function)。文中采用标准分类问题损失函数,其方程为
(5)
(5)式中:N为卷积计算所提取的特征个数;w为权重;b为偏差。
针对LiDAR数据集,由于其数据量大,初始学习率采用文献[15]中所建议的0.01;而对ModelNet40数据集,其数据量比LiDAR数据集小。因此,初始学习率设置为0.001。网络训练中初始权重w0的设置通过高斯分布进行初始化,初始偏差b0设置为0[19]。在随机梯度下降计算过程中,为防止过拟合现象,对损失函数添加欧几里得范数正则化项[20]为
(6)
正则化项的作用是通过规范权值w的取值范围来限制卷积神经网络模型的拟合度。由于卷积层所提取的某些特征的权值过大,若不对其进行限制,则会出现权值小的特征无法影响分类结果,导致过拟合结果。
4.2 数据集旋转增强分析
在实验中,根据LiDAR数据集和ModelNet40数据集的训练时间和测试时间研究了4种不同的旋转增强情况。对于在测试时间没有限制的情况下,在测试实例上应用随机选取方向,并记录4次运行中的平均值。在ModelNet40中,选择模型姿态经过规范化的对象并通过旋转增强作为训练集,结果表明,网络进行训练后的结果优于无旋转增强的规范化模型数据集,其原因在于无旋转增强的数据集训练得到的网络产生了一定的过拟合现象,识别精度最终收敛趋近于1,因此,其结果与进行旋转增强的数据集相比较差。对于悉尼数据集,由于城市模型无法进行旋转数据增强[21],必须使用数据中未修改的方向。结果表明,无旋转增强的数据集需要牺牲更多训练时间来提高模型分类准确率。因此,使用旋转增强后的数据集进行训练,在拟合正方向的同时,可以使得整个识别系统应用于多种角度的环境识别,增加CNN网络的学习能力。
4.3 实验结果
表1为本文算法和文献[13]以及文献[14]算法在悉尼城市数据集上模型检索准确率的结果比较。文献[13]将无监督深度学习与SVM分类器相结合,文献[14]设计了一个旋转不变的描述符,并用非线性SVM进行分类。但是基于传统机器学习的分类算法,需要人工去标注模型特征,而本文使用基于卷积神经网络的算法,通过多层卷积层与全连接层的组合,极大程度上提高了特征的抽象化。再者,本算法结合激活函数,提高了网络解决非线性问题的能力。相比于文献[13]和[14]中提出的算法,本文算法的检索准确率有了明显提高。
表1 3种算法在悉尼城市数据集上的模型检索准确率比较Tab.1 Comparison of model retrieval accuracy forthree algorithms on Sydney urban objects dataset
表2为本文网络与文献[7]3D ShapeNet网络在ModelNet40数据集上的模型检索准确率的结果对比。文献[7]所采用的网络体积结构拥有1 240万个参数,而本文网络结构通过旋转增强的模型优化方式将参数量降低至200万个,大大降低了计算复杂度,同时减少了网络训练所需要的时间,而最终模型检索精度比文献[7]提高了5%。表3为本文网络与文献[7]3D ShapeNet网络在ModelNet40数据集上的网络训练时间对比结果。当网络训练结果达到收敛时,文献[7]网络训练消耗时为23.52 h;而本文通过使用单卷积层多卷积核对特征图进行特征提取,提高了模型特征提取效率,训练的时间仅为16.40 h,大大降低了网络训练时长。表4为本文网络与文献[7]网络在ModelNet40测试集进行模型检索的时间对比结果。文献[7]检索消耗时间为28.331 s,而本文网络的参数量约为文献[7]的1/6,检索过程中的计算复杂度低,检索耗时为22.537 s,在保证检索准确率的情况下提高了检索速度。
图2给出了训练迭代次数与模型识别准确率的统计结果,随着模型训练迭代次数的增加,模型识别准确率越来越趋近于1.0(即100%)。由卷积层所提取的特征对数据集中模型的描述准确度不断提高,当迭代次数超过15 000次时准确率趋于收敛。图3给出了训练迭代次数与训练误差统计结果,训练误差随着训练迭代次数的增加呈降低趋势,在训练执行到15 000次时达到收敛。在图2和图3中,黑色折线表示原始迭代数据,灰色折线表示经过平滑后的迭代结果。
表2 在ModelNet40数据集上与3D ShapeNet网络[7]的模型检索准确率比较Tab.2 Comparison with ShapeNet for model retrievalaccuracy on ModelNet40 dataset
表3 在ModelNet40训练集上与3D ShapeNet网络[7]训练时间比较Tab.3 Comparison with 3D ShapeNet for network trainingtime on ModelNet40 train dataset h
表4 在ModelNet40测试集上与3D ShapeNet网络[7]检索时间比较Tab.4 Comparison with 3D ShapeNet for network retrievaltime on ModelNet40 test dataset s
图2 迭代次数与模型识别准确率统计结果Fig.2 Statistic results of number of iterations andmodel recognition accuracy
图4为网络输出正确识别示例。左侧为体素化模型的样例,右侧Instance标注出模型的类别标签及序号。以椅子图为例,003表示第三大类,chair为名称;0909为第909号椅子模型;001表示未经旋转的规范化模型。Predicted label为网络预测标签;True Label为模型真实标签。
图3 迭代次数与训练误差统计结果Fig.3 Statistic results of number of iterations and train loss
图4 模型检索结果Fig.4 Results of model retrieval
5 结 论
本文介绍了一种基于3D卷积神经网络架构的三维模型检索和分类算法,用于LiDAR点云集和CAD三维模型数据集的对象检测和识别。算法以占用网格模型为基础,首先将点云数据转化为体素化占用网格模型,然后通过3D卷积神经网络对已转化的体素化数据进行特征提取,很好地利用了体素化数据能完整表达空间信息的优势,最终实现对三维模型进行检索和分类的目的。算法在悉尼城市数据集以及ModelNet40数据集上的平均模型识别精度均达到80%以上,且优于同类模型识别算法。然而,占用网格算法对模型的体素化局限于对模型体素化分辨大小的设置,若能结合自适应八叉树等算法,通过网络来调节不同模型的体素化分辨率,从而真正实现多分辨率的卷积神经网络数据输入,这将是本研究未来的研究方向。