APP下载

一种基于深度图像的左右手同步分割改进方法

2021-03-01徐正则张文俊

关键词:手部准确率卷积

徐正则,张文俊

(1.上海大学上海电影学院,上海 200072;2.华东师范大学传播学院,上海 200241)

便携式且可穿戴的虚拟现实(virtual reality,VR)和增强现实(augmented reality,AR)设备要求对传统的交互手段进行变革,因此手部姿态估计[1]和手势识别技术[2-3]的研究与应用激发了广大研究人员的兴趣.该技术可以使用双手模拟控制器与下一代数字媒体设备进行交互,提供更加自然舒适、无拘无束的交互操作体验.

研究人员首先开发了基于光学的手势识别技术[4],但是应用环境、光线、肤色、背景复杂度和手势运动快慢的变化对识别结果的影响非常大,甚至会对手势区域与背景的分离造成巨大干扰.基于深度图像(depth image)的识别技术可以在很大程度上克服以上缺陷,逐渐成为了目前主流的手势姿态估计方法.

文献[5-9]中的主流方法是把手势估计和识别分解成3 个阶段的算法:检测和手部分割、手势姿态估计、验证和精细调整.事实上,通过深度相机建立一套高效、稳定、实用的手势识别和控制系统仍然是一项非常艰难的工作,其中从深度图像中准确分割出“干净”的手部图像显得尤为重要,这是因为当前一阶段的算法出错后,后一阶段的算法无法从错误中恢复.几种应用效果较好的图像分割算法主要有:随机森林(random decision forest,RDF)算法、区域卷积神经网络(region-based convolutional neural networks,R-CNN)系列算法、YOLO(you only look once)算法和全卷积神经网络(fully convolutional neural networks,FCNN)系列算法.

应用RDF 进行图像分割是一种像素级(pixel-wise)的方法,该方法从体感技术开始流行,Shotton 等[10]通过RDF 算法对深度图像进行分类,把姿势估计问题转换为基于像素的分类问题,可以对全身各个部位对应的像素进行分割.在手部分割和手势估计领域,Tompson 等[2]首先提出了通过文献[10]的方法把三棵随机树训练到20 层,通过原像素深度值与一个经过像素偏移后的深度值之间的差值来二值分类深度图像中的每个像素是属于手部还是属于背景区域,并且发现需要一个较大动态范围的像素偏移才能得到比较好的分类结果.Sharp 等[11]首先从连续的深度图像序列中利用前几帧的运动信息来推断手部的感兴趣区域(region of interest,ROI),然后使用更加准确的像素级别的分类器来分割定位手部.Srinath 等[12]进一步把RDF像素分类方法扩展到手的20 个部分.RDF 是比较高效的算法,但是存在边界像素分类模糊的缺点,文献[11]已证明这点.

R-CNN[13]首先使用选择性搜索(selective search)在图像中产生大量候选区域(region proposal),支持向量机(support vector machine,SVM)分类后应用边框盒回归(bounding box regression)对最终结果进行精调.R-CNN 对图像进行分割的缺点在于速度非常慢.Fast RCNN[14]直接使用Softmax 替代了R-CNN 中的SVM 进行分类,同时在网络中加入了多任务函数边框回归,在一定程度上提升了准确度和速度,但每张图像仍耗时约3 s,无法满足实时应用.Faster R-CNN[15]应用了区域生成网络(region proposal network,RPN)代替R-CNN 和Fast R-CNN 中的选择性搜索方法,大幅改善了因选择性搜索产生候选区域速度较慢的问题,但只能达到5 帧/s,还是无法满足实时性.此外,先获取候选区域再对每个区域进行分类的两阶段(two-stage)算法的计算量还是比较大.

YOLO[16-18]直接在输出层回归边界框(bounding box)的坐标、宽高、所属类别,以及置信度.与R-CNN 类似,YOLO 是一种基于框(anchor-based)的图像识别和分割算法,分离图像有外边框.YOLO 比R-CNN 要快很多,其v1 版本在GPU 上能达到45 帧/s,满足实时性要求.但YOLO 对于非常规的物体形状或比例,以及小物体的检测效果较差.

R-CNN 和YOLO 系列检测的手部目标具有边框盒,其他部位经过投影后也可能落在2D边框盒内,因此分离出的手部图像还不能直接用于手势识别,需要利用深度信息进行前后景分离.比如,James 等[19]应用3D 立体空间作为扫描窗口,去除在3D 空间体之外的杂乱背景,3D扫描体能够忽略这些无用的深度数据,可分割得到更加纯粹的手部区域.相比之下,类FCNN方法是端到端的像素级手部深度图像分割算法.

FCNN 系列由一对编码器(encoder)和解码器(decoder)组成,编码器把输入图像转换成低维的特征空间,而解码器上采样(upsample)低维特征图以重建高分辨率的分割图像.FCNN[20]使用多个卷积和最大池化层作为编码器,使用双线性插值算法进行上采样,由于这种机械的算法不具备学习能力,因此只能重建出模糊的像素级分割图像.不同于简单的插值操作,DeconvNet[21]和SegNet[22]的解码器仍然是可学习的.DeconvNet 应用了多个反卷积层(deconvolution layers,也称转置卷积)进行上采样操作来恢复图像维度,而SegNet 编码时把最大池化的位置记录为索引,然后解码时通过在每个对应层上的索引反向操作把特征图像重新放大,并且上采样后加入了可学习的卷积层.由于编-解码器都具备学习能力,因此相比只有编码学习性的FCNN,DeconvNet 和SegNet 在图像分割时可以得到更好的准确性.以上3 种架构称作类FCNN 方法.

类FCNN 方法作为端到端的手部深度图像分割算法,结构更加简洁,检测速度较快,分割结果准确,且分割算法本身就是像素级的,因此获取的手部区域没有背景的干扰,更加“干净”,这样有利于提高下一阶段手势姿态估计的准确性.对于主流的三阶段手势识别算法来说,类FCNN 方法特别是编-解码器都具备学习能力的DeconvNet 和SegNet 更适合作为预处理阶段的方法来检测和分割手部.逐像素对左右手进行同步分割属于语义分割的范畴,但以往语义分割主要针对的是彩色光学图像,而本工作使用了代表物体离相机距离信息的深度图像,并且通过实验证明了类FCNN 方法能够应用于基于深度图像的语义分割任务中.

本工作的主要贡献在于:①比较了DeconvNet 和SegNet 模型架构和超参数对于分割性能和速度的影响;②借鉴了残差神经网络(residual neural network,ResNet)和U-net 中的跳层连接(skip-connection)方法,在对应的编码和解码层之间加入跳层连接,可大幅度提升准确度,并比较了直接相加和拼接合并两种跳接模式;③使用了空洞卷积,在增大感受野的同时减少了计算量,加快了训练和推理速度,且能够进一步提升模型的准确度.

1 架构和改进策略

由于FCNN 采用简单的插值操作进行上采样,语义分割效果较差.本工作采用的基准架构(见图1)同时在编码和解码层都具备学习性,类似于DeconvNet 和SegNet,因此准确性上会有大幅提升.网络结构中只有卷积层、池化层和反卷积层,没有全连接层,原始模型架构比较大,主要适用于光学图像,而对于深度图像,是否可以去除部分卷积层,通过缩减架构来提高训练和检测速度?因此本实验首先分别采用了单、双层模型,之后分别测试常规的Relu 和新兴的Leaky Relu 激活函数.相较使用最大池化层,实验网络尝试以步长(stride)为2 进行跳动卷积的方式实现降维,并比较了两种降维方式的分割效果.

图1 手部分割网络基本架构Fig.1 Fundamental framework of hand segmentation network

在此基础上,本工作主要的改进方法是尝试对基准架构应用多种策略来提升模型性能,并通过实验来验证策略的改进效果.

1.1 类别权重(class weight)

在输入图像中标注3 种类别:背景、左手、右手,但是不同类别在图像中出现的频次差异很大,深度图像中被标注为背景的像素占据了绝大部分,直接为每个分类后的像素采用Softmax计算损失函数,会使训练出来的模型在检测左右手这样的小物体时敏感度较低.而手部深度图像分割算法的目标在于准确地识别出双手所在像素,背景像素是否准确识别并不重要.为了提升左右手这样小物体的识别率,需要应用类别平衡(class balancing)技术.Eigen 等[23]首先引入频率中值平衡,即在损失函数中加入根据类别出现频率的中值来确定的权重,计算方法为

式中:pixelc是类别为c 的像素总数;n×w×h 为图像总数乘以长和宽;fc是类别c 出现的频率;median of fc是所有类别的中间值;Weightc是最终计算出的该类别的权重系数.训练数据集有150 000 张320×240 像素的深度图,经过统计,背景、左手、右手像素的数量分别为11 716 963 591,231 537 532,185 898 877,经计算得到的权重设定为0.02,1.00,1.24.由于像素大小差别太大,背景权重太小,会严重影响计算时FLOAT32 类型数值的精度,因此同时放大15 倍,即背景、左手、右手的权重分别为0.345 2,17.480,21.760.此外,作为结果对比,实验中还使用了一组经验权重值1,10,10.

1.2 空洞卷积

为了扩大卷积层的感受范围,常见做法为增加卷积核的大小,但是会造成算法计算量呈几何级数增加.使用空洞卷积[24]可以在不引入额外卷积核参数的情况下扩大感受野.但是空洞卷积存在“网格效应”(gridding),即卷积结果是来自上一层没有相互依赖的独立集合,因此结果之间没有相关性,可能会造成局部信息丢失.混合式空洞卷积(hybrid dilated convolution,HDC)[25]方案在卷积层引入特殊的多层结构设计,空洞率(rate)不再采用文献[24]中固定的2,而是采用r=1,2,3 这3 个连续增加空洞率的卷积层组合使用,可以有效减轻“网格效应”.

实验中采用卷积核为3×3、空洞率分别为r=1 和2 的两层卷积层组合使用,可以代替一层卷积核为7×7 的常规卷积层.二者的感受野同样是7,但是前者计算量小,且会带来更多的非线性.

1.3 最大池化层索引(max-pooling indices)或转置卷积(transposed convolution)

在池化时,将存储最大特征值的位置作为索引,解码器使用该索引对特征图进行上采样操作来恢复图像维度,这种技术最先被SegNet[22]引入,称为最大池化层索引.与之相对应的是,DeconvNet[21]采用反卷积层(deconvolution layers)进行上采样,实质是转置卷积操作,功能与常规卷积相反.

包括tensorflow 等多个机器学习框架里都没有实现最大池化层索引算法,只能手动编码,通过CPU 计算来完成任务,其他步骤仍可由GPU 实现加速,这会影响此时的训练速度.此外,与直接通过索引来恢复图像维度相比,虽然转置卷积的计算量较大,但其卷积核还具备学习能力.在实验中,采用相同架构的网络模型分别同时应用这两种上采样操作,并比较分割效果和计算速度.

1.4 跳层连接(skip-connection)

残差神经网络(ResNet)[26]就是采用了经典的跳层连接(skip-connection)方法把上一层直接与卷积后的特征图对齐再相加,这样在每层特征图中添加了上一层的特征信息,可使网络更深,解决了增加深度带来的退化问题,即网络层数虽然增加,但是训练集上的准确率却饱和甚至下降了.跳层连接只是简单执行了相加运算,不会增加计算复杂度,也不会产生额外的训练参数,而且整个网络依旧可以通过端到端的反向传播训练,加快了反馈与收敛.

ImageNet 上的实验证明了彩色图像中ResNet 是一种通用的改进物体识别效果的方法.本实验在SegNet 网络架构所对应的编-解码层中直接加入类似ResNet 这种直接相加的跳层连接,测试其应用于深度图像分割时是否具有同样的优化效果.相加后的结果应乘以以保持相加前后的均值相同.从图2 改进的网络架构上可以看到有4 次融合过程,相对应的FCNN 网络只在最后一层进行融合.

图2 编-解码层间加入跳层连接示意图Fig.2 Illustration of skip-connections between encoder and decoder

1.5 拼接合并

ResNet 所代表的直接跳层连接把网络变“深”,在图像的像素级分割领域,相比传统的跳层连接采用对应点相加的方式,U-net[27]采用了拼接(concatenate)这种完全不同的特征融合方式,在多个通道维度把特征拼接合并成一个更大的向量,从而形成更“厚”的特征.由于增厚了特征,相较直接相加,拼接合并会增加少许计算量.U-net 网络结构在靠近输入的较浅层提取较小尺度上的信息(即简单特征),靠近输出的较深层提取较大尺度上的信息(即复杂特征),通过直接把原始信息不进行任何操作与后续结果合并拼接的方式可以整合多尺度的信息.在本实验中,在对应的编-解码层间分别加入了特征直接相加和拼接合并两种模式的跳层连接用于特征融合,并比较了深度图像的手部分割效果.

1.6 改进方法的模型架构

图3 为改进方法的模型架构,有以下几个创新特点:①类别权重采用1∶10∶10,有效提升了对左右手这样小物体的识别率;②空洞卷积采用r=1,2 的混合式空洞卷积组合,有效减轻了“网格效应”,且计算量小,分割效果好;③由于最大池化层索引恢复图像维度后分割效果略差,因此把SegNet 中上采样采用的最大池化索引替换为DeconvNet 中采用的转置卷积;④跳层连接可以使编码层的特征直接传递到解码层,使得网络定位像素更加准确,分割精度更高,差别在于采用特征直接相加还是特征拼接,后者形成更“厚”的特征,在增加少许计算量的同时,分割效果也略好于特征直接相加的模式,因此跳层连接采用拼接合并的方法.

图3 改进后的手部分割网络架构Fig.3 Improved framework of hand segmentation network

2 实验结果比较

2.1 训练数据集

表1 列出了常见手部深度图像数据集,其中大部分只包含了单手信息,而本工作中的网络模型具有同时分割左右手的能力,因此实验数据集应同时包含左右手.

表1 常用的手部深度图像数据集Table 1 Widely used hand datasets of depth images

HandSeg 数据集共有158 315 张深度图像,同时每张深度图像对应掩膜(mask)文件,里面保存了每个深度像素对应位置的左右手标签信息,完全符合实验测试需求.但是目前GPU 普遍内存不超过8 GB,640×480 的深度图直接输入分割网络会因架构太大造成网络参数过多,超过硬件的限制,因此对数据集首先下采样到320×240.其次,158 315 张深度图像被随机分配到训练集、验证集和测试集,分别为150 000,8 000,315 张手部深度图像.

在实验过程中,统一使用HandSeg 数据集对多种改进的分割网络模型进行训练,其他超参数尽量保持一致,比如采用相同初始学习率、相同的训练迭代周期,以使对比结果具备可比较性.

2.2 分割性能指标

手部分割其实是深度像素的分类问题,在推理阶段每个像素都会被分类为背景、左手或右手,准确率(precision)和召回率(recall)都是评估分类准确度的重要指标.为了统一这两种评估指标,分类方法还经常用F-Score 评判标准来评估模型好坏,计算公式为

不同的应用场景对于准确率和召回率的重视程度也不一致,可以分别赋予不同的权重,通过式(2)中β 值来调节.本工作引入几种常见的F1-Score,F2-Score 和F0.5-Score 评价标准,β 分别为1,2,0.5,其中F1-Score 是指准确率和召回率一样重要,F2-Score 是指召回率比准确率重要一倍,F0.5-Score 是指准确率比召回率重要一倍.

在本实验的测试场景中,左手准确率是指所有分类为左手的像素中有多少真实是左手,而左手召回率是指所有真实是左手的像素中有多少被正确分类出来.如果分类器预测为左手的像素较少,那么准确率自然较高,但这样的分类结果可能丢失很多真实的左手像素,造成分割结果不完整.而左手召回率高说明分类器分割的左手图像完整度很高,但可能把部分背景像素也错误分类为左手.这两种错误对后续手势识别算法的影响是不同的,少量错误的背景像素会被丢弃,而不完整的手部分割图像会严重影响后续的手势识别效果.因此,在本实验场景中召回率比准确率更加重要,测试结果更适合使用F2-Score作为综合评判标准.

2.3 实验结果

为了尽量缩短训练时间,本工作应用了基于GPU 的计算设备,硬件使用常用的4 核CPU和单块NVidia RTX 2070 GPU,软件环境应用CUDA 版的tensorflow.实验采用学习率衰减策略,随着训练周期的增加和样本的不断迭代来逐渐降低学习率,初始学习率设定为0.000 2,对训练集经过60 个迭代周期完成模型的训练.

应用上述各种改进策略可组合出很多种网络模型架构,这里选取一部分具有代表性的架构参数和性能列在表2 中.

改进方法的目标是对手部进行分割,而背景分类结果的重要性较低,因此不作单独统计.表2 中正确占比表示深度图像上所有分类正确的像素/像素总数(每张图像320×240),包含了背景分类的结果,但只具有参考性,这是由于深度图像中背景占比较大,而重要性较低,把背景和左右手合并在一起统计,无法清晰明确地比较采用各种模型进行手部图像分割的实际效果.

表2 手部分割网络架构主要参数和性能Table 2 Performance and main features of hand segmentation network

为了更方便地评估模型性能,忽略背景,只统计左右手的分类结果,包括左手的召回率、左手的准确率、右手的召回率、右手的准确率,以及根据F2-Score 计算出左右手综合评价指标(见图4).

以F2-Score 为评估标准,由图4 可得以下结论.

图4 左右手召回率、准确率和F2-ScoreFig.4 Recall,precision and F2-Score of the left and right hand

(1) 双层卷积比单层卷积效果提升3%∼8%;

(2) Relu 和LeakyRelu 效果基本一致;

(3) 下采样采用最大池化层与步长为2 的卷积效果基本一致;

(4) 上采样采用转置卷积略好于最大池化层索引;

(5) 采用跳层连接后效果提升4%∼5%,而且采用拼接合并比直接相加略高1%∼2%;

(6) 采用类别权重后效果提升3%∼4%,当权重为1∶10∶10 时,准确率和召回率都最高;

(7) 采用r=1 和2 的空洞卷积组合不仅能提升2%∼3%的分割效果,还能大幅缩减训练参数,在其他条件一致的情况下加快训练和推理速度.

2.4 分析与讨论

实验结果显示,改进方法与基于双层卷积的SegNet 基本模型相比,左手召回率从84.5%提高到92.7%,准确率从83.1%提高到88.4%;右手召回率从90.8%提高到95.3%,准确率从79.7%提高到89.9%;左手F2-Score 从84.2%提高到91.8%,右手F2-Score 从88.3%提高到94.2%,分别提高了7.6%和5.9%.可见改进方法使得深度图像的手部分割效果得到了较大幅度的提升.由于计算量有所增加,改进后的模型在没有使用空洞卷积的情况下,GPU 推理速度下降到23.8 ms/帧,但使用空洞卷积后达到20.5 ms/帧,甚至相较基准模型略有提高,完全能够实时处理25 帧/s 的动态深度图像序列.

图5 展示了基准模型和本工作改进模型的分割结果,可以看出在几乎所有的案例中,改进模型的分割精度更高.第1,2 行是基本的单、双手情况下的分割结果;第3,4 行为双手重叠、相连的情况,改进方法可以正确分类指尖重叠缝隙中的像素;第5 行由于训练数据是自动标注,出现像素错误标注,但算法的分类结果仍是正确的;第6 行由于双手紧贴身体造成小部分紧贴的像素出现分类错误;第7,8 行双手紧握,这也是手部分割中最富挑战性的情况,改进方法比以往的分割结果更加接近准确分类.

本工作特意从实验结果中挑选出几种左右手重叠时的分割案例(见图5),从第6∼8 行可以看出算法具备相应的分割能力,但受限于数据集中只有很少一部分深度图像是这种情况,分割结果有时会出现少许错误.如果有大量重叠左右手的训练数据对网络模型有针对性地进行训练,改进后的算法能够更加准确地对左右手分别进行分割.

图5 手部分割结果举例Fig.5 Examples of hand segmentation results

3 结束语

本工作提出了一种基于深度图像的左右手同步分割改进方法,在基准SegNet方法的基础上,加入了类别权重、混合式空洞卷积组合、转置卷积和拼接合并跳层连接.本方法使左右手的F2-Score 相较基准方法分别提高了7.6%和5.9%,推理速度在GPU 上达到了20.5 ms/帧,可以实时处理深度图像序列,取得了更加精准的手部分割结果.

猜你喜欢

手部准确率卷积
手部皮肤软组织缺损修复的皮瓣选择
尺动脉腕上皮支逆行岛状皮瓣修复手部皮肤软组织缺损
封闭负压吸引技术联合游离股前外侧穿支皮瓣修复手部大面积软组织缺损
基于3D-Winograd的快速卷积算法设计及FPGA实现
乳腺超声检查诊断乳腺肿瘤的特异度及准确率分析
不同序列磁共振成像诊断脊柱损伤的临床准确率比较探讨
2015—2017 年宁夏各天气预报参考产品质量检验分析
颈椎病患者使用X线平片和CT影像诊断的临床准确率比照观察
卷积神经网络的分析与设计
从滤波器理解卷积