人体姿态估计学习

人体姿态估计

1.绪论

人体姿态估计是计算机视觉中一个很基础的问题。从名字的角度来看,可以理解为对“人体”的姿态(关键点,比如头,左手,右脚等)的位置估计。

一般我们可以这个问题再具体细分成4个任务:

  • 单人姿态估计 (Single-Person Skeleton Estimation)
  • 多人姿态估计 (Multi-person Pose Estimation)
  • 人体姿态跟踪 (Video Pose Tracking)
  • 3D人体姿态估计 (3D Skeleton Estimation)

2.单人姿态估计

2.1 简介

单人姿态估计: 输入是一个crop出来的行人,然后在行人区域位置内找出需要的关键点,比如头部,左手,右膝等。

常见的数据集:MPII, LSP, FLIC, LIP。

其中MPII是2014年引进的,目前可以认为是单人姿态估计中最常用的benchmark, 使用的是PCKh的指标(可以认为预测的关键点与GT标注的关键点经过head size normalize后的距离),最高93.9%。

单人姿态估计的结果图(图片来源于CPM的paper):

**多人姿态估计:**多人姿态估计的输入是一张整图,可能包含多个行人,目的是需要把图片中所有行人的关键点都能正确的做出估计。

针对这个问题,一般有两种做法,分别是top-down以及bottom-up的方法。

  • top-down的方法,往往先找到图片中所有行人,然后对每个行人做姿态估计,寻找每个人的关键点。单人姿态估计往往可以被直接用于这个场景。
  • bottom-up,思路正好相反,先是找图片中所有parts (关键点),比如所有头部,左手,膝盖等。然后把这些parts(关键点)组装成一个个行人。

对于测试集来讲,主要有COCO, 最近有新出一个数据集CrowdPose。

如果把姿态估计往视频中扩展的话,就有了人体姿态跟踪的任务。主要是针对视频场景中的每一个行人,进行人体以及每个关键点的跟踪。这个问题本身其实难度是很大的。相比行人跟踪来讲,人体关键点在视频中的temporal motion可能比较大,比如一个行走的行人,手跟脚会不停的摆动,所以跟踪难度会比跟踪人体框大。目前主要有的数据集是PoseTrack。

同时,如果把人体姿态往3D方面进行扩展,输入RGB图像,输出3D的人体关键点的话,就是3D 人体姿态估计。这个有一个经典的数据集Human3.6M。最近,除了输出3D的关键点外,有一些工作开始研究3D的shape,比如数据集DensePose。

2.2 传统人体姿态估计

这部分主要用于描述在深度学习之前,如何处理人体姿态估计这个问题。从算法角度来讲,这部分的工作主要是希望解决单人的人体姿态估计问题,也有部分工作已经开始尝试做3D的人体姿态估计。可以粗略的方法分成两类。

第一类:直接通过一个全局feature,把姿态估计问题当成分类或者回归问题直接求解 。但是这类方法的问题在于精度一般,并且可能比较适用于背景干净的场景。

第二类:基于一个graphical model,比如常用pictorial structure model。一般包含unary term,是指对单个part进行feature的representation,单个part的位置往往可以使用DPM (Deformable Part-based model)来获得。 同时需要考虑pair-wise关系来优化关键点之间的关联。基于Pictorial Structure,后续有非常多的改进,要么在于如何提取更好的feature representation , 要么在于建模更好的空间位置关系。

总结一下,在传统方法里面,需要关注的两个维度是: feature representation以及**关键点的空间位置关系。**特征维度来讲,传统方法一般使用的HOG, Shape Context, SIFT等shallow feature。 空间位置关系的表示也有很多形式,上面的Pictorial structure model可能只是一种。

这两个维度在深度学习时代也是非常至关重要的,只是深度学习往往会把特征提取,分类,以及空间位置的建模都在一个网络中直接建模,所以不需要独立的进行拆解,这样更方便设计和优化。

2.3 基于深度学习的人体姿态估计

从2012年AlexNet开始,深度学习开始快速发展,从最早的图片分类问题,到后来的检测,分割问题。在2014年,第一次成功引入了CNN来解决单人姿态估计的问题。因为当时的时代背景,整体网络结构比较简单,同时也沿用了传统骨架的思路。首先是通过slide-window的方式,来对每个patch进行分类,找到相应的人体关键点。因为直接sliding-window少了很多context信息,所以会有很多FP的出现。所以在pipeline上面加上了一个post-processing的步骤,主要是希望能抑制部分FP,具体实现方式是类似一个空间位置的模型。所以从这个工作来看,有一定的传统姿态估计方法的惯性,改进的地方是把原来的传统的feature representation改成了深度学习的网络,同时把空间位置关系当成是后处理来做处理。总体性能在当时已经差不多跑过了传统的姿态估计方法。2014年的另外一个重要的进展是引入了MPII的数据集。此前的大部分paper都是基于FLIC以及LSP来做评估的,但是在深度学习时代,数据量还是相对偏少(K级别)。MPII把数据量级提升到W级别,同时因为数据是互联网采集,同时是针对activity来做筛选的,所以无论从难度还是多样性角度来讲,都比原来的数据集有比较好的提升。

一直到2016年,随着深度学习的爆发,单人姿态估计的问题也引来了黄金时间。这里需要重点讲一下两个工作,一个工作是Convolutional Pose Machine (CPM),另外一个是Hourglass

2.3.1 CPM

CPM是CMU Yaser Sheikh组的工作,后续非常有名的openpose也是他们的工作。

  • 从CPM开始,神经网络已经可以e2e的把feature representation以及关键点的空间位置关系建模进去(隐式的建模),输入一个图片的patch, 输出带spatial信息的tensor,channel的个数一般就是人体关键点的个数(或者是关键点个数加1)。空间大小往往是原图的等比例缩放图。通过在输出的heatmap上面按channel找最大的响应位置(x,y坐标),就可以找到相应关键点的位置。

  • heatmap的方式被广泛使用在人体骨架的问题里面。这个跟人脸landmark有明显的差异,一般人脸landmark会直接使用回归(fully connected layer for regression)出landmark的坐标位置。首先人脸landmark的问题往往相对比较简单,对速度很敏感,所以直接回归相比heatmap来讲速度会更快,另外直接回归往往可以得到sub-pixel(亚像素)的精度,但是heatmap的坐标进度取决于在spatial图片上面的argmax操作,所以精度往往是pixel级别(同时会受下采样的影响)。 但是heatmap的好处在于空间位置信息的保存,这个非常重要。一方面,这个可以保留multi-modal的信息,比如没有很好的context信息的情况下,是很难区分左右手的,所以图片中左右手同时都可能有比较好的响应,这种heatmap的形式便于后续的cascade的进行refinement优化。另外一个方面,人体姿态估计这个问题本身的自由度很大,直接regression的方式对自由度小的问题比如人脸landmark是比较适合的,但是对于自由度大的姿态估计问题整体的建模能力会比较弱。相反,heatmap是比较中间状态的表示,所以信息的保存会更丰富。

    后续2D的人体姿态估计方法几乎都是围绕heatmap这种形式来做的(3D姿态估计将会是另外一条路),通过使用神经网络来获得更好的feature representation,同时把关键点的空间位置关系隐式的encode在heatmap中,进行学习。大部分的方法区别在于网络设计的细节。先从CPM开始说起。整个网络会有多个stage,每个stage设计一个小型网络,用于提取feature,然后在每个stage结束的时候,加上一个监督信号。中间层的信息可以给后续层提供context,后续stage可以认为是基于前面的stage做refinement。这个工作在MPII上面的结果可以达到88.5,在当时是非常好的结果。

2.3.2 Hourglass

在2016年的7月份,Princeton的Deng Jia组放出了另外一个非常棒的人体姿态估计工作,Hourglass。后续Deng Jia那边基于Hourglass的想法做了Associate Embedding,以及后续的CornerNet都是非常好的工作。Hourglass相比CPM的最大改进是网络结构更简单,更优美。

pipeline上面跟CPM很类似。只是结构做了修改。从MPII上的结果来看,也有明显的提升,可以达到90.9的PCKh。这种u-shape的结构其实被广泛应用于现代化的物体检测,分割等算法中,同时结果上面来讲也是有非常好的提升的。另外,Hourglass这种堆多个module的结构,后续也有一些工作follow用在其他任务上面。但是Hourglass也是存在一些问题的,具体可以看后续讲解的MSPN网络。

在CPM以及Hourglass之后,也有很多不错的工作持续在优化单人姿态估计算法。2016年的下半年还出现了一个非常重要的数据集: COCO。这个时间点也是非常好的时间点。一方面,MPII已经出现两年,同时有很多非常好的工作,比如CPM, Hourglass已经把结果推到90+,数据集已经开始呈现出一定的饱和状态。另外一方面,物体检测/行人检测方面,算法提升也特别明显,有了很多很好的工作出现,比如Faster R-CNN和SSD。所以COCO的团队在COCO的数据集上面引入了多人姿态估计的标注,并且加入到了2016年COCO比赛中,当成是一个track。从此,多人姿态估计成为学术界比较active的研究topic。正如前面我在“问题”的部分描述的,多人姿态估计会分成top-down以及bottom-up两种模式。我们这边会先以bottom-up方法开始描述。

2.4 bottom-up算法

2.4.1 OpenPose

在2016年COCO比赛中,当时的第一名就是OpenPose 。 CMU团队基于CPM为组件,先找到图片中的每个joint的位置,然后提出Part Affinity Field (PAF)来做人体的组装。

PAF的基本原理是在两个相邻关键点之间,建立一个有向场,比如左手腕,左手肘。我们把CPM找到的所有的左手腕以及左手肘拿出来建立一个二分图,边权就是基于PAF的场来计算的。然后进行匹配,匹配成功就认为是同一个人的关节。依次类别,对所有相邻点做此匹配操作,最后就得到每个人的所有关键点。在当时来讲,这个工作效果是非常惊艳的,特别是视频的结果图,具体可以参考Openpose的Github官网。在COCO的benchmark test-dev上面的AP结果大概是61.8。

2.4.2 Hourglass + Associative Embedding

在2016年比赛的榜单上面,还有另外一个很重要的工作就是Deng Jia组的Associative Embedding[13]。文章类似Openpose思路,使用bottom-up的方法,寻找part使用了Hourglass的方式来做。关键在于行人的组装上面,提出了Associative Embedding的想法。大概想法是希望对每个关键点输出一个embedding,使得同一个人的embedding尽可能相近,不同人的embedding尽可能不一样。

参考

人体姿态估计的过去,现在,未来 - 知乎 (zhihu.com)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/7666.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小米手机短信删除了怎么恢复?这里教你快速解决!

手机已经成为我们生活中不可或缺的一部分,比如小米手机。我们通过手机进行通讯、娱乐、学习等各种活动,其中,短信是我们日常生活中的重要信息来源之一。然而,我们可能会不小心删除了一些重要的短信,这时候我们就会想知…

领航法律科技,法大大多年深耕再获认可!

近日,“乘势破局 第八届新兴法律服务业高峰论坛”在上海隆重举行。作为国内领先的电子签厂商,法大大凭借在法律科技领域的多年深耕与沉淀,荣获“法律科技领航机构”称号。 据悉,新兴法律服务业高峰论坛作为国内首个聚焦“新兴法律…

高等数学笔记(下中)

曲线积分 第一类曲线积分:对弧长的积分计算方法 定理:设 f ( x , y ) f(x,y) f(x,y)在曲线弧 L L L上有定义且连续, L L L的参数方程是 { x φ ( t ) y ψ ( t ) ( α ≤ t ≤ β ) \begin{cases} x\varphi(t)\\ y\psi(t) \end{cases}(\a…

一文了解什么是SSL证书?——值得收藏

SSL证书,全称Secure Sockets Layer证书,是一种网络安全协议的实现方式,现在通常指的是其继任者TLS(Transport Layer Security)证书,不过习惯上仍称为SSL证书。它的主要作用是确保互联网上的数据传输安全&am…

WebStorm2024版 将项目上传到gitee

目录 一、准备 WebStorm gitee 二、上传代码到Gitee 三、过程中遇到的问题 报错:You may want to first integrate the remote changes (e.g., git pull ...) before pushing again. 报错:fatal: refusing to merge unrelated histories 报错&a…

机器人系统ros2-开发实践05-ROS2 中 tf2的定义及示例说明

1. what ros2 tf2 ? tf2的全称是transform2,在ROS(Robot Operating System)中,它是专门用于处理和变换不同坐标系间位置和方向的库。这个名字来源于“transform”这个词,表示坐标变换,而“2”则…

如何判断代理IP质量?

由于各种原因(从匿名性和安全性到绕过地理限制),代理 IP 的使用变得越来越普遍。然而,并非所有代理 IP 都是一样的,区分高质量和低质量的代理 IP 对于确保流畅、安全的浏览体验至关重要。以下是评估代理 IP 质量时需要…

上升实用的Chrome浏览器命令

Chrome浏览器提供了一系列实用的命令行参数,这些参数可以在启动浏览器时使用,或者在Windows系统上通过命令提示符或PowerShell使用。以下是一些常用的Chrome浏览器命令: 1. **-incognito**:打开一个新的隐身窗口。隐身模式下&…

前端递归常见应用

概览 在 JavaScript 中,递归是一种编程技术,指的是函数直接或间接调用自身的过程。 递归通常用于解决可以分解为相同子问题的问题。通过不断地将问题分解成更小的、相似的子问题,直到达到某种基本情况(不再需要进一步递归的简单情…

C语言 main( ) 函数的指针数组形参是怎么回事?

一、问题 在使⽤⼀些开发⼯具⽣成C语⾔⽂件时,主函数 mian( ) 中会有参数,这个参数到底是怎么回事⼉呢? 二、解答 mian( ) 称为主函数,是所有程序运⾏的⼊口。 mian( ) 函数是由系统调⽤的,当处于操作命令状态下&…

【算法】滑动窗口——最大连续1的个数

本篇文章讲的是“最大连续1的个数”这道题,从最开始的简单暴力到用滑动窗口算法实现解题的思路历程,有需要借鉴即可。 目录 1.题目2.暴力求解3.滑动窗口解法3.1优化一:end重返start优化,end指针不回退3.2优化二:某一st…

invokeMethod 在 Flutter 中的使用场景与详解

在 Flutter 开发中,我们经常需要与原生平台(Android 或 iOS)进行交互,以实现一些平台特有的功能。invokeMethod 是 Flutter 提供的一个非常重要的 API,它允许我们通过 MethodChannel 与原生平台通信,并调用原生平台定义的方法。本文将详细介绍 invokeMethod 的使用场景、…

深入了解Process Exporter:Prometheus进程监控利器

一、概述 process-exporter主要用来监控进程的运行状态和资源使用情况。 exporter是从/proc目录下获取进程的状态。 二、安装 1、传统安装 下载二进制包,下载链接:https://github.com/ncabatoff/process-exporter/releases/tag/v0.8.1 2、kubernet…

达梦数据库常用命令整理

1.数据库自身信息 1.1 查询实例信息 SQL> select name inst_name from v$instance;行号 INST_NAME ---------- --------- 1 DMSERVER已用时间: 11.211(毫秒). 执行号:15.1.2 查询数据库当前状态 SQL> select status$ from v$instance;行号 STATUS$ -…

【Android项目】“追茶到底”项目介绍

没有多的介绍,这里只是展示我的项目效果,后面会给出具体的代码实现。 一、用户模块 1、注册(第一次登陆的话需要先注册账号) 2、登陆(具有记住最近登录用户功能) 二、点单模块 1、展示饮品列表 2、双向联动…

Go语言系统学习笔记(一):基础篇

1. 写在前面 公司的新业务开发需要用到go语言,虽然之前没接触过这门语言,但在大模型的帮助下,边看项目边写代码也能进行go的项目开发,不过,写了一段时间代码之后,总感觉对go语言本身,我的知识体…

加密技术在保护企业数据中的应用

加密技术是企业数据保护的核心,对于维护信息安全至关重要。透明加密技术使文件加密后不改变用户对文件的使用习惯,内部文件打开自动解密,存储自动加密,一旦离开使用环境,加密文件将无法正常读取,从而保护文…

大模型+智能眼镜,让失明人士也能无障碍阅读

你有没有想过有一天你闭上眼睛也可以进行流畅阅读呢? 不是民科,也不是量子波动速读!借助大语言模型和智能眼镜,来自维也纳工业大学、罗马第一大学和明尼苏达大学的研究者,提出了一种无需视力也能阅读的辅助系统&#…

使用fitten code插件(vscode),替换通义千问,识别需求中的输入输出

今天我们介绍一个工具,具体介绍可以参考我的这篇文章的介绍,支持vs code 插件,Fitten Code是一款由非十科技开发的AI代码助手,旨在通过大模型驱动来提升编程效率和体验-免费神器-CSDN博客https://blog.csdn.net/lijigang100/article/details/137833223?spm=1001.2014.3001…

Windows Server 2003安装DHCP服务器

0x00 前言 需要一个dhcp服务器,但是电脑只有一个windows server 2003,凑合着用的。 0x01 安装DHCP服务器 1. 打开控制面板,添加删除程序–添加/删除Windows组件–网络服务,勾选网络服务。 2. 点击【详细信息】,勾选…