姿态识别(1):DeepPose : Human Pose Estimation via Deep Neural Networks

这篇文章是使用深度学习网络处理人体关节点定位的第一篇文章,发表于2014,August 20. 作者使用了级联的卷积神经网络来预测人体关节点。

1 研究背景

人体姿态识别被定义为人体关键点的定位问题,一直以来是计算机视觉领域的重要关注点。这一问题有着一些常见的挑战,比如各式各样的关节姿态,小得难以看见的关节点,遮蔽的关节点,需要根据上下文判断的关节点,而这个领域主流的工作是各式样的关节姿态。
这里写图片描述

此前的姿态估计都是基于局部的为关节建模,这种方式对于表示能力是很有局限性的,因为它使用局部探测器,只能是为身体关节点之间所有关系的部分子集建立模型,很有局限性。于是作者提出了以整体的方式来预测人体关节点的方法,使用DNN强大的性能来处理人体关节点的预测。DNN有着强大的分类和定位能力,在此之前并没有人来使用DNN(Deep Neural Networks)对人体关节点的定位,作者Alexander Toshev和Christian Szegedy是第一个DNN应用于人体关节点检测的人。

作者将人体姿态估计定为关节点回归的问题,并且给出了如何将DNN用于人体关节点回归的方式,每一关节点的定位使用一整幅图像输入到7层CNN来做回归,这种做法又两个优点:

  • DNN可以捕获每个人体关节点的全部上下文,每一个关节点回归都使用一整幅图像。
  • 这种方法特别容易实现,不需要显式的设计特征提取器和局部探测器,不需要为关节建立拓扑结构和关节间的关系相反,通用的CNN可以用来解决这些问题。

更进一步,作者使用级联的DNN-based 姿态检测器。这种级联的检测器能够增加关节点定位的精确度。首先在一整幅图像上进行粗略的姿态估计,然后使用多个DNN-based 回归器对关节点的邻域子图像(有更高的分辨率)优化预测结果.

2 DNN for Pose Estimation

2.1数学表示

人体的一个姿态可以用 k 个人体关节点的位置来表示,表示为向量

y = ( , y i T , ) T , i = { 1 , , k }
y i 表示第 i 个关节点的坐标,一个带有标签的图像表示为 ( x , y )

检测框 b o x b = ( b c , b w , b h ) , b c 表示为预测之后关节点的位置,表示需要裁剪图像的中心, b w 表示图像的宽, b h 表示图像的高,并且使用

(1) N ( y i , b ) = ( 1 / b w 0 0 1 / b h ) ( y i b c )

将每个关节点的图像用这个 b o x 的绝对坐标转化为相对坐标,并且将 关节点 y i 标准化, N ( ) 表示将整个图像或者所有的关节点标准化(这里的标准化也会将关节点周围的坐标相对化),例如 N ( x ) 表示将整幅图像标准化,就是将坐标原点移到图像的中心位置, N ( x , b ) 就是用 b o x ( b c , b w , b h ) 截取图像x的对应部分,并且在 b o x 做标准化处理。 N ( y , b ) = ( , N ( y i ; b ) T , ) T 表示对每个关节点都进行box b 的标准化处理。

作者是将姿态估计当作回归问题来解决的,作者使用
ψ ( x ; θ ) R 2 k 表示一个模型对图像 x 处理的标准化姿态向量, θ 是模型的参数,用公式(2)表示对预测的姿态向量的绝对坐标的表示

(2) y = N 1 ( ψ ( N ( x ) ; θ ) )

由(2)知,应当也对训练集进行标准化处理

(3) D N = { f ( N ( x ) ; N ( y ) | ( x , y ) D }

所使用的损失函数是L2损失,那么模型可以写为:

(4) a r g min θ ( x , y ) D N i = 1 k | | y ψ ( x ; θ ) | | 2

2.2 模型框架

如下图所示模型的基本框架,强大的CNN避免了姿态去建立主要模型,而是从大量的数据中学习模型和特征。
这里写图片描述
模型结构如下:
C ( 55 × 55 × 96 ) L R N P C ( 27 × 27 × 256 ) L R N P C ( 13 × 13 × 384 ) C ( 13 × 13 × 256 ) P F ( 4096 ) F ( 4096 )

作者使用使用CNN并不是用的分类损失,而是使用线性回归损失,预测的关节点和ground-true 的 L2-loss。由于训练数据量,模型参数很多,所以对图像做了简单的数据增强以扩大数据集。

初始阶段是可以粗略的得到关节点的大概位置,它是基于整幅图像进行上下文推理的,但是他的尺寸被固定到了220x220,而数据集里的图片都比较大,所以输入的时候会对图像进行下采样,想要使得网络看到更多细节就很难了,继而想要优化关节点的位置相对不够精确。但是又不能增加输入的尺寸,因为这样会增加大量的参数。

为了得到更好的精确率,作者训练一个级联的姿态回归器。在第一个阶段,先
粗略的估计出上个部分的姿态轮廓,然后在下个阶段,将关节点的位置不断的
优化关节点的位置。

每一步都使用已经预测的关键点来切出基于这个关键点的邻域,这个子图像将被用于接下来的网络输入,而接下来的网络就会看到更高分辨率的图像,最终达到更好的精确率。

为了优化姿态,作者定义了一个回归框 b o x b i 用于从整个图像上获取 y i 的邻域子图像 b i ( y , σ ) = ( y_i , σ d i a m ( y ) , σ d i a m ( y ) )

diam(y)
(摘自原文)The diameter diam(y) of the pose is defined as the distance between opposing joints on the human torso, such as left shoulder and right hip, and depends on the concrete pose definition and dataset
姿态的预估diam(y)= 对立的关节点之间的距离,具体取决于数据集的和姿态定义

根据以上可以写出初始阶段或者第一个阶段的预测姿态,其中 b 0 表示整个图像

s t a g e 1 : y 1 N 1 ( ψ ( N ( x ; b 0 ) ; θ 1 ) ; b 0 )

后面的阶段就是使用的局部图像,即预测关节点邻域的图像,每个关节点都会做一次回归。

(6) s t a g e 2 : y i s N s 1 ( ψ i ( N ( x ; b ) ; θ s ) ; b ) f o r b = b i ( s 1 )

(7) b i s ( y i s , σ d i a m ( y ) , σ d i a m ( y ) )

每个关键点 y i 一个边框 b ,每个边框 b o x 都不一样,而且每个预测图像的中心是取决于上个预测的关节点的坐标,因为深度学习有着强大的学习能力(为了防止过拟合),作者不是简单的使用预测后的数据,作者做了中间数据增强的处理,利用预测点在其邻域内生成多个关节点。该邻域使用的是二维高斯分布 N ( s 1 ) ,均值和方差来源于( y i s 1 y )所有样本数据的预测和Groundtruth的差的方差和均值, 这里使用 δ 表示从 N ( s 1 ) 取出的样本,同样,这里的 δ 也使用的是相对坐标。

D A s = { ( N ( x ; b ) ; N ( y i ; b ) ) | ( x ; y i ) D ; δ N ( s 1 ) b = ( y i + δ ; σ d i a m ( y ) ) }

那么在(4)模型的基础上进行修改,模型4表示为第一阶段的过程,(8)为后面的阶段的过程

(8) θ s = a r g min θ ( x , y i ) D A S | | y i ψ i ( x ; θ ) | | 2

3. Empirical Evaluation

3.1. Setup

训练集:

FLIC(Frames Labeled In Cinema):4000 训练图像 ;1000 测试图像; 10个上身关键点
LSP(Leeds Sports Dataset): 11000 训练 1000 测试; 14个全身关键点

Metrics:

Percentage of Correct Parts (PCP) –> Percent of DetectedJoints (PDJ)
如果两个关节点的位置和真实肢体关键的距离达到至多一半时的真实肢体长度,就认为已经关节点被预测到了 –>距离变成了躯干直径的百分比

3.2 结果

这里写图片描述

这里写图片描述

链接

DeepPose: Human Pose Estimation via Deep Neural Networks(精读)
https://blog.csdn.net/sheng_ai/article/details/38925561
LRN:局部相应归一化层
https://blog.csdn.net/sinat_21585785/article/details/75087768

猜你喜欢

转载自blog.csdn.net/u010460650/article/details/81063759