APP下载

基于深度学习的人体轮廓识别

2020-07-09贾群喜张伟民孙占鹏户肖剑

现代信息科技 2020年23期

贾群喜 张伟民 孙占鹏 户肖剑

摘  要:为了解决人体轮廓识别精度不高,鲁棒性不好的问题,在保证实时性的要求下,提出了一种基于深度学习的人体轮廓识别方法,该方法采用U-Net神经网络框架,建立特定视角的数据集,利用高斯滤波进行图像预处理操作,设计使用Dice和交叉熵函数相结合的损失函数进行训练。实验表明,该方法的重合度为91.85%,单次识别耗时为50.56 ms,在保证精度和实时性的前提下,也保证了对不同环境的适应性,在实际应用中有良好的价值。

关键词:人体轮廓;U-Net神经网络;Dice损失函數;高斯滤波

中图分类号:TP391.41;TP181     文献标识码:A 文章编号:2096-4706(2020)23-0090-04

Human Contour Recognition Based on Deep Learning

JIA Qunxi,ZHANG Weimin,SUN Zhanpeng,HU Xiaojian

(Luoyang Institute of Science and Technology,Luoyang  471023,China)

Abstract:In order to solve the problem of low accuracy and poor robustness of human contour recognition,a human contour recognition method based on deep learning is proposed under ensuring the real-time requirement. This method uses the U-Net neural network framework to establish a data set of specific perspective,uses Gaussian filtering to execute image preprocessing,and designs a loss function combined with Dice and cross entropy function for training. The experiment shows that the coincidence degree of the method is 91.85%,and the single recognition time is 50.56 ms. Under the premise of ensuring the accuracy and real-time,it also ensures the adaptability to different environments,which has good value in practical application.

Keywords:human contour;U-Net neural network;Dice loss function;Gaussian filtering

0  引  言

在对现有人体轮廓算法实际运用过程中,发现现有算法无法满足所要求的精度与鲁棒性,就此展开了研究。在制作精准数据集、优化模型架构、训练模型实践认证的同时,认真比对现有开源优质人体轮廓识别算法,优中则优,不断完善。最终得到符合理性预期,人体识别精度达到91.85%远远高于现有开源人体轮廓识别算法。并且在保证鲁棒性的同时,基于有限的嵌入式平台,将算法进一步优化,优化进程,提高处理效率,缩减处理时间。最终单次识别时间缩短至50.56 ms,仅仅为同类算法用时的十分之一。作者以参加全国大学生智能车竞赛AI电磁组和百度飞浆组的经历为基础,利用Jetson Xavier NX AI系统模块以U-NET神经网络为基础,制作数据集、设计损失函数实现人体轮廓识别。

1  基于深度学习人体轮廓识别算法

本文人体轮廓识别的方法的流程大致如下:

(1)数据集的建立,对原始图像进行人工分割标记人体轮廓,并进行图像预处理。

(2)设计损失函数。

(3)使用本文的神经网络模型对人工标记好的人体轮廓进行训练,测试。

(4)对结果进行分析。

1.1  数据集的获取

人体姿态数据集、人体轮廓数据集网上有很多,其中符合设计要求的也有很多,比如LSP、FLIC这种只包含单人人像的数据集;比较经典的MPII、MSCOCO同时包含单人/多人人像的数据集。但此类数据集过于庞大且较为复杂,照片虽多但无法满足我们特殊的要求。在LSP、MPII中多数为从YouTube Video中抽取出来的,照片模糊姿态不定。其中MPII Human Shape是一系列人体轮廓形状的3D模型与工具,其中精确的人体正面轮廓与侧面轮廓带给了我们启发,我们决定建立自己的数据库。我们选取男女均匀、体态各异、穿着紧身衣物的100人,分别通过相机在固定背景下采集两张正视、侧视图作为数据总集。由于数据集的类型统一划分,处理起来也方便了许多。手工对数据集进行筛选,对有缺陷的图片进行删除、重拍处理。最终数据集共包括200张图片,拿出12张作为验证集,其余则为训练集。

1.2  图像预处理

在对图像进行处理时,往往会对直接采集得来的图像进行初步处理以及筛选。在我们采集数据时发现,这些真实数据中存在相当一部分噪声和大量的缺失值。所以需要对采集来的图像进行清洗,便于得到更标准、干净、连续的数据。

本文选取的方法是高斯滤波方法,属于线性平滑滤波方式。在计算机视觉算法的图像预处理阶段应用广泛。以高斯滤波的实现方式对图像数据像素点附近邻域(包括本身)进行加权平均处理,是对整个图像进行加权平均的过程。滤波后会得到信噪比SNR比较高的图像。

本文實现卷积积分的操作是通过处理离散值的卷积。但实验过程中处理帧数无法提升,又将高斯函数以分离的方式进行处理,将卷积的维度降低到一维,采用可分离滤波器来加速。

综合考虑本文数据集图像类型,平滑滤波器一般选择高斯函数中二维零均值离散型。

二维高斯函数(原点中为心点):

(1)

其中,σ为高斯函数的标准差,用来调节高斯滤波器宽度的参数。

1.3  网络模型

U-Net神经网络的网络结构形状类似于字母U,因此而得名U-Net神经网络,其网络模型如图1所示。由于U-Net神经网络中没有全连接层,所以也属于全卷神经网络模型的一种变形。

U-Net神经网络是属于编解码结构,左侧的搜索路径是一个编码器。右侧的扩展路径是一个解码器。编码器结构主要是用捕获输入信息图片中的关联信息,而解码器结构主要是对输入的信息图片中所需要进行分割的物体进行精准化定位。U-Net神经网络是基于FCN(全卷积神经网络)来进行改进的,不需要占用大量储存空间和算力,并且可以利用数据增强等技术手段把样本数据集训练出不错的效果,在图像分割领域具有比较强的实用性和优势。

1.4  损失函数的设计

本文在设计损失函数上,采用Dice损失函数和交叉熵损失函数结合的方式。并且为解决样本数量少的情况,在交叉熵损失函数中引入代价敏感矩阵。所示函数总体表示为:

(2)

其中,D为Dice损失函数;w,b为神经网络模型中训练的参数;xi为输入模型的值;yo为模输出的值;p为模型预测的值;y(k)为第k样本;p(k)为第k个模型的预测值;m为样本总数目;α为Dice与交叉熵损失之间的权重系数,在实验时使用BP算法可对目标函数J(w,b,xi,yo)反向链式关于w和b的偏导数求解得到。其中交叉熵损失函数Lce可表示为:

Lce=                                (3)

A=[y  1  -y]

B=

C=

其中,A为此事件结果的值,B为代价敏感矩阵的系数,C为交叉熵函数,6为将人体轮廓识别预测为背景的惩罚惩罚系数,I(p≤0.5)为指示函数,不满足条件时设置为0,满足条件时设置为1;0表示人体轮廓识别预测为背景时,不进行惩罚;1表示将背景预测为背景类别的惩罚系数。

在本文的神经网络模型中w值越大,发现过拟合的现象越严重,因此在式(2)中加入L2进行正则化,可表示为:

J(w,b)=J(w,b,xi,yo)+          (4)

其中,λ为正则化系数,该方法可以加快模型的收敛速度,结果迭代,模型参数收敛为最优值,分割结果更加接近于真实值。

2  实验结果与分析

2.1  数据集扩充

考虑到数据集的数量太少,神经网络模型容易发生过度拟合,导致识别人体轮廓的性能较差。因此采用了数据集扩充的方式。具体步骤如下:首先把每张照片中的数据,通过[-20°,20°]的小角度随机旋转。然后通过镜像旋转操作。进行扩充,最终得到800张512×512大小的图片数据集。

2.2  评价指标

本文选取平均容错率H和重合度R作为评价指标。当重合度R越大,平均容错率H越小时,证明实验效果越好。

(5)

(6)

其中,j为第j张图片,i为第j张图片的i次检测,n为每张图片检测的次数,z为测试图片的数量,S真实值表示真实人体轮廓区域,S第i次实验值表示第i次实验预测人体轮廓区域。

2.3  环境配置与实验过程

本实验的硬件环境为嵌入式Jetson Xavier NX,CPU为6核NVIDIA Carmel 64位 ARMv8.2 CPU,内存为8 GB 128位LPDDR4X GPU搭载48个Tensor Core的384核NVIDIA Volta GPU,并且具有2个NVDLA引擎,操作系统为Ubuntu

28.04 64位。本文的模型在TensorFlow2.0的开源深度学习框架下建立。实验过程主要分为数据准备,模型准备,模型训练,结果分析。依据本文的方法准备数据集;利用Python语言编写模型框架,和训练过程的代码准备;利用Jetson Xavier NX进行模型训练。

2.3.1  创建训练集和验证集

在模型训练前,首先进行创建训练集和验证集。数据集中的图片共是800张。其中随机选取640张图片为训练集,剩余的160张图片为测试集,在本次实验中,网络的输入模型部分为固定值512×512。此过程中的部分Python代码为:

#创建训练集和验证集

dataset_train = tf.data.Dataset.from_tensor_slices((train_images, train_labels))

dataset_val = tf.data.Dataset.from_tensor_slices((val_images, val_labels))

dataset_train = dataset_train.map(load_image_train, num_parallel_calls=auto)

dataset_val =dataset_val.map(load_image_val, num_parallel_calls=auto)

dataset_train = dataset_train.cache().repeat().shuffle (BUFFER_SIZE).batch(BATCH_SIZE). prefetch(auto)

dataset_val = dataset_val.cache().batch(BATCH_SIZE)

2.3.2  模型建立

這个过程中本文采用tensorflow和kears工具包进行建立,kears具有用户友好、模块化、容易扩展和与Python协作等优势。部分python代码为:

def create_model():

inputs = tf.keras.layers.Input(shape=(512, 512, 3))

x = tf.keras.layers.Conv2D(256, 3, padding='same', activation='relu')(inputs)

x = tf.keras.layers.BatchNormalization()(x)

x = tf.keras.layers.Conv2D(256, 3, padding='same', activation='relu')(x)

x = tf.keras.layers.BatchNormalization()(x)

2.3.3  模型训练

在模型训练的过程中,神经网络模型参数的更新尤其重要。本文采用批量梯度下降法,其中学习率设置为1×10-5。部分Python代码为:

history = model.fit(dataset_train, epochs=EPOCHS,

steps_per_epoch=train_step_per_epoch,

validation_steps=val_step_per_epoch,

validation_data=dataset_val)

2.4  实验结果分析

为了更加客观的展示模型的性能,利用相同的评价方法对三种方法进行图像分割的三种方法进行评价如表1所示。

表1中的U-Net方法是本文基于U-Net神经网络的基础上改进图像处理和设计损失函数,构建的模型。表1是本文在为了进行数据的对比,在相同的环境上构建不同神经网络模型,U-Net。在图像分割领域经典卷积神经网络的效果远不如全卷积神经网络,本文不再测试,重点测试FCN、SegNet、U-Net在嵌入式设备Jetson Xavier NX上的性能。

从表1中可以看出,本文的方法在重合率方面为91.85%,单次处理时间耗时为50.56 ms。在嵌入式设备中表现出来的性能比较良好,具有实际应用价值最终的提出效果如图2所示。

FCN方法是最先提出来全卷积神经网络,并应用在图像分割领域达到了比较高的重合率为89.41%,但是由于本身的全卷积结构,导致单次的测试上耗时很长,没有办法进行实际的应用。本文提出的方法在实时性和重合率方面均优于FCN方法和SegNet方法。

SegNet方法在为了平衡重合率和实时性方面,就需要在特征提取时,更多的保留边界信息,这就导致图像边缘信息的丢失,在相对较好的情况下,不考虑推理时间的情况下,SegNet方法暂时不如FCN方法的。

而本文的U-Net方法是一种不同于FCN和SegNet方法,但同时又有相似之处。本文的方法突出利用数据增加的方法进行数据集的制作,从而实现极少数据集的端对端训练。同时也兼顾了训练的准确率和实时性。本文认为U-Net方法的主要优势在于深层信息和浅层信息的应用,浅层信息作为目标与环境中最为重要的特征,提供了在区分目标和非目标中的数据信息,可以更好地进行物体的分割。浅层结构由于没有丢失信息而又有高分辨率信息属性,可以更好地对物体进行细节方面的分割。

本文所述方法在准确率、耗时和对复杂场景的适应性比较好,缺点是只能测试单人,当输入图片中包含很多人的时候,人体的轮廓。

3  结  论

本文提出了一种基于U-Net卷积神经网络人体轮廓识别方案,采用Dice损失函数和交叉熵损失函数结合的方式设计损失函数,在保证人体轮廓识别精度比较低的情况下,不需要占用大量储存空间和算力,保证了比较好的实时性和鲁棒性。在嵌入式设备中进行应用,为实际应用提供了方案。

参考文献:

[1] 吴泽斌,张东亮,李基拓,等.复杂场景下的人体轮廓提取及尺寸测量 [J].图学学报,2020,41(5):740-749.

[2] 路煜.基于全卷积的编解码网络的人体轮廓提取方法研究 [J].信息与电脑(理论版),2020,32(3):47-48+52.

[3] 王鹏,方志军,赵晓丽,等.基于深度学习的人体图像分割算法 [J].武汉大学学报(理学版),2017,63(5):466-470.

[4] 杨丹,刘国如,任梦成,等.多尺度卷积核U-Net模型的视网膜血管分割方法 [J].东北大学学报(自然科学版),2021,42(1):7-14.

[5] HE K M,GKIOXARI G,DOLL?R P,et al. Mask R-CNN [C]//2017 IEEE International Conference on Computer Vision (ICCV). New York:IEEE Press,2017:2980-2988.

[6] SHEN X Y,TAO X,GAO H Y,et al. Deep automaticportrait matting [C]// Computer Vision-ECCV 2016,2016:92-107.

[7] SHEN X Y,HERTZMANN A,JIA J Y,et al. Automatic Portrait Segmentation for Image Stylization [C]//37th Annual Conference of the European Association for Computer Graphics,Goslar:Eurographics Association,2016:93-102.

作者简介:贾群喜(2000—),男,汉族,河南驻马店人,本科在读,研究方向:自动化。