Thin-Slicing for Pose - Learning to Understand Pose without Explicit Pose Estimation - 论文笔记

这篇文章主要使用了DCNN构造了一个嵌入函数(embedding function),能够感受姿态并将相似姿态的人投影到嵌入空间邻近区域中。作者说其结构能有效剔除服装、背景、和成像因素以学习鲁棒的人体姿态特征。对于各种姿态相关任务,这种方法计算高效并且不需要明确的估计姿势,绕过了定位关节的问题。作者还给出采用此方法的图像检索和姿态识别的例子。

引言

There can be as much value in the blink of an eye as in months of rational analysis.
眨眼间的判断和数月的理性分析具有同样的价值。
— Malcolm Gladwell

这个句子出自Malcolm Gladwell的《Blink》,书中举了一些例子来说明人们存在一种不自觉的瞬间判断(snap judgment)与快速认知(rapid cognition)的能力称之为「薄片分析」 (thin-slicing)。

这篇文章就是让机器使用thin-slicing来分析人体姿态并减少对精确人体姿态估计的需求。人体姿态估计的问题主要在于定位独立的身体关节。即使全身可见,经常性的自我遮挡和姿势差异是这个问题很难解决。同时还由于复杂的结构推导问题,人体姿态估计在实践中计算繁重。

作者认为很多问题都只需要估计姿势相似度因此准确的人体姿势估计可能并不是必须的。因此改为基于CNN训练一个有效的姿态嵌入函数。

关于嵌入(embedding)是一个数学上的概念:
Embedding在数学上表示一个maping, f: X -> Y, 也就是一个function,其中f是单射函数,而且有structure-preserving (结构保存,比如在X所属的空间上X1 < X2,那么映射后在Y所属空间上同理 Y1 < Y2,具体保存什么结构要看问题来定)的特性。

相关工作

Pose estimation
Action recognition with pose
Embedding by similarity
Pose embedding

算法概览

论文在训练CNN时,使用了Triplet Rank Loss:

论文对full-body和upper-body的姿态分别训练了两个嵌入函数,两个使用同样网络结构。

网络结构

net.jpg

图片中蓝色卷积层使用VGG-S的预训练权值并在训练时微调, 来源于这篇论文:Return of the Devil in the Details: Delving Deep into Convolutional Nets

Triplet rank loss

Triplet loss即使用3个样本计算loss: Anchor,Positive(和Anchor属于同一类)和Negative(和Anchor属于不同类);由3个样本经过网络得到3个特征表达f(a),f(p),f(n)。其优化目标是让f(a)和f(p)距离L(a,p)尽可能小,f(a)和f(n)距离L(a,n)尽可能大,且这两个距离之间至少相差α。最后Loss取L(a,p)-L(a,n)+α的正值,负值0.
关于Triplet Loss的详细内容参见Triplet loss 原理以及梯度推导

论文中Loss方程如下:
loss.jpg

数据集

数据源

作者收集了有关节标记的姿态图片,并根据标记关节坐标计算姿态间距,主要基于 MPII Human Pose dataset,H3D 和 VOC2009 person (trainval) 做补充。

最后数据集大小为:
12,366 images for training (MPII: 10,000, H3D: 843, VOC2009 people: 1,523)
9,919 images for validation (MPII: 9,919)

图像和姿态标准化

全身:使用共同的姿势中心点对齐图像(如骨盆),裁剪出最小包含整个人体框的的正方形
上身:以头部为宽度中心点,按比例裁剪正方形

两个图像姿态距离定义为:两个图像对应关节坐标欧氏距离均值

Learning pose embedding network

Triplet sampling

数万张图像之间的3元组配对数量太多,因此:
对每个图像x,选择p个最邻近的图像作为Positive样本的集合P,其余图像作为Negative样本集合N;在每个epoch后移除Negative集合中最远的一些样本。

Learning network with random triplets

为了更有效的求解triplet rank loss,在一个mini-batch中先算出anchor和每个negative、positive之间的距离,这样每个图像只需前向传播一次。同时由于每个图像可能参与到多个triplet中,因此将每个的梯度累加最后执行一次反向传播。

实验

作者在MPII上测试了图像检索表现,VOC2012 Action dataset及PPMI上测试了动作识别的表现。

实现细节

对于全身姿态嵌入,sampling中p取30,上身的p取15.
mini-batch大小设置为128:1个anchor,5个随机positive,122个随机negative。Negative样本集合N大小每epoch减小3K直至减小到1K。每个batch中图像单独变化和拉伸±10%,对于整个batch以0.5的概率随机翻转。
FC layer学习率初始为0.01,每epoch乘0.2,卷积层学习率是FC的1/10。 momentum和weight decay设为0.9和0.0005.

实验结果

  1. 在图像搜索上性能比对比的几个模型都要好,但是在没有学过图像中类似姿势情况下的图像检索性能明显差于明确姿态估计的方法。

    mpii.jpg
  2. 在动作识别时,使用SVM做分类器。只是用embedding提取的特征时准确率很低,主要是学习时没有学习人与物体之间交互而只学习了人体姿势,但如果结合VGG-16和VGG-19提取的特征(即取FC2的输出)准确率比VGG原本的准确率要高。

    voc2012.jpg

总结

这个在姿态相关的图像检索上能直接应用,对于动作识别来说更多的是作为辅助的特征提取方式。