Realtime Multi-Person 2D Pose Estimation Using Part Affinity Fields

2023-11-08

Realtime Multi-Person 2D Pose Estimation Using Part Affinity Fields

1.文章概要

文章实现了图片中的多人姿态检测,与已有的方法相比,最大的优势在于检测的速度对人物的数量不敏感,在保持检测精度的情况下大幅提升了速度。
怎样快速的理解本文的内容,我尝试着讲下面一个故事:

有一张照片上有很多人在摆pose,老师正要给小朋友们讲这些人都在摆什么姿势。突然,一个叫VGG19的熊孩子把照片给撕得七零八碎。为了恢复出照片上的姿势信息,于是老师找来一些好朋友帮忙。

首先来帮忙的是分别叫CNN_S和CNN_L的两个闺蜜。CNN_S负责从碎片中把身体关节部位(头、肩、胳膊肘等)识别出来,并且按照关节部位将所有人的同一关节点坐标记录一个热图中。CNN_L擅长识别肢体部分(大臂、小臂…),同样,她也要把所有的人同一肢体记录到一张图像中。需要提醒的是:CNN_L只是判断出碎片里是否有肢体,无法判断肢体两端是胳膊肘还是膝盖,

下面的任务就是如何把肢体两端的关节点连接起来,并且最终拼接成人骨架结构,以表示当前人的姿势。

这个任务就交给了帕森(Parsing)大叔,大叔先拿了两张位置相连的关节热图(例如肩膀和胳膊肘的热图),根据CNN_L提供的肢体图,找到两张热图中最可能的关节对应关系。这个关节点的连线就带表了一个肢体。然后大叔重复按照此方法把身体的其他肢体都逐一找到,最后把这些找到的肢体按照位置关系进行拼接,就实现了图中所有人物姿势的还原。

好了,故事结束,希望这个故事能够对文章的理解产生一点帮助。下面介绍一下本文的亮点。

2.文章亮点

目前,已经有了许多关于检测的工作。许多的检测方式都是先想办法检测出身体的部位的关节点,然后再连接这些部位点得到人的姿态骨架。
本文的工作差不多也是这个套路,但是为了快速的把点连到一起,提出了Part Affinity Fields这个概念来实现快速的关节点连接。
在这里插入图片描述上图展示了文章进行多人姿态检测的效果,下栏的子图展示了文章的亮点–Part Affinity Fields(部分亲和字段<求更好的翻译>)。Part Affinity Fields的关键作用就是可以实现一段躯干(limb)两端(part)的快速匹配。

个人理解: Part Affinity Fields就是一个向量,该向量代表了身体的一段躯干(如白花花的大腿…)

好了,文章的亮点介绍完了,下面介绍文章的主要内容。我认为,这篇文章主要工作就是要用CNN在图片中检测两个东东:

  1. Part(关节点 或 身体部位) — Part Confidence Maps
    例子:头、肩膀、胳膊肘……
  2. Part Affinity(肢体段)检测 — Par Affinity Fields
    例子:大臂(不包含肩膀和胳膊肘)

3.姿势识别流程

在这里插入图片描述

处理过程:图片->10 layers of VGG-19 -> two branch of CNN –> part confidenceSt & part affinity fields Lt -> parsing -> pose

在这里插入图片描述
好了,下面进入文章的核心:two branch CNN Networks

4.网络详解

本文使用了反复迭代的CNN网络进行检测,每个CNN网络都有两个分支,即闺蜜CNN_S和CNN_L,如下图所示:
在这里插入图片描述
如图所示,本文所介绍的网络是一个不断迭代的网络连接。第1阶段和后续阶段的网络在形态上有所区别。每个阶段的两个网络分支分别用于计算部位置信图(Part Confidence Maps, 即关节点)和部位亲和域(Part Affinity Fields, 即肢体躯干)。

从图中还可以看出,网络的第1个阶段接收的输入是特征F,经过网络的处理后分别得到S1和L1。从第2阶段开始,阶段tt网络的输入包括三部分: St−1,Lt−1,F。每个阶段网络的输入为:
在这里插入图片描述
这样反复迭代,直到网络变得收敛。下图展示了CNN的两个分支计算的结果。

在这里插入图片描述
左边大图是待处理的原图,右边是处理后的结果。
其中,右上一栏图代表了检测到的关节点(Part),这就是St,江湖人称关节点置信图(Part Affinity Fields)。实际操作时,一个部位对应了一张置信图,请注意图中高亮像素。
右下一栏代表了一段躯干(图中是麒麟臂,也可以理解那条白花花的大腿),即Lt,文中给他取的名字叫Part Affinity Fields。同样,有多少个躯干就有多少个PAFs。

4.1 网络收敛性判断

为了判断网络是否收敛,文中定义了网络的损失函数:
在这里插入图片描述
W(P)是干啥的呢?因为数据的标注可能不完全,有些关节点没有被正确的标注上,就会导致上面公式中的Sj∗(p)和Lc∗(p)的值为0,从而导致损失函数的值特别大。这种情况下,令W(p)=0,从而避免这种情况的出现。

那么,为了计算损失函数,首先得计算Sj∗(p)和Lc∗(p)。即身体部位(part)和连接向量(affinity)的Groudtruth。

下面就开始介绍如何计算这俩哥们。

4.2 计算S∗j(p)

Sj∗(p)实际上就是求出一张图像上身体 j 部位分布置信图(也称热点图)(请注意:左右两边图像是不同部位的热点图)
在这里插入图片描述
一个部位置信计算符合高斯分布,一张图像上有多个部位,所以是个多峰的高斯分布。(一个波峰就代表了一个胳膊肘就好) 。
在这里插入图片描述

4.3 计算L∗c(P)在这里插入图片描述

如上图所示,如果在图像中确定某人(k)一段手臂(标记为c),那么这幅图中任意位置p的 Lc∗§为:在这里插入图片描述

4.4 如何评估评估两点相连的可能性

前面说过,Part Affinity Fields的关键作用是用于判断两个部位是否相连,那他是怎么实现的呢?请看下面的公式:
在这里插入图片描述
dj1 和 dj2 分别是两个部位的位置(姑且认为是膝盖与踝关节坐标),如何判断这两点连起来就是一个躯干(白花花的小腿)?

解决方案就是计算从 dj1 与 dj2 连线上的线性积分。其中,p(u) 就是从 dj1 到 dj2 连线上的任意一点。
可见,如果 dj1→dj2 方向与L∗c(p)的方向一致,E的值就会很大,说明该位置是一个躯干的可能性就非常大。

5. 关节拼接

上一节讲了熊孩子把照片撕成了许多碎片,CNN_S和CNN_L阿姨费了老大劲从这些碎片中所有的身体部位(头、胳膊肘)和躯干(白花花的小腿)给找了出来。但是怎样将这些身体部位和躯干给正确的拼接起来呢?这时就要祭出我们的帕森(Parsing)大叔了( Section 2.4),事情的经过是这样的:
在这里插入图片描述
如上图所示,(a)被熊孩子撕掉的另一张照片,CNN阿姨在碎片中找到了肩膀( j1 )、胳膊肘( j2 )、手腕( j3 )的碎片,并将这些部位分别放到了3张照片里。帕森大叔任务就是要确保把图中每个人不同部位给正确的联结起来。他做了一下尝试:

5.1 拼接方法尝试

5.1.1 如图(b)所示,帕森大叔遍历了每张图片中的所有部位点,生成了一张全连接图。显然,要在这样的一张全连接图中把小明和小红的身体骨架给找出来是很难的,因为这是一个NP问题。此路不通!
5.1.2 如图©所示,根据不同部位的空间关系,帕森大叔把全连接进行了精简,仅保留有连接可能的边,(例如:胳膊肘肯定跟肩膀连接但必定不跟屁股相连。)这是一个K维匹配问题,仍然是NP-hard。放弃!
5.1.3 如图(d)所示,换个思路,从部位点出发把人的骨架搭起来是行不通,那就从躯干开始。例如,大臂的两端一定是肩膀和胳膊肘,那么就先把所有的肩膀和胳膊肘的连接图中进行搜索,因为有了PAFs的信息支撑,那么就可以很快把小明和小红的大臂分别找出来。然后,再分别找出小臂、小腿等其他躯干,再将这些躯干组合到一起形成人物姿势,问题就大大的被简化。

5.2 拼接过程

第一步,找出图中所有的小腿。下面的公式告诉我们该如何找小腿。
在这里插入图片描述
在这里插入图片描述
用zmnj1j2=1 来表示把膝盖(j1j1)置信图中点 m 和脚( j2 )置信图点 n 连接起来的一个可能肢体搭配,Emn 计算这样一个搭配的积分结果(依赖于 Lt )。zmnj1j2=0 表示点 m和 n 不构成一个搭配。遍历所有的搭配,计算积分和。最终选择积分和最大的搭配组合代表原始图像中的所有小腿。
第二步,按照第一步的方法,分别去找出大臂、小臂、腰腹…
第三步,两个相邻的躯干必定有共享关节点,通过关节点再把所有的躯干结合起来,就可以得到所有人的身体骨架啦!

再者,第一步和第二步中,不管一张图片有多少个人,先一股脑的把各个躯干给连起来,最后拼接起来就可以简单得到所有人的姿态,这就是自底向上(bottom-up)的实现过程。

:由于本人还不是老司机,所以本博里的一些图片和公式都直接来自于原文。
:本博大量的内容来自于这个链接,因为该作者简单形象的描述了这个网络结构,便于理解;但苦于转载有点麻烦,所以直接复制下来以便以后阅读。这里着重强调,并给出其链接!链接在这里

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Realtime Multi-Person 2D Pose Estimation Using Part Affinity Fields 的相关文章

  • vue使用mock模拟后台接口返回数据

    一 项目引入mock依赖 npm install mockjs save 或 cnpm install mockjs save 二 准备数据文件和模拟接口的文件 1 src 文件夹下新建 mock 文件夹 2 在 mock 文件夹下新建 m
  • spring源码阅读一:spring初始化容器时扫描package的过程

    注 spring version 4 2 0 RELEASE 首先 spring 管理注解bean容器主要是 AnnotationConfigApplicationContext org springframework context an
  • 解析Qt的ui_*.h文件

    mainwindow h常见的几行 namespace Ui class MainWindow private Ui MainWindow ui mainwindow cpp常见的几行 include ui mainwindow h Mai
  • MQTT协议实现Eclipse Paho学习总结一

    http blog csdn net yangzl2008 article details 8861069 一 概述 遥测传输 MQTT 是轻量级基于代理的发布 订阅的消息传输协议 设计思想是开放 简单 轻量 易于实现 这些特点使它适用于受
  • C++继承,语法+案例,超详细!!

    类的继承 继承是代码重用的一种方法 通过继承创建的新类称为 派生类 或 子类 被继承的类称为 基类 或 父类 继承即子类无需重新编写父类成员代码的情况下继承父类所有的成员 子类只需书写新增成员的代码 语法 class 子类名 继承方式 父类
  • echo打印颜色

    Linux echo命令打印带有颜色的字 一 命令格式如下 echo e 033 字背景颜色 文字颜色m字符串 033 0m 例如 echo e 033 47 30m I love Android 033 0m 其中47的位置代表背景色 3
  • 仓库管理系统GreaterWMS的安装

    本文是应网友 ubuntu 和 Nathan 要求写的 因为看起来 Nathan 比较着急 就突击了一下 因为时间仓促 错误在所难免 敬请谅解 什么是 GreaterWMS GreaterWMS是完全开源的仓库管理系统 该库存管理系统是目前
  • 云平台学习笔记(三)-MobaXterm使用

    内网 外网的IP都可以 这个界面方面可视化管理
  • MATLAB数据关联性(相关性)分析

    分析某个因素与其它因素之间的关联强弱 举个例子X0 X1 X2 X3 X4 X5分别代表热效率 煤气流量 空气流量 热值 蒸汽流量 给水流量 这里分析X1 X2 X3 X4 X5与X0的关联度 定义如下 图片摘自知乎 X0 xlsread
  • qgis导入在线地图网址

    https webst01 is autonavi com appmaptile style 3D6 26x 3D 7Bx 7D 26y 3D 7By 7D 26z 3D 7Bz 7D zmax 18 zmin 0 type xyz url
  • TortoiseGit 入门指南14:比较差异

    版本控制系统最常见的应用是查看发生了哪些变化 Git 通过比较两个 文件 或者两个 提交 的 差异 differences 来实现这个功能 对于文本文件 TortoiseGit 提供了名为 TortoiseGitMerge 的内置工具来查看
  • 图像梯度(微分)及其MATLAB求解

    1 一阶梯度 MATLAB中的gradient 函数 实现的是中心梯度 2 二阶梯度 h fspecial laplacian 获得的模板是 h 0 1667 0 6667 0 1667 0 6667 3 3333 0 6667 0 166
  • java压缩文本内容

    java压缩文本内容工具类如下 package com my util import java io ByteArrayInputStream import java io ByteArrayOutputStream import java
  • 【压测系】1.apifox 自动化压测示例

    作为后端程序员 之前使用过的接口调试工具postMan restclient等 近期看到csdn右边的小广告弹窗 我这边无意之间点击打开下载之后 被它的很多功能一下子 吸引住了 比如有压测工具的功能 自动化测试 团队协作 重要的是不收费 为
  • mysql基础,快来复习一波!

    mysql基础 快来复习一波 一 数据库服务的启动与登录 1 1 通过服务的方式启动 1 2 手动启动的方式 1 3 控制台连接数据库 1 3 1 登录格式1 u和p后面没有空格 1 3 2登录格式2 1 3 3 登录格式3 1 3 4退出
  • 49天精通Java,第12天,Java接口的作用和意义

    作者简介 哪吒 CSDN2022博客之星Top1 CSDN2021博客之星Top2 多届新星计划导师 博客专家 专注Java硬核干货分享 立志做到Java赛道全网Top N 本文收录于Java基础教程 入门篇 包含面向对象 基本数据类型 数
  • vue 自定义函数

    vue 自定义函数 存储localStorage export const setStore name content gt if name return if typeof content string content JSON stri
  • Chisel基础之Scala

    前言 Scala is yet another programming language which supports common programming paradigms We chose to use it for several
  • 格式装换到OFD

    https www yozodcs com page example html

随机推荐