一文概览2D人体姿态估计
共 9185字,需浏览 19分钟
· 2022-07-05
点击上方“小白学视觉”,选择加"星标"或“置顶”
重磅干货,第一时间送达
来自 | 知乎 作者 | 谢一宾
链接 | https://zhuanlan.zhihu.com/p/140060196
编辑 | 深度学习这件小事公众号
本文经作者授权转载,请勿二次转发
0. 前言
1. 介绍
![](https://filescdn.proginn.com/a15329b639f2f3fcb4c126be0de78719/7178b8995172f018c776085f02123bbc.webp)
单人姿态估计是基础,在这个问题中,我们要做的事情就是给我们一个人的图片,我们要找出这个人的所有关键点,常用的MPII数据集就是单人姿态估计的数据集。
在多人姿态估计中,我们得到的是一张多人的图,我们需要找出这张图中的所有人的关键点。对于这个问题,一般有自上而下(Top-down)和自下而上(Bottom-up)两种方法。 Top-down: (从人到关键点)先使用detector找到图片中的所有人的bounding box,然后在对单个人进行SPPE。这个方法是Detection+SPPE,往往可以得到更好的精度,但是速度较慢。 Bottom-up: (从关键点到人)先使用一个model检测(locate)出图片中所有关键点,然后把这些关键点分组(group)到每一个人。这种方法往往速度可以实时,但是精度较差。
2. 难点
遮挡(自遮挡,被其他人遮挡)
扩大感受野,让网络自己去学习被遮挡的关系
人的尺度不一,拍照角度不一
多尺度特征融合
各种各样的姿态
考验网络的容量,深度
光照
在数据预处理中加入光照变化的因素,对每个通道做偏移
3. 方法
3.1. SPPE
DeepPose (Google, 2014)[1]
![](https://filescdn.proginn.com/2a188fc5bbe7f4dc32b299ea1dda42c6/800738c0d75a38a4fd935e67f677286d.webp)
使用AlexNet作为backbone
直接回归关节点的坐标
使用级联的结构来refine结果
Joint training with CNN and Graphical Model(LeCun, 2014)[2]
![](https://filescdn.proginn.com/9d2a345483c0f27110566965b676fa08/21ea640db6be9a619310e24f3820d6aa.webp)
开始使用heatmap
CPM (CMU, 2016)[3]
![](https://filescdn.proginn.com/9c0bb7654ff068b3c8ad40dc4d2fd546/8e47bc3a70414af3e914c576bfed4de7.webp)
网络有多个stage组成,以第二个stage为例,他的输入由两部分组成,一个是上一个stage预测出的heatmap,一个是自己这个stage中得到的feature map,也就是在每一个stage都做一次loss计算,这样做可以使网络收敛更快也有助于提高精度。
上一层预测的heatmap可以提供丰富的spatial context,这对关节点的识别是非常重要的
正式开启e2e学习时代
Stacked Hourglass Network (Jia Deng组, 2016)[4]
![](https://filescdn.proginn.com/84c0f324980e953b4f142f99ea515802/e4c267aedb12ab420420f6dc15763dcd.webp)
该工作的主要创新在于网络结构方面的改进,从图中可以看出,形似堆叠的沙漏。
![](https://filescdn.proginn.com/f35632ac04f71d50de8d41240cb53093/4c5e467b36a8c8301404b6a1bbcf9cfa.webp)
每一个沙漏模块包含了对称的下采样和上采样的过程,每一个box都代表了一个有跨层连接的子模块
![](https://filescdn.proginn.com/89bf7078028bb9258150f3d4b12e97af/e1339543d3d4111c23b25df3a67601b1.webp)
网络使用了中间监督,也就是图中的蓝色框是一个预测的heatmap,这加快了网络的收敛也提高了实际效果
Fast Human Pose (2019)[5]
![](https://filescdn.proginn.com/e73177275c14a254aa47e1cf8f98f548/bd120ea21d81d9a3fff129c2527fd42a.webp)
为了追求cost-effective,需要compact的网络结构
4-stage hourglass可以取得95%的8-stage的效果
一半的channel数(128)只会导致1%的performance drop
使用蒸馏来做监督的增强,Students learn knowledge from books (dataset) and teachers (advanced networks).
3.2. MPPE
3.2.1. Top-down
G-RMI (Google, 2017)[6]
![](https://filescdn.proginn.com/56fc6d6efe54538701e90c671bbcc57b/d11eff2ccd5361f1a6f1efc608108072.webp)
Faster-RCNN得到bounding box之后进行image cropping,使得所有box具有同样的纵横比,然后扩大box来包含更多图像上下文
![](https://filescdn.proginn.com/b5f91ed917301cbec2daebc842c82b68/8e986ab6663ec2e0b28d81592cfefdc2.webp)
使用ResNet作为backbone来估计heatmap和offset vector,因为得到heatmap之后我们往往还需要一个argmax的操作才能得到关节点的坐标,而这个过程中由于网络的下采样过程,heatmap势必分辨率比原图更小,所以得到的坐标会出现偏移,因此又估计了一个offset vector来补偿掉这种量化误差。
OKS-based NMS:基于关键点相似度来衡量两个候选姿态的重叠情况,在目标检测中常基于IoU来做NMS,但是姿态估计中输出的是关键点,更适合用这种属性来衡量。
RMPE (上交卢策吾老师组, 2017)[7]
![](https://filescdn.proginn.com/88ceaa2fdb2816fefe861bb64882d0d5/45346132187b097782bbf5d2e6a56995.webp)
SSTN(Symmetric Spatial Transformer Network):在不准确的bounding box中提取担任区域
STN来选择RoI
SPPE帮助STM得到准确的区域
PNMS(Parametric Pose Non-Maximum-Suppression)来去除冗余的姿态
PGPG(Pose-Guided Proposals Generator)
Compositional Human Pose Regression (MSRA, 2018)[8]
![](https://filescdn.proginn.com/ac6ab15abceab487bfec43044ed369cc/a9753d68317e034b237d6fd59c429777.webp)
CPN (旷视,2018)[9]
![](https://filescdn.proginn.com/356fbb320efd960796049fa849a2d094/757c9216818b654d6d71667dbfa46b21.webp)
多尺度特征信息的融合是网络设计的一个很大的目标,作者使用 GlobalNet (global pyramid network, U-Shape)来处理easy keypoints,GlobalNet中包含了下采样和上采样(插值非转置卷积)的过程。
使用RefineNet (pyramid refined network)来处理hard keypoints
OHKM(online hard keypoints mining)用来找出hard keypoints,类似于检测中的OHEM
MSPN (旷视,2018)[10]
![](https://filescdn.proginn.com/a8999e5902bc37e46623331307c73b07/eb5ebe0e4aa6de236a865f99350e1105.webp)
网络结构方面的改进
Simple Baseline (MSRA, 2018)[11]
![](https://filescdn.proginn.com/aee5abde54d9930f89d226a733c7b5c9/d68b98882d974fd2f01cfce63aa6e8e5.webp)
从图中不难看出,这个网络结构非常简洁,作者使用Deconvolution来做上采样,网络中也没有不同特征层之间的跨层连接,和经典的网络结构Hourglass和CPN相比都十分简洁。
MultiPoseNet (2018)[12]
![](https://filescdn.proginn.com/cef3defebf069c3155835434646efd65/289142f1d98a02a64d4e474b13be118c.webp)
backbone也就是用来提取特征的部分采用的是resnet和两个FPN(用两个的原因是因为后面要接两个subnet)
keypoint subnet用来输出keypoint和segmentation的heatmap
person detect subnet用来检测人体,使用的是RetinaNet作为detector
pose residual network输出最终的pose,说是在学习了data的pose structures之后可以有效应对遮挡的问题
Deeply learned compositional models (2019)[13]
![](https://filescdn.proginn.com/6046819d94f408e218da8edbc2e709d0/b70039db56b008dfab62c8ddb12972b4.webp)
compositional models
![](https://filescdn.proginn.com/fe7b740e39509d3eca8812390c6decee/d1b5fd6ed135b4c0c51d2efd8301833c.webp)
HRNet (MSRA, 2019)[14]
![](https://filescdn.proginn.com/e3adaae0e0f047c8799d641488138db9/3c2389be106681b4da6721d28fc5110c.webp)
各个scale之间互相fuse,并不是一个串联的下采样过程,这样保留了原分辨率的feature,会有很好的spatial信息。
Enhanced Channel-wise and Spatial Information (字节跳动, 2019)[15]
![](https://filescdn.proginn.com/81ec4a72601c632238aa2e8e938729e2/1223c1ff5ea2f3706942e3adda0bf4c2.webp)
Channel Shuffle Module (CSM): reshape-transpose-reshape, 经过这一通操作之后,希望feature能够和通道的上下文信息相关。
![](https://filescdn.proginn.com/44f137beb5dc1997b6cd1b9fb9784dac/136ac896a0b7c129178802b3cf97def1.webp)
spatial attention: (feature level)希望网络对于特征图是pay attention to task-related regions而不是整张图片。
Channel-wise Attention: (channel level) 从SE-Net中借鉴来,主要包含GAP和Sigmoid两个步骤,希望网络可以选择更好的通道来detect pattern。
Related Parts Help (2019)[16]
![](https://filescdn.proginn.com/86df59e6298c6a53a51817ec99129ddc/70ebf4b361e1b81fe330ba697da993e3.webp)
Related body parts 把keypoint分成多个group,根据mutual information
Part-based branching network (PBN) learn specific features for each group of related parts
Crowd Pose (上交卢策吾老师组,2019)[17]
![](https://filescdn.proginn.com/f761d2a5cd1c6ed1a0dae05d10d096c3/fda2aca77319753ec9428c6ce1c50e32.webp)
在拥挤场景下,在同一个box内,我们可能需要处理很多其他人的关键点,该项工作设计了joints candidate loss来估计multi-peak heatmaps,让所有可能的关节点都作为候选。
Person-joint Graph: joint node是通过关节点间的距离来建立,person node通过检测的human proposals来建立,两者之间的edge通过看是否有contribution来建立。由此建立了一个人-关节的graph,也就转化到了图论问题上,目标就是最大化二分图中的边权重。使用updated Kuhn-Munkres解决这个问题。
Single-Stage Multi-Person Pose Machines (NUS, 2019)[18]
![](https://filescdn.proginn.com/6fdb48a6b11990bc1edbd1f5d38d09b9/5b6c31327abc84bb9f2936823460dd2d.webp)
Hierarchical SPR
A unique root for each person
Several joint displacements for each joint
heatmap for root joint (L2 loss)
dense displacement map for each joint (smooth L1 loss)
3.2.2. Bottom-up
DeepCut (Germany, 2016)[19]
![](https://filescdn.proginn.com/5ebdda401af6aa4f522616a198b665e8/734318020fb19fb8433453b5db076428.webp)
pipeline(Bottom-up)
detect 检测人体关键点(Adapted Fast R-CNN)并且把他们表示为graph中的节点
label 使用人体关节点类别给检测出的关键点分类,比如arm, leg
partition 将关键点分组到同一个人
使用pairwise terms来做优化
Associative Embedding (Jia Deng组,2016)[20]
![](https://filescdn.proginn.com/1c822989c0a438259d943b622bff835a/da5f2a0301fbdb2094ce90cd47685b98.webp)
produce detection heatmaps and associate embedding tags together (bottom-up but single-stage) and then match detections to others that share the same embedding tag
主要的工作在于提出了associate embedding tag,也就是说预测每个关节点的时候也同时预测这个关节点的tag值,具有相同tag值的就是同一个人的关节点
DeeperCut (Germany, 2017)[21]
![](https://filescdn.proginn.com/797debf5765a1b2490f814be347279f3/98bec0372065774ea58df1e37d271c8e.webp)
使用深层的ResNet架构来检测body part
使用image-conditioned pairwise terms来做优化,可以将众多候选节点减少,通过候选节点之间的距离来判断该节点是否重要
OpenPose (CMU, 2017)[22]
![](https://filescdn.proginn.com/29502ae08630cd4c5d13c972ec6b949f/575580f8a1f13570fab67e08d5e62eeb.webp)
网络结构基于CPM改进,网络包含两个分支,一个分支预测heatmap,另一个分支预测paf(part affine field),paf也是这项工作的关键所在。
paf是两个关节点连接的向量场,可以把它看做肢体,以paf为基础,把group的问题转化文二分图匹配(bipartite graph)的问题,使用匈牙利算法求解。
PersonLab (2018)[23]
![](https://filescdn.proginn.com/63cabcb608d3a4adc14bc124e22af735/1d964a8e2ec791fa72dbcfb1fc3379c8.webp)
short-range offsets to refine heatmaps
mid-range to predict pairs of keypoints
greedy decoding to group keypoints into instances
PifPaf (EPFL, 2019)[24]
![](https://filescdn.proginn.com/994c6ac24c20a9273b3a583ff0d0f7fd/5b1083085ff560a6cf14992c24ac5c52.webp)
从图中可以看出,网络基于ResNet,encoder最后输出两个分支,PIF和PAF向量场。
PIF向量场是17x5,其中17是关节数,5表示用于优化heatmap的值。
PAF向量场是19x7,其中19代表了19种肢体连接,7表示了confidence和offset来优化肢体向量的值。
关键点由PIF给出,关键点之间的连接由PAF给出,接下来就是使用Greedy Decoding进行group的过程了。
HigherHRNet (字节跳动,2020)[25]
![](https://filescdn.proginn.com/e48f47e3102480d039dc535bc6c41931/c21c07c840cf7a93361aef37db6e51c2.webp)
HRNet在bottom-up方法中的尝试,associative embedding加上更强大的网络。
4. 总结
好消息!
小白学视觉知识星球
开始面向外开放啦👇👇👇
下载1:OpenCV-Contrib扩展模块中文版教程 在「小白学视觉」公众号后台回复:扩展模块中文教程,即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。 下载2:Python视觉实战项目52讲 在「小白学视觉」公众号后台回复:Python视觉实战项目,即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。 下载3:OpenCV实战项目20讲 在「小白学视觉」公众号后台回复:OpenCV实战项目20讲,即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。 交流群
欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~