目录

  • 前言
  • 文章
    • 背景
    • 解决了什么问题
    • 主要思路
    • 方法
      • 多人姿态估计
      • CPN
        • GlobalNet
        • RefineNet
    • 实验
  • 总结

前言

本周进行了CPN算法思想的学习

文章

标题:Cascaded Pyramid Network for Multi-Person Pose Estimation
作者:Yilun Chen Zhicheng Wang Yuxiang Peng Zhiqiang Zhang Gang Yu Jian Sun

背景

论文提出提出了一种网络结构,能够对不可见的关键点,重叠的关键点,模糊难以辨识的关键点的检测,克服复杂背景的影响。

网络分为两部分:
GlobalNet:为一个FPN网络,用来检测比较简单的关键点,如眼睛,手;但对不可见的等较难的点判断并不是很好。
RefineNet:主要是用来检测非常难分辨的关键点,他的输入的GlobalNet的几个不同层次的特征来在线的对判断困难的关键点进行检测。

论文的方法获得了COCO 人体姿态点检测的2017年冠军,在COCO test-dev上的平均检测精度为73.0,在COCO test-challenge 数据集上平均检测精度 72.1,比2016年冠军的60.5高出了19%

解决了什么问题

多人姿态估计所面临的挑战,关键点遮挡,关键点不可见,复杂背景等提出的 Cascaded Pyramid Network (CPN) 方法,即着重于处理 “困难hard” 关键点

主要思路

下面这张图阐述了作者的网络设计思路,即一些比较容易识别出来的人体关键点,直接利用一个CNN模型就可以回归得到;而对于一些遮挡比较严重的关节点,则需要增大局部区域感受野以及结合上下文信息才能够进一步refine得到

方法

多人姿态估计

主要包括两部分

[1] - 人体边界框检测 Human Detector

[2] - 关键点估计 CPN

整体框架采用Top-down自上而下的检测策略。首先使用行人检测框架,先检测出行人候选框。然后使用本文的CPN网络对每一个检测出来的行人候选框进行人体关键点的回归,进而输出最终结果

CPN

主要包括两个子网络

GlobalNet

GlobalNet的输入并不是一幅图像,而是Resnet的4个blocks提取出的特征图,论文中分别以C2,C3,C4,C5来代表。其中C2,C3由于层数较浅,所以有很高的空间精度即能够很好的定位原图信息,但是语义信息不足;相反,C4,C5,拥有较高的语义信息,但是空间分辨率较低,不足以定位图像信息。所以,GlobalNet采用FPN的结构充分的利用各个层次的不同信息来对关键点的heatmap进行预测。GlobalNet与FPN稍有不同,在升采样(upsampling process)之后,两层相加之前,要再进行一次1×1的卷积操作

RefineNet

基于 GlobalNet 生成的特征金字塔表示,再添加 RefineNet,定位 “hard” 关键点.RefineNet 利用了不同层的特征信息,并通过类似于 HyperNet 的上采样和链接,整合不同层的特征信息.
stacked Hourglass 网络仅利用了 hourglass 模块尾部输出的上采样特征,而 RefineNet 链接了所有层的金字塔特征.对困难关键点进行定位,此处的困难关键点由训练决定,根据globalnet的loss大小决定哪几个关键点成为困难关键点,并不是人为的决定

def create_refine_net(blocks, is_training, trainable=True):#global_fms 即 blocksinitializer = tf.contrib.layers.xavier_initializer()bottleneck = resnet_v1.bottleneckrefine_fms = []for i, block in enumerate(blocks):mid_fm = blockwith slim.arg_scope(resnet_arg_scope(bn_is_training=is_training)):for j in range(i):mid_fm = bottleneck(mid_fm, 256, 128, stride=1, scope='res{}/refine_conv{}'.format(2+i, j)) # no projectionmid_fm = tf.image.resize_bilinear(mid_fm, (cfg.output_shape[0], cfg.output_shape[1]),name='upsample_conv/res{}'.format(2+i))refine_fms.append(mid_fm)refine_fm = tf.concat(refine_fms, axis=3)  ##此处的操作的是concat!!!!with slim.arg_scope(resnet_arg_scope(bn_is_training=is_training)):refine_fm = bottleneck(refine_fm, 256, 128, stride=1, scope='final_bottleneck')res = slim.conv2d(refine_fm, cfg.nr_skeleton, [3, 3],trainable=trainable, weights_initializer=initializer,padding='SAME', activation_fn=None,scope='refine_out')return res

模型图

实验

datasets:使用MS COCO trainval dataset(包含57k images and 150k person instances)和验证集:MS COCO minival dataset (includes 5000 images);测试集:test-dev set (20K images) and test-challenge set (20K images)

裁剪策略:
对于每个人体检测边界框,扩展到保持固定的长宽比,如 height:width = 156:192;
然后不改变长宽比的进行裁剪;
最后,将裁剪的图片 resize 到固定尺寸:height - 256 px;width - 192 px.

数据增强策略:
数据增强对于尺度不变性和旋转不变性很重要.
图片裁剪后,随机翻转(random flip),随机旋转(random rotation, -45 ~ + 45),随机尺寸变换(random scale, 0.7-1.35).

训练细节:
Adam 算法.
初始学习率 5e-4. 每 360000 次迭代,学习率减少 2x.weight decay = 5.
batchsize = 32.
BatchNormalization.
在 8 张 Titan X GPUs 上,ResNet50 模型的训练耗时 1.5 天左右.
采用 ImageNet 预训练模型进行参数初始化.

测试细节:(这一部分还没了解完全)
预测的 heatmaps 进行 gaussian filter 处理,最小化预测方差.
同时预测翻转图片的关键点估计,平均化 heatmaps 得到最终预测结果.
使用从最高响应到第二最高响应的方向上的四分之一偏移量来作为关键点的最终位置(a quarter offset in the direction from the highest response to the second highest response is used to obtain the final location of the keypoints.)
重新定位策略(Rescoring):人体框的 score 和所有关键点的平均 score 的乘积作为人体实例的最终 score.

Experiments

table3:可以看到cpn网络可以取得AP:69.4的效果

table4:该实验说明在refinenet阶段,每个层级的特征使用不同个数的boottleneck块,达到的检测效果

table5:该实验说明,使用哪几层的特征可以达到良好的效果

table6:该实验说明在refineNet中计算loss后选取M个loss作为网络的训练,下表中可以看到不同的M值,该网络得到的不同的AP值

table7:下表说明,在CPN网络中,采用不同的loss形式带来的检测效果,可以看到GlobalNet中采用L2 loss,RefineNet中采用L2 loss *,cpn网络可以达到最优的效果

总结

通过GlobalNet网络,可以对简单的点进行有效的关键点检测,但是对于不可见的关键点的检测,效果仍然不佳,RefineNet可以利用了不同层的特征信息,并通过类似于 HyperNet 的上采样和链接,整合不同层的特征信息,进行在线关键点挖掘。作者将检测点通过两个阶段的网络进行检测,这种想法很值得我们学习。CPN的主要思想就是在保持高分辨率图像的同时既可以保留大人物的特征,也可以保留小人物的特征,所以采用级联金字塔模型,将下层信息和上层信息进行融合。之前看的resnet和simple baseline都是想要实现这个效果,感觉这篇论文对于人体姿态估计的研究思想有很大帮助,和之前读的文章都联系起来了。自己理解的更深刻了。但是自己对于模型的训练和测试只是看了代码还没有自己实现过,这周想着重点完成一下整个流程,从数据处理开始,每一个阶段自己都尝试做一遍。

10.31周报-人体姿态估计CPN相关推荐

  1. 空间金字塔池化_CVPR 2018 | 旷视科技人体姿态估计冠军论文——级联金字塔网络CPN...

    全球计算机视觉顶会 CVPR 2018 (Conference on Computer Vision and Pattern Recognition,即IEEE国际计算机视觉与模式识别会议)将于6月1 ...

  2. Paperreading 之二 多人人体姿态估计COCO2017冠军—CPN(含TF和torch实现)

    版权声明:遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/baolinq/article/details/839934 ...

  3. 论文阅读笔记--Monocular Human Pose Estimation: A Survey of Deep Learning-based Methods 人体姿态估计综述

    趁着寒假有时间,把之前的论文补完,另外做了一点点笔记,也算是对论文的翻译,尝试探索一条适合自己的论文阅读方法. 这篇笔记基本按照原文的格式来,但是有些地方翻译成中文读起来不太顺,因此添加了一些自己的理 ...

  4. 特效大片背后的多视角 3D 人体姿态估计技术

    目录 0 背景 1 主要算法 1.1 基于匹配和三角化重建的算法 1.2 基于空间体素化的算法 1.3 基于图卷积网络的算法 1.4 基于 Transformer 的算法 2 常用数据集 2.1 Ca ...

  5. 刷新记录,算法开源!字节跳动获人体姿态估计竞赛双冠 | CVPR 2019

    整理 | Jane 出品 | AI科技大本营(id:rgznai100) [导读]6 月 16--20 日,计算机视觉与模式识别领域顶会 CVPR 2019 在美国长滩举行.每年的 CVPR 盛会除了 ...

  6. “看墙之外” ——遮挡下的人体姿态估计

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 在过去的许多科幻电影中,能够看到墙外的东西被认为是超能力.2011 ...

  7. 3D 人体姿态估计简述

    0 前言 3D Human Pose Estimation(以下简称 3D HPE )的目标是在三维空间中估计人体关键点的位置.3D HPE 的应用非常广泛,包括人机交互.运动分析.康复训练等,它也可 ...

  8. 3D人体姿态估计论文汇总(CVPR/ECCV/ACCV/AAAI)

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者:Vegetabird | 来源:知乎 https://zhuanlan.zhihu.com/p/ ...

  9. 3D 人体姿态估计简述【转】

    0 前言 3D Human Pose Estimation(以下简称 3D HPE )的目标是在三维空间中估计人体关键点的位置.3D HPE 的应用非常广泛,包括人机交互.运动分析.康复训练等,它也可 ...

最新文章

  1. 一次微服务与IoT的深度探秘与实战
  2. [svc]ext4文件删除访问原理
  3. 【struts2+hibernate+spring项目实战】实现用户登录功能(ssh)
  4. MAC电脑安装Python3下的Jupyter Notebook
  5. DatePickerDialog日期对话框以及回调函数的用法
  6. 剑指offer不用加减乘除做加法_剑指Offer-不用加减乘除做加法
  7. 京东一面:说出ThreadLocal的使用场景及使用方式
  8. 计算机考研补录,考研补录是什么意思 需要考试吗
  9. JavaScript数据类型之算术运算符(7)
  10. SAP恭贺德国国家足球队夺冠!
  11. 关于达梦监视器dmmonitor的一些知识
  12. Linux: Manjaro/Arch logiops 罗技鼠标驱动安装教程
  13. Arduino 系列传感器应用
  14. 论文阅读笔记《CODE: Coherence Based Decision Boundaries for Feature Correspondence》
  15. Java 求解加油站
  16. UE4 Pak相关:加载Pak内模型Mesh/SkMesh没有材质
  17. js 绘画js 绘画路径_绘画是一种技能,而不是才能
  18. js - 数学运算(取整,取余)
  19. 哪几款车型?适合狮子座的车友?
  20. Python——定义全局变量

热门文章

  1. RealView MDK
  2. LGT公益创投(中国)基金项目介绍
  3. 网页表格线框html,网页表格中单元格线条及边框的设置
  4. Python获取多核CPU温度 均值
  5. 网站徽章shields制作教程
  6. Kotlin - 改良构建者模式
  7. 腐蚀rust服务器命令_腐蚀Rust游戏指令大全 全游戏指令一览
  8. 开源任务管理平台TaskManager介绍
  9. 2019-11-11
  10. 如何关闭Mybatis的DEBUG log打印