大家好,又见面了,我是你们的朋友全栈君。
姿态估计和行为识别作为计算机视觉的两个领域,对于新人来说,较为容易弄混姿态估计和行为识别两个概念。
姿态估计(Pose Estimation)是指检测图像和视频中的人物形象的计算机视觉技术,可以确定某人的某个身体部位出现在图像中的位置,也就是在图像和视频中对人体关节的定位问题,也可以理解为在所有关节姿势的空间中搜索特定姿势。简言之,姿态估计的任务就是重建人的关节和肢干,其难点主要在于降低模型分析算法的复杂程度,并能够适应各种多变的情况、环境(光照、遮挡等等)。姿态估计的输出,是一个高维的姿态向量,而不是某个类别的类标,因此这一类方法需要学习的是一个从高维观测向量到高维姿态向量的映射。
姿态估计可分为四个子方向:
单人姿态估计(Single-Person Skeleton Estimation)
单人姿态估计,首先识别出行人,然后再行人区域位置内找出需要的关键点。常见的数据集有MPII、LSP、FLIC、LIP,每种数据集都有不同的精确度指标。其中MPII是当前单人姿态估计中最常见的benchmark,使用的是PCKh指标(可以认为预测的关键点与GT标注的关键点经过head size normalize后的距离),目前有的算法已经可以在上面达到93.9%的准确率。
多人姿态估计(Multi-Person Pose Estimation)
单人姿态估计算法往往被用来做多人姿态估计,一般有两种方式。Top-down先找到图片中所有行人,然后对每个行人做姿态估计,寻找每个人的关键点;bottom-up先寻找图片中所有的parts(关键点,比如头部、手、膝盖等),然后把这些parts组装成一个个行人。
测试集主要有COCO、CrowdPose等。
人体姿态跟踪(Video Pose Tracking)
如果把姿态估计往视频中扩展,就有了人体姿态跟踪的任务。主要是针对视频场景中的每一个行人,进行人体以及每个关键点的跟踪。这是一个综合且难度较大的工作,相比于行人跟踪来说,人体关键点在视频中的temporal motion会比较大,比如一个行走的行人,手跟脚会不停的摆动,所以跟踪难度会比跟踪人体框大。
主要的数据集是PoseTrack
3D人体姿态估计(3D skeleton Estimation)
将人体姿态往3D方向进行扩展,则是输入RGB图像,输出3D的人体关键点。
经典数据集Human3.6M
除了输出3D的关键点之外,有一些工作开始研究3D的shape,比如数据集DensePose,而且从长线来讲,这个是非常有价值的研究方向。
2D姿势估计——从RGB图像估计每个关节的2D姿势(x,y)坐标。
3D姿势估计——从RGB图像估计3D姿势(x,y,z)坐标。
行为识别可以借助姿态估计的相关研究成果来实现,比如HDM05这类姿态库就提供了每一帧视频中人的骨架信息,可以基于骨架信息判断运动类型。
参考文献
人体姿态估计文献综述,简单介绍了大约十种方法
https://blog.csdn.net/BockSong/article/details/81037059
深度学习人体姿态估计算法综述
https://www.infoq.cn/article/6Btg0-1crfmb7svRGa6H
2019深度学习人体姿态估计指南(翻译的文章)
https://blog.csdn.net/u010636181/article/details/90036365
https://nanonets.com/blog/human-pose-estimation-2d-guide/
行为识别(Action Detection/Regnition),最终的结果是得到图像或视频段中目标的行为类别。视频中人体行为识别主要分为两个子方向。
一个是给定一个视频片段进行分类(行为分类 Action Recognition),一般使用的数据库都先将动作分割好了,一个视频片段中包含一段明确的动作,时间较短(几秒钟)且有唯一确定的标签。所以也可以看作是input为视频,输出为label。
一个是不仅要知道一个动作在视频中是否发生,还需要知道动作发生在视频的哪段时间(包括开始和结束时间)(行为检测 Temporal Action Localization)。特点是需要处理较长的、未分割的视频,且视频中通常有较多干扰,目标动作一般只占视频的一小部分。也可以说是对视频进行指定行为的检测
Action Recegniton和Temporal Action Localization之间的关系,同image classification和object detection之间的关系比较像。基于image classification问题,发展出了许多强大的模型,比如ResNet、VGGNet等,这些模型在object detection的方法中起到了很大的作用。同样的,action recognition的相关模型如two-stream、C3D、iDT等也被广泛的应用在action detection中。
参考文献
行为识别的综述博客:
https://blog.csdn.net/neu_chenguangq/article/details/79504214
给出了行为识别的一些概述及资源合集(文章、代码)
https://blog.csdn.net/Gavinmiaoc/article/details/81179630
时序动作检测综述
http://www.pianshen.com/article/5760138121/
常用的行为分类的数据集:
UCF101:来源为YouTube视频,共计101类动作,13320段视频。共有5个大类的动作:1)人-物交互;2)肢体运动;3)人-人交互;4)弹奏乐器;5)运动。
HMDB51:来源为YouTube视频,共计51类动作,约7000段视频。
骨架数据库,比如MSR Action 3D,HDM05,SBU Kinect Interaction Dataset等。这些数据库已经提取了每帧视频中人的骨架信息,基于骨架信息判断运动类型。
常用的行为检测的数据集:
THUMOS2014:在行为检测任务中只有20类动作的未分割视频是有序行为片段标注的
MEXaction2:骑马和斗牛
ActivityNet:目前最大的数据集,同时包含分类和检测两个任务,包含200个动作类别
行为识别的难点:
(1)类内和类间差异, 同样一个动作,不同人的表现可能有极大的差异。
(2)环境差异, 遮挡、多视角、光照、低分辨率、动态背景.
(3)时间变化, 人在执行动作时的速度变化很大,很难确定动作的起始点,从而在对视频提取特征表示动作时影响最大。
(4)缺乏标注良好的大的数据集
行为识别领域内的重要方法
传统方法——iDT
利用光流场来获取视频序列中的一些轨迹,再沿着轨迹提取HOF、HOG、MBH、trajectory等特征。HOF基于灰度图计算,另外几个基于optical(密集光流)计算。最后对其进行特征编码,再基于编码结果训练SVM分类器。iDT利用前后两帧之间的光流和surf关键点进行匹配,从而消除或减弱相机运动带来的影响。
优点:稳定性最高、可靠性高
缺点:速度慢
深度学习——Two-Stream(双流CNN)
对视频序列中每两帧计算密集光流,得到密集光流的序列(即temporal信息)。然后对于视频图像(spatial)和密集光流(temporal)分别训练CNN模型,两个分支的网络分别对动作的类别进行判断,最后直接对两个网格的class score进行fusion(包括直接平均和SVM
两种方法),得到最终的分类结果。
优点:精度高,在UCF-101上达到0.96的准确率
缺点:速度慢
深度学习——C3D(3D卷积)
通过3D卷积操作核去提取视频数据的时间核空间特征。这些3D特征提取器在空间和时间两个维度上操作,因此可以捕捉视频流的运动信息。然后基于3D卷积提取器构造一个3D卷积神经网络,这个架构可以从连续视频帧中产生多通道的信息,然后在每一个通道都分离地进行卷积和下采样操作。最后将所有通道的信息组合起来得到最终的特征描述。
优点:速度快,300fps
缺点:精度低,在UCF-101上为0.85准确率
参考文献
三种方法的对比引自于:
https://www.jianshu.com/p/2c2c7e96b9b7
按照时间顺序整理了部分视频行为检测&分类方案
https://www.jianshu.com/p/583c26bbb675
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/152033.html原文链接:https://javaforall.cn