人体姿态估计-CPN(三)

人体姿态估计-CPN(三)

    • 资源链接
      • 论文
      • 代码
    • 论文个人解读
    • 模型结构
      • 网络特点
    • 算法效果

资源链接

论文出处:旷世科技(Face++)、2018CVPR

论文

论文

代码

tensorflow
pytorch

论文个人解读

这篇文章开发的多人姿态估计模型CPN级联金字塔网络,是2017年COCO人体关键点挑战赛的冠军,使用top-down策略,那么同样适用于单人姿态估计,在COCO测试集上取得mAP=73.0。
本算发聚焦点在于处理多人姿态估计所面临的挑战:关键点遮挡,关键点不可见,复杂背景等——就是优化对于难以检测的点的预测,即着重于处理 “hard” 关键点。思路就是detector先定位bbox,然后使用CPN检测关键点。

模型结构

模型分2个module:
人体姿态估计-CPN(三)_第1张图片

网络特点

1) CPN本体由两个module组成:GlobalNet和RefineNet

2) GlobalNet:是一个功能金字塔网络,对关键点进行粗提取,即能够成功地定位“简单”的非隐藏的关键点,并且无法准确识别被遮挡或看不见的关键点。具体为:假设使用ResNet50作为backbone(全文都是以ResNet50作为backbone),左边的四个实心方块就是ResN50的res2- res5(包含[3,4,6,3]个Residual block),右边的虚线方块就是特征融合的过程,不断通过上采样和elem-sum的过程做特征融合。共有4个层次,这样就会得到4个不同的结果,都需要计算loss,不同的层次对应groundtruth的heatmap使用的高斯核大小或者sigma大小不一样,文中根据实验来选择,通常使用7-15之间的奇数。

3) RefineNet:主要针对隐藏关键点,一方面通过整合来自GlobalNet的多尺度特征来丰富位置和语义信息,另一方面通过扩大感受野的方式以及在线的关键点难例挖掘损失(OHKM loss)来优化对难例关键点的检测。具体为:把GlobalNet提取到的4个层次特征分别经过一些bottleneck(也是使用Residual block)和一些不同倍数的上采样,然后在特征层上进行concat进行特征融合,最后再经过一个bottleneck,输出最后的结果,最后的结果是outputsize[0]*ouputsize[1]*num_points的形式,对于COCO数据集,num_points=17,output_size=64,48,共有17个feature map,每一个表示一个关键点信息。在feature map上的heatmap中热力值最大的点就表示对应的关键点。
以上是最终的结构,作者在确定前也做了大量实验,尝试过不加bottleneck直接上采样和concat,加一个bottleneck,提取GlobalNet输出4层的哪几层(C2-C5),如下图:
人体姿态估计-CPN(三)_第2张图片
人体姿态估计-CPN(三)_第3张图片
4) OHKM(Online Hard Keypoints Mining) : 在coco 数据集中有17个关键点需要预测,GolbalNet预测所有的17个点,并计算所有17个点的L2 loss,RefineNet也预测所有的17个点,但是只有最难的8个点的loss 贡献给总L2 loss。ohkm更关注与高层次的信息,而ohem更关注与困难样本。为啥选择8个,作者进行了对比实验,如下图:
人体姿态估计-CPN(三)_第4张图片
5) 损失函数:
GlobalNet采用L2 loss、RefineNet采用OHKM L2 loss
选择以上loss作者也进行了大量实验,如下:
人体姿态估计-CPN(三)_第5张图片

算法效果

同样在coco数据集上进行验证,效果如下:
人体姿态估计-CPN(三)_第6张图片

你可能感兴趣的:(人体姿态估计)