吴春梅,胡军浩,尹江华,3
1.广西科技师范学院 数学与计算机科学学院,广西 来宾546199
2.中南民族大学 数学与统计学学院,武汉430074
3.内蒙古大学 数学科学学院,呼和浩特010021
从静态图像中进行姿态估计实际上是一个对人体部位中标志性位置的定位过程。精确的人体姿态估计是人类活动识别、计算行为分析、人员重新识别和人机交互等任务中的基本步骤。由于存在姿态变化、清晰度低和重叠等现象,在无约束条件下估计2D姿态很困难。
近些年,一些学者在提高人体姿态估计精度方面进行了相关研究。传统方法往往采用人工生成特征和图形技术来表达身体部位的可能关系。这些方法在解决诸如服饰的变化、部分身体被遮挡和光照变化等问题上发挥了重要作用。如文献[1]中提到的自适应融合特征提取方法,文献[2]中描述的多模整体模型和星型模型以及文献[3]中的时空特征。但这些方法在不同的姿态或有较大遮挡的图像中,其在精确的姿态识别方面表现得并不是很理想。随着深度卷积神经网络(Deep Convolution Neural Network,DCNN)的出现,由人工生成特征正在慢慢转变到基于深度卷积神经网络的方法,文献[4]中第一次引入了用于人体姿态估算的深度神经网络,并称之为“深度姿态(DeepPose)”,可以直接从输入图像估算人体关节位置。文献[5]也提到,人体姿态识别已经受到这种转变的影响。而到目前为止,研究人员已经开发了多种深度网络来解决更多难点(例如文献[6-8]中提到的较大遮挡和姿态发生较大形变等难点),从而提高在姿态识别基准数据集中的准确性。
身体部位的精确定位需要能够辨别身体特征以及处理身体部位的成对关系。文献[9]和[10]中提出了利用两个后续网络,文献[11]中提到了学习外观特征的深度网络以及用于身体部位之间的变换参数的显式内核来实现这一需求。此外,文献[12]中提到如何通过使用堆叠的深度网络来构建其他网络模型,其中堆叠网络和内层之间是跳跃连接的。正如文献[13]和[14]中提出的对抗网络,通过生成器学习外观特征,并通过判别器对身体部位的结构信息进行编码。以上两种方法可以有效地预测身体所有部位的位置,但预测部位(例如手腕和脚踝)如果存在较大形变则无效,因为这种位置比预测不易形变的部位(例如颈部或臀部)更复杂。
文献[15]中引入了一种基于编码器和解码器的网络,被称为堆叠沙漏,以从不同尺寸的输入图像中捕获人体姿势特征。他们使用上采样层来解码不同尺寸的外观特征,并在卷积层和上采样层之间使用跳跃连接,这样可以编码部位之间的空间关系。同时研究人员将这些基于沙漏的网络进行堆叠,并从输入图像中推断出人体姿势,这种方法在人体姿态识别方面取得了重大进展。在本文中,设计提出的新型对抗网络的生成器也遵循堆叠沙漏的结构,即基于对抗网络堆叠多个沙漏来捕捉各个身体部位的外观特征。而且,本文还对每个堆栈进行了优化设计,以便进一步对人体部位的层次结构进行编码。这样对于编码身体部位之间的空间以及层次关系是有帮助的,并能实现端到端学习。
在文献[16]中提到了,利用硬关键点挖掘,根据估计的关键点的置信度对其进行排序,然后仅在关键点丢失的情况下对估计值进行惩罚,这些关键点是用高损失值(即低得分)估计的。这种方法有助于估算人员专注于对这些重要关键点的挖掘。本文提出的方法为这种需求提供了一个通用框架,其中重要关键点挖掘可以被视为所提出方法中的特例。在本文方法中,首先,将级联结构用于具有中间监督的网络。这将导致后续网络隐式地处理得分较低的关键点,并对整个关键点的估计进行细化。其次,使用显式层次结构,将网络划分为亲本部分和子本部分,将明显迫使估计运算更加注意子本部分,这些子本部分的置信度大多低于父部分。
本文提出了一个生成对抗网络,以解决部分身体部位会发生大形变的问题,同时还考虑了身体部位具有不同层次的复杂性。虽然文中所提出的新型网络受到文献[13]和[14]的启发,但是生成器和判别器的内部结构已经被优化,它可以模拟身体部位之间的层次关系。还在目标函数中引入了层次感知术语以规范亲本和子本之间的关系,分层对抗网络(包括分层生成网络和分层判别网络)有助于准确地估算身体各个部位的位置,特别是形变程度较大或高度闭塞的身体部位,如图1 所示,左图为姿态识别样本结果。右图是身体标志的等级顺序,大点是指预期的亲本,小点代表他们的子本,虚线指的是身体部位之间的等级关系。
图1 姿态识别示意图
本文在多个具有挑战的姿态识别基准数据集上测试了所提出的网络,与使用这些数据集的其他最新方法进行比较,效果相当。
根据文献[17],生成对抗网络(Generative Adversarial Network,GAN)的核心思想是“二元零和博弈”,目标函数如式(1):
GAN 模型主要有由部分组成:第一部分是生成图像的生成网络Generator,通过输入一组无序随机的噪声z 来生成一张图像;第二部分是判别图像真伪的判别网络Discriminator,通过不断学习真实图像x 的各种特征来加强对某一类图像的鉴别能力。
深度卷积生成对抗网络(Deep Convolution Generative Adversarial Network,DCGAN)将卷积神经网络(Convolution Neural Network,CNN)引入到了生成模型和判别模型当中,使得网络的生成能力有了质的提升,以至于后来很多工作都在该网络的基础上进行改进。该网络结构的几个设计要点为:(1)将卷积网络中的池化层用相应步长的卷积层代替;(2)在生成模型和判别模型中都使用了Batch Normalization 层;(3)去掉了网络中的全连接层;(4)在生成模型中采用ReLU 激活函数;(5)在判别模型中采用LeakyReLU 激活函数。深度卷积生成网络相对于一般的生成对抗网络而言具有更强大的生成能力,同时训练起来更加稳定、容易,生成样本更加多样化。目前,生成对抗网络在图像上应用广泛,如文献[18]中利用改进生成对抗网络对有遮挡的人脸图像进行表情识别,文献[19]中利用生成对抗网络对由于相机抖动、物体运动等产生的运动模糊进行图像复原,除此之外,文献[20-21]也将生成对抗网络应用在图像补全和图像修复上。文献[22]首次使用GAN 来做隐写,去搜索一张图像中的隐写位置,设计一个自己的框架ASDL-GAN。
深度卷积网络的基本构成单元为残差网络,如图2,主要包括三个卷积层,它们的卷积核大小不尽相同,第一层的大小为1×1,第二层的大小为3×3,第三层的大小为1×1。在通过每个卷积层之前都将通过一层Batch Normalization 层和ReLU 激活层,网络通过主路的卷积层提取出高层次的特征。支路为跳跃层,由核大小为1×1 的卷积层构成,主要作用是保留原层次上的特征、增加模型的非线性、降低计算量。在残差网络中,只改变图像的通道数,所有卷积层的步长都为1。若输入图像的通道为M ,输出图像的通道为N ,则主路的第一层与第二层卷积层核个数为N/2,第三卷积层核的个数为N 。
图2 残差网络
在残差网络的基础上仿照其结构组建一阶沙漏网络。如图3,主回路和支路都包括若干个残差网络。其中,支路通过跳跃层在原尺寸下进行特征提取,该层能很好地保留图片上各关节的空间信息;主路首先通过最大池化层将尺寸变为原先大小的一半,再进行特征提取,通过该方法使网络在不同分辨率下提取出关节点特征,最后通过最近邻插值将尺寸恢复到原大小并和支路输出相加。将图像x 通过一阶沙漏网络输出的特征定义为,则:
其中,f(x)M→N为残差网络的输出特征。
图3 一阶沙漏模型
将一阶沙漏网络中虚线内部的残差网络替换成一阶沙漏网络就可以得到一个二阶的沙漏网络。同理,在三阶沙漏网络中进行替换,就能得到一个四阶的沙漏网络,如图4,关节点检测网络中采用堆叠四阶沙漏网络作为检测网络。其中,每次通过最大池化层之前都分出支路以保留图片上关节之间的空间信息;每次下采样之后使用三个残差模块进行特征提取,所以4阶沙漏网络就能提取原始尺寸、1/2、1/4、1/8 尺寸上的关节点特征;每次提取特征后通过上采样使图像恢复到原始大小;与原尺寸特征进行相加后,再通过一个残差网络进行特征提取。所以该网络不改变图像的尺寸,只改变特征的通道数。将图像x 通过四阶沙漏网络的输出特征定义为,则可简述为:
图4 四阶沙漏网络
四阶沙漏网络中,每个沙漏网络都是通过池化层进行下采样、近邻插值进行上采样,这种自顶而下和自底而上的设计使得网络在每个尺度上都能提取关节点特征。沙漏之间采用跳跃连接,使得每个像素下的关节点空间信息都能很好地保存。该方法不仅能提取到像手腕等局部区域的特征,还可以保留关节与关节之间的空间关系。文献[15]通过实验证明了对两个四阶沙漏网络进行堆叠能达到很好的识别效果,所以本文中采用四阶沙漏网络。
由于原始大小的图像检测需要消耗大量时间,所以首先通过卷积层和池化层将像素降为64×64,中间使用残差网络进行特征提取,结构如下:
步骤1 将256×256 像素的RGB 图像I 通过64 个7×7 大小、步长为2 的卷积核变成128×128 像素,同时I的通道数变为64。其中,s(⋅)为ReLU激活函数,li代表第Li层的输出,则:
步骤2 通过残差网络,其输入通道为64、输出通道为128。
步骤3 进行最大池化,进一步将数据像素128×128降为64×64,并且不改变通道数。
步骤4 同理,下采样之后使用三个连续的残差网络,其中前两个网络的输入输出通道都为128,最后一个输出通道为256:
本文所提出的模型为DCGAN,该模型包括两部分:生成器和判别器。如图5 所示,生成器和判别器的基础结构是由文献[17]中描述的基于沙漏的网络组成,这是一个带跳跃连接和上采样层的编码器和解码器网络,在捕捉人体姿态的多样性的同时可以适应不同尺寸的图像。利用残差和线性块对沙漏网络的输入和输出进行预处理和后处理,以提取特征并估算的身体部位位置,得到有价值的置信度得分图。其中,每个栈的结构如图6所示。
图5 提出的DCGAN框架
图6 每个堆栈的内部结构
RGB 图像通过生成器,可以估算16 个身体部位的置信映射。这些置信映射中的每个值代表该像素坐标是否是特定身体部位的可能性。判别器具有与生成器类似的结构。与传统的GAN 一样,它可以区分实际和生成的身体姿态。判别器允许网络根据先前的结构隐式地编码生成姿态的结构。
人体的肢体关节位置(例如手腕、肘部、膝盖和脚踝)属于铰接结构,这就导致肢体在做动作时会有明显的形变,而在大多数情况下躯干上的关节(例如肩部和臀部)形变程度则比较小。所以对于人体肢体部位这些具有较大形变的部位进行姿态估算更具挑战性,需要大量不同的训练样本作为支撑。为了解决这些问题,本研究对文献[13-14]中生成器和判别器网络的结构进了行设计优化,新的设计使用了堆叠沙漏网络,它们可以连接起来用于建立人体部分的空间层次结构。此外,本研究还引入了新的损失函数术语用来规范亲本与子本之间的关系。分层对抗网络(Hierarchical Adversarial Network,HAN)的设计和新的层次感知损失则有助于准确地估算身体各个部位的位置,特别针对那些形变程度较大的或高度闭塞的身体部位。
生成器的作用其实可以看作是姿态估算器,它利用身体部位的分层结构来估算身体关节的位置。然而,受到遮挡物、光照条件变化和图像清晰度水平的影响,在估算人体姿态中还需要区别其中容易估计或较难估计的姿态。本文所提出的方法中使用判别器网络的原因有以下几点:(1)对一些不太可能是自然身体姿态的情况就无需进行估算;(2)防止生成器仅聚焦在具有足够外观特征的明显姿态上,还需要集中在高度遮挡的姿态上。这两个特征结合使用可以减少对抗损失,以在训练生成器时提高性能。
生成器是一个完全卷积网络(Fully Convolution Network,FCN),其在给定输入图像的情况下可以推断出身体部位的置信映射。该生成器由多个基于堆叠沙漏的网络组成,而且是顺序连接的。
网络可以接收大小为256×256像素的输入图像I 。然后,预处理步骤的执行包括使用CNN,残差模块和最大采样层来提取早期特征。这一步会将提取到的特征图像的大小降低到64×64像素。接下来,这些特征会变成第一沙漏网络的输入值,用来估算亲本部分的置信图。其次,后处理步骤包括残差模块、线性激活层和CNN 模块,它们将从沙漏网络提取的外观特征编码成具有相同数量的亲本部分的置信图。
由于本文提出亲本与子本分层的思想,故采用两个堆叠沙漏进行识别,使用第一个沙漏网络作为亲本项来估算第一部分,再使用第二个沙漏网络作为子本项估算之前的这些部分。亲本部分的选择源于以下原因,连接到人体躯干区域的部分变形较小并且可以只利用比较少数量的采样层进行提取,这些部位包括肩部、臀部和颈部。之后,利用不同的模块处理这些置信图,并与网络中提取的早期特征连接,使用第二个沙漏估算子本的位置。沙漏网络的输出连接并传递到网络中的下一个堆栈。最后一个堆栈的输出即为最终生成的映射,可以用于训练判别器。
生成器G:RM→RN将输入图像I 分别映射到亲本和子本的置信映射Cpa和Cch中。可以通过学习函数Fi来执行映射,如下所示:
然后将亲本部分和子本部分的置信映射连接到每个堆栈生成器的输出。可以使用以下等式推断预测姿态:
通过对所有顺序连接堆栈的置信度映射求和并在连接映射的置信度得分上使用soft-argmax 选择x 和y位置来估算预计姿势Ŷ 。使用soft-argmax 代替hardargmax 可以便于计算反向传播过程中的梯度。这使得整个流程可以进行端到端的训练:
生成器网络本身没有对抗分支,只能通过最小化以下损失函数来进行训练:
它由四个部分组成:前两个部分分别代表亲本和子本部分的估算置信度映射和基本真值之间的差异。第三和第四部分代表亲本和子本之间的层次感知损失值。其中,第一部分的计算是由第一个沙漏网络(亲本项)来进行,第二部分的计算是由第二个沙漏网络(子本项)来进行。这两个部分考虑了亲本和子本最大得分的情况下位置的距离D 和角度Θ ,并将这些与实际映射进行比较。新添加的层次感知损失部分有助于规范子本部分在预期位置的大形变。先将不易发生形变的部位看作亲本点先进行估算,这限制了子部件相对于亲本部件位置的搜索空间,再估算易发生形变的子本部位,这样分两部分进行估算可以提高估算的效率和效果。例如先估算出不易发生形变的颈部亲本点,则限制了对于易发生位置变化的头部子本点的寻找,即只需在颈部亲本点附近估算头部子本点的位置即可,无需全局寻找,大大提高了效率。从效果上来看,在颈部亲本点附近寻找头部特征会大大降低从全局寻找头部特征时找错的概率,其最终结果质量也将提升,其他亲本与子本点的估算也同理。等式(11)的损失值是由计算训练样本m 和堆栈数n 的平均值得到的。
判别器D:RN→RN具有与生成器网络类似的结构,具有基于堆叠沙漏的堆栈网络。其中一个堆栈可以用于重建亲本部分的置信映射,另一个堆栈可以用于重建子本部分的置信映射。将判别器网络的结构划分为两个层次可以使判别器在重构输出图时考虑身体部分的层次结构。
受文献[13]的启发,判别器在其中的作用是为了区分假姿态和真姿态的。具体而言,由于生成的姿态中存在遮挡或较大变形,鉴别网络可以被分成两部分,即Dpa和Dch。其中Dpa部分负责区分亲本部件的假姿态与相应的真姿态。 Dch部分则是在子本部分中扮演着同样的角色。这两个判别器的重构映射被连接在一起以表示鉴别网络的输出。
训练判别器是非常重要的步骤,因为相比从生成的姿态中重建判别器,更倾向于从真实姿态中重建,这使得判别器不能区分所产生的姿态是真是假。为了解决这个问题,本文通过在重建真实姿态和生成姿态之间使用平衡策略。使用以下损失函数来训练判别器:
其中,kt是平衡项,Lreal和Lfake分别是真实姿态和生成姿态的损失项,其计算方法如下:
其中D(⋅,I)是判别器的输出,其应用于与真实或生成的置信映射连接的输入图像I 。为了控制生成器的输出和判别器输出之间“博弈”的平衡,平衡项kt∈[0,1]在每个训练步骤t 的更新如下:
其中λk是平衡项k 的学习速率,它是k 随时间的比例增益。多样的γ 值对于实现平衡方面起着关键作用,如果γ 值较高,则会使判别器更多地关注生成的姿态,而如果γ 值较低,则会导致判别器更多地关注于对真实姿态的自动编码,为了保持这种平衡,且大部分学者对其γ 值的取值都为0.5,为了与他们能够比较,在实验中令γ=0.5。
其中λG是突出对抗损失权重的超参数,相当于是Lfake。训练步骤如算法1所示。
算法1 分层对抗训练的步骤
输入:{I},{Cpa,Cch}
while:在验证集中,Ŷ仍在改进do:
在{Cpa,Cch}上应用判别器网络;
利用式(13)计算Lreal;
将Lreal的梯度反向传播到判别器中;
在输入图像上应用生成器网络;
利用式(14)计算Lfake;
将Lfake的梯度反向传播到判别器中;
利用式(12)计算loss后更新判别器参数;
利用式(16)计算LG;
利用LG的梯度更新生成器的参数;
利用式(10)提取Ŷ
End
在本章中,为了验证提出网络的性能,将利用三个具有挑战性的人体姿态估算数据集进行实验并得到相应结果。(1)文献[6]中提到的LSP数据集及其扩展版本,这里包含12 000张图像,其中11 000张图像将用于训练,另外1 000 张用于测试,部分实验图像如图7(b)所示;(2)文献[7]中的MPII数据集,该数据集包含25 000张图像以及40 000张人类动作的图像,部分实验图像如图7(a)所示;(3)文献[8]中的人群观察(LIP)数据集,包含50 000 张图像,其中有16 个关键注释用于人体姿态估算,部分实验图像如图7(c)所示。该数据集是从具有各种姿态和视图的真实场景中收集的,还包含许多具有较大遮挡和低分辨率的图像。
将MPII 和LSP 数据集中的训练数据融合在一起,并将本文所提出的模型训练250个周期。对于LIP数据集,将已经在两个数据集中训练过的模型再次放入该数据集中并另外进行50 个周期的微调训练。受文献[15]的启发,输入图像的尺寸被裁剪为256×256 像素大小。数据增强除了用于增加训练模型的泛化能力还需要防止过拟合。将模型放在Titan X GPU中进行训练,其中所有训练模型的最小批量数为3。使用RMSProp 来优化生成器网络和判别器网络的参数。生成器网络的学习速率以2.5×10-4作为初始值,然后在第101和第151周期分别减少10倍。对于判别器网络,使用1×10-4作为初始学习率。平衡项kt的初始值为0,并且需要用权重参数λk进行迭代,λk如式(15)中所示,其中在所有实验里λk=0.001。式(16)中的对抗损失的权重λG在所有实验中被设定为0.000 1。
图7 各数据集样本结果
(1)LSP数据集使用正确的关键点的百分比(PCK)在LSP数据集上评估本文提出的方法,为了能与其他方法比较,将容忍度(r)设为0.2。
结果如表1所示,对于本文提出的模型正确关键点的百分比能达到94.2%,这一结果要优于文献[23]和文献[24]中的结果,这两种方法也被认为是与本文提出的方法最接近的可比方法。尽管文献[23]和文献[24]可以对人体的结构信息进行较准确的估计,但本文提出的模型在人体的肘部、手腕、膝盖和脚踝等具有挑战性的身体部位上进行姿态估算有更好的效果。这说明了所提出的网络既能达到估算人体姿态方面的有效性,同时还考虑了各身体部位的层次结构。
表1 LSP数据集中r=0.2 时正确关键点的百分比(PCK)%
(2)LIP数据
表2给出了该方法的PCKh结果并与先前方法的结果进行了对比。PCKh与普通PCK相同,区别在于容忍度的大小是根据头部而不是躯干来计算的。本文提出的模型优于利用训练这些数据集来做姿态估计的其他成果,并获得了PCKh得分为87.5%的最新结果。同样,本文模型着重考虑了人体结构的层次关系,可以在容易发生较大形变的关键部位检测得更好,在手腕部位与文献[14]中的方法对比准确率实现0.7%的增长就可说明这点。Hybrid Pose Machine和Pyramid Stream Network通常被认为是在LIP数据集上训练的经典方法,本文将此两种方法作为对比,结果表明,本文方法更优。这也肯定了所提出方法的有效性以及将层次结构编码到模型中的重要性。
表2 LIP数据集中r=0.5 时正确关键点的百分比(PCKh)%
(3)MPII数据集
MPII数据集代表了人体姿态估算中最具挑战性的基准数据集,因为它包含许多进行不同活动的人的各种姿态的变化。在表3中,利用MPII数据集的测试集中显示了PCKh 结果,所有结果均以0.5 作为容忍度。与文献[14]和[24]这些未考虑层次结构的方法相比,本文方法对大多数身体部位的估算都能显示出更好的结果(见表3)。
表3 MPII数据集中r=0.5 时正确关键点的百分比(PCKh)%
本文方法的PCKh 值对所有部位的平均值以及手腕和脚踝部位上的值优于其他方法的结果。这再次证明了本文所提出的方法在估算有难度的身体部位姿态时的鲁棒性。
由于MPII 数据集在人体姿态估计中最具挑战性,所以本文针对该数据集,以不同的容忍度进行对比实验。图8 所示为MPII 数据集上平均PCKh 值。从曲线中可以看出,本文方法在低容忍度([0.125,0.3])下,效果优于现有方法。
图8 不同容忍度下平均PCKh曲线(MPII)
本文提出了一种基于堆叠沙漏的生成对抗的网络,该网络可以隐式地推断身体各部位的结构和层次。本文所提出的网络显示了学习估算身体部位空间关系的能力。它经过端到端的训练,并在三个不同的基准数据集上进行了测试。该网络已经显示出估算身体部位的能力,这些身体部位在很大程度上存在大变形并且高度被遮挡。而本文所提出的方法能够克服这些障碍并实现较好的性能,还在多种数据集上获得最新的实验结果,并与其他相关数据集上的结果对比。此外,本文所提出的网络还可以扩展并对相邻身体部位之间的其他关联特征进行编码。而且,该网络还适用于处理身体部位之间的多个等级层次。