转载自:移动和嵌入式人体姿态估计(Mobile and Embedded Human Pose Estimation)
作者:Arrow
背景
现有的大部分模型都是在PC(带有超级强大GPU)上进行的,所以在嵌入式设备上基本无法使用
人体姿态估计
- 人体姿态估计主要是指在图像或者视频中找到人体的重要关节的位置(比如头,手、脚、肩部、膝盖、肘部等)
姿态相似性度量
- 利用各个关节点的位置进行适当的组合构造出的人体姿态特征
实现方案
- 优化模型:大大地减少参数
- 使用ARM中的GPU和NEON
实现方法
生成方法(Generative Methods)/有模型方法
- 先预定义身体部件模型,然后与输入的深度图像进行匹配
- 使用PSO, ICP最小化手工特征(hand-crafted)代价函数
- 通过将人体分为多个部件组合成模型,通过部件检测器检测部件的位置,进行部件之间的概率计算,从而对图像中的人体进行姿态估计
- 优势:不需要建立庞大的数据库,同时在模型建立完毕以后对于符合模型视角的姿态具有较高的识别率
- 劣势:复杂的人体模型构建较为困难,并且在实际情况中由于人体姿态具有多样性,使得很难构建出具有很强代表性的人体模型;所以此方法很难面对具有庞大数据量的真实情况
经典论文
- Therepresentationand matching of pictorial structures (1973)
- Cascaded models for articulated pose estimation (2010)
- Multi-view Pictorial Structures for 3D Human Pose Estimation (2013)
- Articulated part-based model for joint object detection and pose estimation (2013)
- Expanded parts model for human attribute and action recognition in still images (2013)
- 基于约束树形图结构外观模型的人体姿态估计 (2014)
- 一种基于图结构模型的人体姿态估计算法 (2013)
- 人体姿态估计步骤
* 常用特征提取方法
* 尺度不变特征变换法(SIFT:Scale Invariant Feature Transform)
* 梯度方向直方图特征(HOG:Histogram of Oriented Gradient)
判别方法(Discriminative Methods)/无模型方法
- 根据输入的深度图像,直接定位关节位置
- 大多数基于深度学习的方法
- 通过对每张图像的像素点进行分析,通过先进的特征提取方法来估计人体部件的位置
- 优势:不需要建立复杂的人体模型,从而使用得此方法不受模型的约束,可以适用于真实应用场景中
劣势:
- 为适应现实生活中,需要建立庞大的数据库
- 对硬件条件具有较高的要求
经典论文
- Real-time human pose recognition in parts from single depth images (2013, Kinect, Shotton)
- Efficient regression of general-activity human poses from dept images (2011)
- Accurate 3d pose estimation from a single depth images (2011)
- 人体姿态估计步骤
* 常用特征提取方法
* 人体部件尺度特征
* 赵文闯 《深度图像中基于的人体识别方法》 2012
* 四维特征向量(d0,d45,d90,d135)通过除以图像中人体身高进行归一化
* 优势:不同尺度下的人体姿态估计有着天然的优势
* 劣势:由于此特征没有很好的运用到部件在空间中处于不同位置,且不同部件的区分效果并不明显
* 深度图像偏移比较特征
* Shotton J (Kinect)
* 优势:运算简单、效果较好
* 劣势:由于此特征维数较低、在部件内部反应较小,所以使用在实际应用中偏移比较特征的鲁棒性和准确性并不是很好
* 深度图像方向梯度特征
* 方向梯度特征:像素点所在平面与深度相机所在平面的夹角
* 传统的深度图像方向梯度(DGoD:Directional Gradient of Depth)
* 优化的深度图像方向梯度
* 不同部件可能位于同一平面,也可能位于不同平面,此方法不能区分位于同一平面但不同部件的点,量级梯度特征可解决此问题
* 深度图像量级梯度特征
* 混合方法(Hybrid Methods)
* 把生成方法和判别方法结合使用
* 使用自动编码器学习潜在空间
研究现状
基于RGB彩色图像
- 易受光照变化、背景、阴影和噪声等的影响
基于深度图像
- 逐像素分类的方法
- 基于概率图模型的方法
- 基于特征点的方法
- 基于深度学习的方法
- 结合RGB彩色图像和深度图像
逐像素分类的方法
- 将深度图像上邻近区域内像素对的深度差值作为部位特征,来区分身体的不同部位,然后再结合随机决策森林的方法,将每一个像素进行分类
- 在逐像素分类的方法中,首次发表于2011 年的内置于Kinect 中使用的方法最具有代表性,该方法由Shotton 等提出,他们的做法是将一个区域内人体的像素对应的深度之间的差值作为特征,然后利用随机决策森林进行训练,对于每一个像素进行分类贴上部位标签,然后利用部位的信息再将这些特征回归到关节点。
- 这种方法实时性很好,并且在准确性上也有很好的表现,但是这种方法需要海量的带标签的数据进行很长时间的训练才能达到良好的效果。基于Shotton 等提出逐像素分类方法的开拓,越来越多的研究人员受到该方法的启发,并在该方向上取的了一定的进步。逐像素分类的方法目前只能应用于深度图像。
- 流程图
优点
- 基本思想:设计像素或者像素对之间的特征,将人体像素通过分类方法对应到人体不同部位,然后再将人体对应部位信息优化到人体关节点信息。
- 这种方法的准确性比较高
缺点
- 需要大量的带标签的训练数据进行模型的训练才能达到能够接受的效果
- 训练时间也很长,工作量极大,只能应用在特定场景中
相关论文
Multi-task forest for human pose estimation in depth images (Lallemand J)
- 提出了一种新颖的方法,在进行随机森林训练时,除了将深度图像中人体的每一个像素对应到相应的三维关节点位置,还将每一个像素与人体的运动状态进行关联,将人体运动信息整合到目标函数中,改善了人体姿态预测的精度
The Vitruvian manifold: inferring dense correspondences for one-shot human pose estimation (Taylor J)
- 使用回归森林来使深度图像与身体模型相对应,对于输入的深度图像,通过回归森林推断出对应的人体模型,然后优化模型参数,得到优化后的关节点位置,得到最终人体姿态
An adaptable system for RGB-D based human body detection and pose estimation (Buys K)
- 使用随机森林将深度图像中每一个像素与身体部位联合起来,并通过在部位中聚类中以及人体关节点间的约束关系得到初始骨架模型,然后再结合外观模型,将人体从彩色图像中分割出来,逐步迭代得到最终人体姿态
Human body part estimation from depth images via spatiallyconstrained deep learning (Jiu M)
- 基于卷积神经网络使用身体部位的空间特征进行逐像素分类,而且像素分类的性能有了极大提高
Accurate realtime full-body motion capture using a single depth camera (Wei X)
- 使用混合动作捕捉系统将3D 姿态跟踪与人体检测结合,并做到了实时人体姿态估计的效果
基于概率图模型的方法
- 是指把人体模型用刚体或者非刚体的部件来表示,这些部件之间用相连接的边来约束,最终能够用人体部件分配的先验概率优化问题定位人体的每一个部件,识别人体姿态并达到识别人体每一个关节的目的
- 这种方法在彩色图像和深度图像中都可以应用,有许多的实现。
- 基于概率图模型来解决问题,实质上是指通过概率模型来推理结果,整个过程包括学习模型和基于模型进行推理两个部分。
- 概率图模型指的是结合了概率论和图论相关知识,用图形的方式去表达变量之间的关系的模型的一类总称
概率图模型中的图主要是由点和边构成:
- 点代表随机变量
- 边指的是与边连接的点之间的概率关系
常见的概率图模型主要包括:
- 马尔科夫模型
- 贝叶斯模型
- 隐马尔科夫模型
- 实际应用中为了克服有时候单个模型对于问题的描述不够准确的情况,出现了混合模型,这种模型由概率图模型与其他模型或者理论相结合而形成。
相关论文
Controlled human pose estimation from depth image streams (Zhu Y)
- 人使用飞行时间成像装置来获取深度图像,并在深度图像上提取特征来估计人体姿态。其中这些特征是基于概率推断的方法来进行检测和跟踪的
Bayesian 3D human body pose tracking from depth image sequences (Fujimura K)
- 使用深度图像和人体模型之间的对应关系,进行局部优化得到身体部位,进而得到当前帧的人体关节点。并通过贝叶斯推断的方法来跟踪图像序列中的人体关节点
Real time motion capture using a single time-offlight camera (Ganapathi V)
- 通过结合生成模型和判别模型来表示身体部位,并使用爬山搜索来解决最大后验推理问题
Real-time simultaneous pose and shape estimation for articulated objects using a single depth camera
- 将关节形变模型嵌入到高斯混合模型中,并提出了一种用于将模板形状映射到主体形状的形状自适应算法。
- 综合以上提到几种概率图模型的方法,在人体姿态估计领域使用范围最广的是贝叶斯模型,此外基于混合概率图模型的方法也比较常见。基于概率图模型的方法主要是基于样本数据进行训练,学习模型的参数以及模型的结构,也即模型中各个节点之间的关系和概率密度函数等。训练好模型后即可基于已知参数进行变量取值的推断。
基于特征点的方法
- 是指在深度图像上找到人体的目标点(通常为在人体深度图像上求测地距离,并将求得的极值点作为感兴趣的目标点)
* 处理流程:
* 深度图像预处理:剔除背景,提取前景,然后进行中值滤波去噪
* 把深度图像转换成点云 (根据相机内参)
* 得到点云数据后,可以利用空间中点的约束关系来构建边,进而连接成整张网格图,即ijx 与klx 两点之间是否有边连接,需要考察空间中两点之间的欧氏距离是否满足一定阈值,而且在2D 深度图像上两点是否是邻接关系,即点云中点包含边的原则是两点在深度图像上相邻,而且空间中两点的距离也在阈值范围内
* 求身体极值点的通常做法是:取人体点云中的重心作为起点,然后计算起点到其他所有点的测地距离,最后选取其中的几个具有极大测地距离的点作为特征点
在得到目标点后,不同的学者提出了不同的方案:
Human skeleton tracking from depth data using geodesic distances and optical flow (Schwarz L A)
- 是利用测地极值求出5个身体部位,分别是头部、左手、右手、左脚、右脚,然后将这几个点跟关节点进行拟合,得出最终关节点,如果存在没有检测到的部位,则利用上一帧的彩色图像信息,求取光流变化并推断出这一帧丢失的部位
Accurate static pose estimation combining direct regression and geodesic extrema (Holt B)
- 首先使用随机决策森林对身体上每一个像素进行分类,估计出身体的刚性部位,然后通过Dijkstra 算法求测地距离,并结合测地极值点将身体具体部位划分出来,最终估计出人体姿态;同时发布了一个包含对齐的彩色图像和深度图像的全新的数据集,用来评估不同方法的效果
Real-time identification and localization of body parts from depth images (Plagemann C)
- 在身体上通过测地距离计算大约20 个感兴趣点,并提取每个点的方向向量,并确定该点属于的身体部位,从而识别人体姿态。
基于深度学习的方法
- 基于深度学习提出了一种新的深度推理嵌入式(deep inference-embedded)多任务学习框架,用于从静态深度图像中预测人体姿态
相关论文:
Human pose estimation from depth images via inference embedded multi-task learning (Wang K)
- 使用全卷积网络来生成身体部位的热度(置信度)图 (heatmap)
- 利用此heatmap将身体关键部位检测出来
- 基于检测到的关键部位使用嵌入的匹配网络(MatchNet)来推断当前身体部位的具体位置,得到最终人体关节位置
* Reconstruction of 3D human body pose from stereo image sequences based on top-down learning (Yang H D)
* 是将输入的深度图像用事先准备好的数据库中的多张深度图像线性组合而成
* 求出组合系数
* 将数据库中的深度图像对应的3D 人体模型进行线性组合即可得到输入的深度图像对应的人体模型
* Accurate 3d pose estimation from a single depth image (Ye M)
* 将深度图像对应的点云剔除背景、去除噪声
* 将点云的坐标正则化,使之与视角无关
* 在本地数据库中搜索相似姿态并进行适当修正,得到最终人体关节点位置
* Real-time posture reconstruction for Microsoft Kinect (Shum H)
* 利用Kinect SDK 给出的关节点位置进行评估
* 对于存在遮挡的情况,在本地离线的动作数据库中进行最近邻搜索
* 查找与当前姿态最相似的姿态,并通过姿态优化合成得到最终模拟人物
* 在这里插入图片描述
1.1 获取小型网络的方法
- 收缩(shrinking),分解(factorizing)或压缩(compressing)预训练的网络
- 压缩:基于乘积量化(product quantization)、哈希(hashing)以及修剪(pruning)的压缩,提出了向量量化和霍夫曼编码
- 蒸馏:它使用较大的网络来教授较小的网络
1.2 判断模型的指标
- 准确度(accuracy)
- 通过乘法加法(MAdd)度量的操作数(number of operations measured by multiply-adds (MAdd))
- 实际延迟(处理耗时: actual latency)
- 参数数量(number of parameters)
- MACs/MADDs:乘法和加法操作数量(the number of multiply-accumulates)
1.3 经典网络结构
移动和嵌入式平台
专业GPU/TPU平台
- AlexNet
- VGGNet
- GoogLeNet
- ResNet
1.4 源码
1.5 读论文的正确方法
论文+代码
明白论文的常用手法
- 每篇论文都不会说自己的缺点,只会放大优点。但是引用别人的论文时,却总放大别人工作的缺点。当你对比阅读时,形成一个知识串,才会对某个问题有更清晰的认识。
- 论文为了出成果,一般只会选择对自己模型有力的数据集验证。对某一领域数据集特征了解,再也不会被作者蒙蔽双眼了。比如NAS(Neural Architecture Search),很多论文喜欢在CIFAR-10/ CIFAR-100/SVHN等小数据集比实验结果,ImageNet性能表现避重就轻避而不谈;很多论文写state-of-art的性能,对实时性不谈;论文没有说的没有做的可能是个大坑。
- 论文因为要投稿和发表顶会,故意会云里雾里引入很多概念和公式,当对比代码,关键trick,才能返璞归真。Code+paper,才是论文最佳的阅读方式。
- 对于自己关注的领域,可能每篇有影响的,实验结果不是state-of-art也要关注,因为工作可能会撞车。对横向领域的论文,要关注state-of-art,说不定很多trick可以直接迁移到自己的工作。
- 拒绝二手知识。阅读一篇论文,直接从原文阅读思考、和作者邮箱联系寻找答案。
1.6 分组卷积(Group Convolution)
Group Convolution:AKA(also known as) Filter groups
常规卷积
- 如果输入feature map尺寸为C∗H∗W,卷积核有N个
- 输出feature map与卷积核的数量相同也是N
- 每个卷积核的尺寸为C∗K∗K
- N个卷积核的总参数量为N∗C∗K∗K
分组卷积
分组卷积的用途
分组卷积=>深度可分离卷积
分组卷积=>全局深度可分离卷积
- Global Depthwise Convolution(GDC):全局深度可分离卷积
- 更进一步,如果分组数G=N=C,同时卷积核的尺寸与输入map的尺寸相同,即K=H=W,则输出map为C∗1∗1即长度为C的向量,此时称之为Global Depthwise Convolution(GDC),见MobileFaceNet
- 可以看成是全局加权池化,与 Global Average Pooling(GAP) 的不同之处在于,GDC 给每个位置赋予了可学习的权重(对于已对齐的图像这很有效,比如人脸,中心位置和边界位置的权重自然应该不同),而GAP每个位置的权重相同,全局取个平均
2. 移动应用模型
MobileNet家族
2.1 MobileNet -V1 (2017 Google)
论文:MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications
目标
- 优化延迟
- 产生小型网络
2.1.1 深度可分离卷积概念
- MobileNet模型:基于深度可分离卷积
深度可分离卷积
- (DSC:Depthwise Separable Convolution)
- 它是分解卷积的一种形式,可将标准卷积分解为深度卷积和1×1卷积 (点式卷积)
- 使用DSC创建了一个轻量级神经网络
- 使用两个简单的全局超参来控制性能(计算量)和准确性之间的平衡
标准卷积:一步实现以下两个功能:
- 滤波器
- 将输入合并为一组新的输出
深度可分离卷积(MobileNet):分步实现以下两个功能:
- 深度卷积(depthwise convolution):将单个滤波器应用于每个输入通道
- 逐点卷积 (pointwise convolution):使用1×1卷积合并深度卷积的输出
深度可分离卷积把标准卷积分为以下两个独立的层:
- 滤波器层(filtering)
- 合并层(combing)
- 这样大大减小于模型的大小和计算量
2.1.2 深度可分离卷积流程
标准卷积流程:
把标准卷积分解为深度卷积和逐点卷积的流程如下图所示:
深度可分离卷积示意图
2.1.3 深度可分离卷积计算成本
计算参数数量
2.1.4 网络结构
标准卷积与深度可分离卷积
MobileNet网络结构
不同类型层的资源消耗
2.1.5 超参
2.1.6 实验结果
2.1.7 局限性
- 优点:使用深度可分享卷积,以在牺牲较小性能的前提下大大地减少参数数量
- 局限:深度卷积的Kernel数量取决于输入的Depth,且无法改变
2.2 MobileNetV2
- 论文:反向残差和线形瓶颈 (MobileNetV2: Inverted Residuals and Linear Bottlenecks) Google Inc. (2019)
目标:
- 减少计算量的同时避免特征损失(线性瓶颈)
- 减少内存消耗
- 提高AP (线性瓶颈和反向残差)
主要贡献:
- 一个创新的层模块:具有线性瓶颈的反向残差(the inverted residual with linear bottleneck)
- 通过使用【反向残差和线形瓶颈】的结构,解决了MobileNetV1在深度卷积中存在的输入层Kernel数据固定的瓶颈
- 在准度性与性能间最得最佳平衡(strike an optimal balance between accuracy and performance)
测试数据集
- ImageNet classification
- COCO objection detection
- VOC image segmentation
概念
- 感兴趣的信息:manifold of interest
2.2.1 深度可分离卷积
- Depthwise Separable Convolutions
- 与MobileNetV1中的一样,在MobileNetV2中继续使用
2.2.2 线性瓶颈 (Linear Bottlenecks)
起因:
- 在MobileNetV1中引入了超参Width Multiplier参数缩减模型的输入和输出通道(channels),其结果为特征信息就更加集中在缩减后的通道中,如果在缩减后的特征图上使用非线性激活层(如ReLU),就会有较大的信息丢失。为了减少信息丢失,就引入了本文中的“线性瓶颈 (Linear Bottlenecks)”
- 深度网络仅在输出域的非零体积部分具有线性分类器的能力,因为ReLU留下的非0体积内的点都是通过线性变换得来的,其它的值被丢掉了
ReLU变换保留哪些信息?
- 1)如果感兴趣的信息在ReLU变换后仍保持非零体积内,则它对应于线性变换 (即ReLU的作用就是一个线性变换)
- 2)ReLU能够保留有关输入信息的完整信息,但前提是输入信息位于输入空间的低维子空间中
上图的实验表明:
- 把初始信号嵌入到n维空间中,然后通过ReLU变换之后,再进行逆变换,最后恢复出原始信号
- 若n=2或3,恢复的信息相比原始信息损失较多
- 若n=15或30,恢复的信息相比原始信息损失较少
- 结论:低维经过ReLU之后信息(特征)损失最大
什么是瓶颈(Bottlenects)?
- 输出维度(深度)减少的层就是一个Bottleneck,类似一个沙漏
什么是线性瓶颈(Linear Bottleneck)?
- Bottleneck层不接非线性激活函数 (如ReLU),就是一个Linear Bottleneck
- 实验证据表明,使用线性层至关重要,因为它可以防止非线性破坏过多的信息。
2.2.3 卷积块的变体
2.2.4 反向残差(Inverted residuals)
- 传统残差:维度变化规则:先缩小后增加
- 反向残差:维度变化规则:先增加后缩小
- 思路:瓶颈实际上包含所有必要的信息,而扩展层仅充当张量的非线性转换的实现细节,我们直接在瓶颈之间使用短路连接,以实现残差学习
2.2.5 网络结构
2.2.5.2 不同架构的卷积块比较
2.2.5.3 最大的通道数/内存比较
- channels/memory (in Kb)
2.2.6 实验结果
2.2.6.1 不同网络的性能曲线
2.2.6.2 线性瓶颈和反向残差对Top 1 Accuracy的影响
2.2.6.3 性能比较(基于COCO数据集)
2.2.6.4 性能比较(基于ImageNet数据集)
2.3 MobileNetV3
- 论文:Searching for MobileNetV3 Google AI, Google Brain (2019)
目标:
- 在移动手机CPU上达到实时性能
- 将关注点从减少参数转移到减少操作的数量(MAdds)和实际测量的延迟
- 目标:Accuracy and Latency
主要贡献
- 探索自动化网络搜索和人工设计如何协同互补
网络搜索
网络架构搜索:Network/Neural Architecture Search (NAS)
- 通过NAS优化每个网络块,以搜索全局最优网络架构
NetAdapt算法:NetAdapt Algorithm
- 用NetAdapt算法搜索每层滤波器(Filter)的数量
人工设计
- 新的SE模块
- 新的H-Swish激活函数
- 更改末端计算量大的层,将增维的1x1层移到平均池化之后
- 更改初始端为16个卷积核
应用场景
- MobileNetV3-Large:用于高端手机
- MobileNetV3-Small:用于低端手机
2.3.1 在Pexel 1手机上的性能
2.3.2 高效的移动构建块(Efficient Mobile Building Blocks)
2.3.3 网络搜索(Network Search)
网络搜索(Network Search)
- 是一个用于探索和优化网络结构(Network Architecture)的强大工具
Platform-Aware NAS
- 通过优化每一个网络块(Network Block)搜索全局网络结构(Global Network Structure)
NetAdapt
- 用于搜索每一层的filters个数
结论
- 以上2种技术是互补的,可以组合起来有效地找到给定硬件平台的优化模型
2.3.3.1 探索空间增强
高效的特征提取方法
- 神经网络模型的特征提取能力可以通过改进网络结构来提高,而无需通过更多的监督学习方式来提高
Goolge Inception
- 嵌入了多尺度信息,聚合多种不同感受野上的特征来获得性能增益
Inside-Outside 网络
- 考虑了空间中的上下文信息
2.3.3.2 SENet (Squeeze-and-Excitation Networks)
核心思想
- 通过网络根据loss去学习特征权重,使得有效的feature map权重大,无效或效果小的feature map权重小的方式训练模型达到更好的结果
- 通过学习的方式来自动获取到每个特征通道的重要程度
- 然后依照这个重要程度去提升有用的特征并抑制对当前任务用处不大的特征
特点
- 并不是一个完整的网络结构,而是一个子结构,可以嵌到其他模型中
- Squeeze 和 Excitation 是两个非常关键的操作
- 动机是希望显式地建模特征通道之间的相互依赖关系
- SENet模块
2.3.7 网络模型
MobileNetV3-Large Model
MobileNetV3-Small Model
2.3.8 实验结果
2.3.8.1 分类(Classification)
2.3.8.2 检测 (Detection)
2.3.8.3 语义分割 (Semantic Segmentation)
2.4 设计网络设计空间 (DNDS)
- 论文:Designing Network Design Spaces - 2020 (FAIR:Facebook AI Research )
- 代码和预训练模型
目标:
- 帮助加深对网络设计的理解,发现可广泛适用于各种设置的设计原则
- 不是设计单个网络实例,而是设计一个可参数化的网络设计空间
- 探索网络结构(如:width, depth, groups等)
RegNet
- 由简单的常规网络组成的低维设计空间,我们称其为RegNet (Regular Networks)
- RegNet设计空间的核心很简单:每个阶段(stage)的宽度和深度由量化的线性函数决定
- 在移动设备上令人意外地有效
核心思想
- RegNet参数化的核心思想:好网络的宽度和深度可以用量化的线性函数来解释
结果
- RegNet设计空间提供了简单且快速的网络,可以在各种各样环境下正常工作
- 在GPU上,比EfficientNet快5倍
- 提高了神经网络的有效性以及我们对网络设计的理解
- 专注讨论网络设计规则
NAS (Neural Architecture Search)
- 优势:给定一个确定的可能的网络搜索空间,NAS在此空间中自动找到一个好的模型
- 不足:搜索的结果是将单个网络实例调整为特定设置(如:硬件平台)
为什么叫设计空间(design space),而不是搜索空间(search space)
- 不是在空间中搜索一个网络实例
- 而是在设计空间本身( 规则)
发现
- 最好且稳定模型的深度约20 blocks
- 最好的模型不需要瓶颈(bottleneck)或反向瓶颈(inverted bottleneck)
2.4.1 网络设计进化史
手动网络设计(Manual Network Design)
- 目标:提高准确性(Accuracy)
- AlexNet
- VGG
- Inception
- ResNet
- ResNeXt
- DenseNet
- MobileNet
自动网络设计(Automated Network Design)
NAS:
- 专注于搜索算法
- 在一个固定且手动设计的搜索空间中,找到一个最好的网络实例
2.4.2 设计“设计空间” (Design Space Design)
RegNet特点:
- 简化允许的尺寸和网络配置的类型
- 高性能模型具有更高的水平
- 更易于分析和解释
量化设计空间质量的步骤:
- 第一步:从设计空间中采样并训练nn 个模型, 然后生成模型的分布
- 第二步:计算误差EDF并图形化,以获得设计空间的质量
- 第三步:可视化设计空间的各种属性,并使用empirical bootstrap获得规律
- 第四步:使用这些规律优化设计空间
2.4.2.2 AnyNet设计空间(The AnyNet Design Space)
焦点
- 探索神经网络的结构,且神经网络包含标准的、固定的网络块
网络结构参数:
- blocks数量(如:网络深度)
- blocks宽度(如:通道数量)
- 其它参数:瓶颈比率、组宽度(group widths)
网络结构决定以下因素:
- 参数娄量
- 计算量
- 内存消耗
- 准确度(accuracy)
- 效率(efficiency)
设计空间的网络结构
- 输入分辨率默认为:r=224
网络设计目标
- 简化设计空间的结构
- 改善设计空间的可解释性
- 改善设计空间的质量
- 保持设计空间的多样性
2.4.3 在移动设备上的性能比较
3. 基于深度图的位姿估计
基于深度图像的位姿估计的优势:
- 受光照影响小(超强光除外)
- 没有尺度(scale)疑问
- 颜色和纹理不变性
- 解决了轮廓模糊性问题
- 大大简化了背景去除问题
3.1 数据集
3.2 基于单深度图的有效人体姿态估计
- 论文:Efficient Human Pose Estimation from Single Depth Images (2012)
- 作者单位:Microsoft Research, Cambridge, in collaboration with Xbox
- 目标:鲁棒性和计算效率
两种实现方法 :
- 身体部位分类(BPC:Body Part Classification)
- 偏移关节回归(OJR:Offset Joint Regression)
原理:
- BPC和OJR都使用有效的决策森林,该决策森林应用于图像中的每个像素
- 分别评估每个像素对每个关节的贡献可避免对身体关节进行任何组合搜索
- 通过评估每个像素处的滑动窗口决策森林,为人体关节的位置投票
- 决策森林使用简单但有区别的深度比较图像特征(depth comparison image features),这些特征可提供3D平移不变性,同时保持较高的计算效率。
3.2.1 数据
- 使用真实人类演员的基于标记的运动捕捉来获取基准位姿数据(ground truth pose data)
- 数据量:500K frames
- 动作:驾驶,跳舞,踢脚,跑步
- MoCap: Motion Capture
- 数据采集方式:采用MoCap采集的真实数据和合成数据
3.2.2 实现方案
3.2.2.2 随机森林( Randomized forests)
**3.2.2.3 叶节点预测模型(Leaf node prediction models)
3.2.2.4 汇总预测(Aggregating predictions)**
3.3 基于推理嵌入多任务学习的深度图像人体姿态估计
- 论文:Human Pose Estimation from Depth Images via Inference Embedded Multi-task Learning (2016)
- 作者单位:中山大学
- 目标:解决Kinect V2 (Shotten)不能识别的一些动作以及遮挡问题
贡献:
100K深度图像数据集(包含各种动作) Kinect2 Human Pose Dataset (K2HPD)
- 19个关节
- 30个测试人员
- 每个人10种不同的场景动作,包括经常性动作和很少做的动作
- 基于深度学习,实现了从静止深度图像预测人体关节的最新性能
- 动态规划推理与深度神经网络的集成是独创的
基于RGB与Depth图像的位姿估计差异:
- 深度图像包含传感器噪声且外观细节粗糙
- 第一步:生成关节部位的热图 heat (confidence) maps (CNN->提取特征)
- 第二步:基于生成的候选身体部位预测人体关节
3.3.1 框架
- 由于深度图像的分辨率低和不连续,因此生成的身体部位建议包括许多错误
- 把身体部位建议输入到内置推理MatchNet,以寻求最佳的身体关节位置
MatchNet(基于Patch匹配)的用途:
- 测量身体部位建议与标准模板间的一元外观兼容性
- 在3-D坐标中测量两个身体部位的几何一致性 (可以解决旋转问题吗?)
- 给定所有优化参数,从基于树的动力学结构的叶节点(手或脚)到根节点(head)的顺序计算最优值
3.3.2.4 实验结果
3.4 基于单个深度图的实时3D位置估计
- 论文:Real-time 3D Pose Estimation from Single Depth Images (2019)
- 作者:Honda Research Institute Europe GmbH
目标:
- 移动机器人上可运行
- 基于CNN的二维姿态估计结构优化,以获取高帧率
贡献
- 提出了大幅度减小参数和提高速度的优化步骤
- 扩展结构直接进行3D位姿估计
- 数据集
3.4.1 方法
3.4.1.3 实现流程
3.4.2 Slim Hourglass Block (SHB) for Faster Inference
- 通过多分辨率计算特征,然后依次组合在一起,堆叠式沙漏实质上是一个递归的多分辨率残差模块
- SHB不仅保留了相当好的细节信息,而且有大的感知域(large receptive field)
- 用于生成关节heatmap
- 首先检测头
不足
- 左右经常出错
- 估计多人位姿效果不佳 (不能处理两人靠得近或重叠的情况)
不能处理遮挡问题
- 关节不可见,但明显可推出,如手放在背后
- 无信息可推出关节位置,如下半身不见
3.4.3 用于人体姿势估计的堆叠沙漏网络
- 论文:Stacked Hourglass Networks for Human Pose Estimation (2016)
- 作者:University of Michigan, Ann Arbor
创新点:
- 处理多尺度
- 捕获最好的人体空间关系
- 将重复的自下而上(bottom-up),自上而下(top-down)的处理与中间监督一起使用,以改善网络的性能
- 基于stacked hourglass网络, 连续使用pooling和upsampling产生最后的预测
- 网络结构
3.4.3.1 相关工作
DeepPose (by Toshev)
- 第一个从传统方法迁移到深度网络
- 使用网络直接回归关节的(x,y)坐标
- 使用ConvNet和图模型
- 使用图模型学习关节的空间位置关系
Joint training of a convolutional network and a graphical model for human pose estimation. (Tompson)
- 通过捕获不同尺度(分辨率)的特征,然后生成heatmaps
- 通过级联来优化预测,提升了效率和减少了内存的使用
SHB
- 在不同的尺度上捕获特征
- 把不同分辨率的特征组合起来
- 不使用图模型和明显的人体模型
- 基于RGB图像,实现单个人的关节定位
- bottom-up处理:从高分辨率到低分辨率
- top-down处理:从低分辨率到高分辨率
3.4.3.2 网络结构
Hourglass设计
- 技术洞见:捕获每个尺度的信息
- 局部特征:用于识别脸和手的局部特征是必须的,最后的位置估计需要理解整个身体
- 人的方位、四肢的排列和相邻关节的关系是在图像中不同尺度下最容易识别的线索
- 沙漏(Hourglass)是一个简单,最小的设计,有能力捕捉所有这些特征,并将它们结合起来,输出像素级的预测
- 网络必须高效处理和融合不同尺度的特征
- 网络的输出是一组热图,其中对于给定的热图,网络预测每个像素处存在关节的概率
层实现
- 在保持Hourglass形状的前提下,层的实现具有很多灵活性
- 本设计大量使用残差网络
- 本设计的Filter不大于3x3
- 输入分辨率:256x256
- 最大输出分辨率:64x64
- 所有残差模块输出256个特征
- 残差网络和中间监督
3.4.3.3 具有中间监督的堆叠沙漏
- 上 一个沙漏的输出作为下一个沙漏的输出
- 本网络提供了重复的高到低、低到高分辨率的推断机制,此机制允许在整个图像中重新评估初始估计和特征
- 本方案的关键是中间热图的预测,基于此预测可计算其损失
- 每经过一个沙漏产生一个预测,且网络有处理局部和全局特征的机会;下一个沙漏再次处理这些高级特征,以进一步评估更高阶的空间关系
- 这种在尺度之间来回移动的方法特别重要,因为保持特征的空间位置对于最终定位至关重要
- 对于位姿估计这类结构化问题,输出是不同特征的相互作用,这些特征应该组合在一起形成对场景的一致性理解
- 我们通过使用1x1卷积将中间预测映射到更多的通道,将它们重新整合到特征空间
- 不同的沙漏使用不同的权重
- 使用相同的ground truth计算每一个沙漏预测的损失
3.4.3.4 训练细节
- 此方法在FLIC(5003个图像: 3987个训练+1016个测试)和MPII(25K个图像:28K训练+11K测试)两个benchmark数据集中进行了测试
- 在给定的输入图像中,通常有多个人可见,但如果没有图形模型或其他后处理步骤,图像必须传达所有必要的信息,以便网络确定哪个人对应标注信息;通过训练网络专门标注直接中心的人来解决此问题
- 数据扩增:旋转:+/-30度,缩放:0.75/1.25
- 优化方法:RMSProp + 学习率(2.5e-4)
- 损失函数(监督方法):Mean-Squared Error (MSE)用于比较预测的热图与ground-truth热图
- 训练设备:一个12 GB NVIDIA TitanX GPU
- 训练时长:3天
- 调整学习率:在验证准确性稳定后,将学习率降低5倍
- 前向预测计算需要:75ms
- 为计算最后的预测值,把原图和翻转之后的图像分别通过网络计算其热图,然后取两个热图的平均值
- 一个关节在网络中的预测值为热图中的最大激活位置
3.4.3.5 实验结果
评价指标:关键点正确估计的比例(PCK: Percentage of Correct Keypoints)
- 计算检测的关键点与其对应的groundtruth间的归一化距离小于设定阈值的比例
- FLIC:以躯干尺寸(torso size) 作为归一化参考.
- MPII:以头部长度(head length) 作为归一化参考,即 PCKh
- 在FLIC数据上的测试结果
- 在MPII数据集上的测试结果
3.4.3.6 不同网络的训练过程
HG不同但残差模块数相同,其训练性能差异不大
- HG (a single long hourlglass):一个HG包含8个残差模块
- HG-Stacked (without Intermediate supervision):两个HG, 每个HG包含4个残差模块
有无中间监督的比较
- 有中间监督的效果更佳
3.5 基于RGB-D的地面检测
3.5.1 基于RGB-D的新型地面检测方法
- 论文:A Novel Ground Plane Detection Method Using an RGB-D Sensor(2019)
- 作者:杭州河海大学机电工程学院
目标:
- 在不同的场景下生成精确的地面
- 使用占用栅格地图检测地平面
步骤
- 数据预处理
- 构造栅格占用地图
- 地面分割
RGB-D在以下环境下表现不好
- 强光照射
- 透明物体
- 反射
- 吸收红外线的表面
3.5.1.1 数据预处理
- 目的:解决深度图像中的噪声和黑洞, 参考代码
滤波方法:weight median filter (WM)
- 行填充(row filling)
3.5.1.3 地面检测算法
地面检测算法包含以下三步:
- 构造栅格占用地图
- 地面拟合
- 地面分割
构造栅格占用地图
- 使用二进制Bayes Filter更新栅格占用地图
- 栅格占用计算方法
3.5.1.4 实验结果
- 权重中值(WM)滤波
- 不同场景下的检测结果
- detect1:表示基于occupancy滤波之后的点
- detect2:表示基于距离滤波之后的点
- origin:表示原始位于地面上的点
3.5.1.5 结论
- 把3D点云数据转换为2D栅格占用地图,与PCL相比,减少了很多计算量
- 可检测出地面上95%的点
- 可检测出准确的地面
- 计算高效且鲁棒性好
3.5.2 基于RGB-D Sensor的地面检测
- 论文:Ground Plane Detection Using an RGB-D Sensor (2014)
- 作者:Robotics and Autonomous Vehicles Laboratory
3.5.2.1 提供的解决方案
- 通过指数曲线拟合地面模型
解决方案一:
- 简单且健状的
前提条件:
- 俯仰角(Pitch)不变
- 没有翻滚(Roll)
解决方案二:
- 俯仰角(Pitch)动态变化
- 翻滚(Roll)角度动态变化
效果:
- 优于垂直视差法(vertical disparity approach)
- 在复杂场景(包括许多障碍物、不同的地板表面、楼梯和狭窄的走廊)下,生成精确的地平面以割障碍物分
3.5.2.4 实验结果
3.6 基于单个深度图精确位姿估计
- 论文:Accurate 3D Pose Estimation From a Single Depth Image (2011)
- 作者:肯塔基大学
思路:
- 包括位姿检测和位姿优化两个阶段
- 把深度图与一组预先捕获的运动样本相匹配,以生成姿态估计
创新点
- 点云平滑技术 (降噪)
- 点云对齐和位姿搜索算法与视角无关
3.7 基于超像素聚类人体姿态识别 (深度图)
创新点:
- 基于部位聚类特征点设计的人体姿态特征也能够很好的表征不同的人体姿态
- 相比于基于关节点构造的人体姿态特征,免去了训练回归模型从聚类特征点回归到关节点的步骤,减少了计算量,提高了效率
主要流程
- 提取人体特征(部位聚类特征点)
- 学习人体特征与人体骨骼的映射(求解人体的部位聚类特征点与关节点之间的映射矩阵)
成功指标
- 精度
- 召回率
3.7.1 深度图像中的人体特征点提取
- 将深度图像数据剔除背景、去除噪声
- 利用深度相机参数将深度图像数据转换为点云数据
- 使用SLIC 超像素思想处理点云数据,得到稀疏点云数据后,构建人体连通图
- 利用测地距离确定人体肢端点,然后根据肢端点将人体分为几个部位
- 最后在每一个部位内进行k-means 聚类,将聚类中心点作为人体的特征点
k-means聚类:
- 一定要在聚类前需要手工指定要分成几类,K-Means 聚类算法的大致逻辑就是“物以类聚,人以群分”:
- 1、输入 k 的值,即我们指定希望通过聚类得到 k 个分组
- 2、从数据集中随机选取 k 个数据点作为初始大佬(质心)
- 3、对集合中每一个小弟,计算与每一个大佬的距离,离哪个大佬距离近,就跟定哪个大佬
- 4、这时每一个大佬手下都聚集了一票小弟,这时候召开选举大会,每一群选出新的大佬(即通过算法选出新的质心)
- 5、如果新大佬和老大佬之间的距离小于某一个设置的阈值(表示重新计算的质心的位置变化不大,趋于稳定,或者说收敛),可以认为我们进行的聚类已经达到期望的结果,算法终止
- 6、如果新大佬和老大佬距离变化很大,需要迭代3~5步骤
3.7.1.1 点云数据的超像素处理
SLIC(Simple Linear Iterative Clustering)即简单线性迭代聚类方法
- 将不同像素相似的特征将像素分组,最终用相对少量的超像素块代替原来的像素来刻画图像特征
- 本文将人体点云数据中具有相似深度距离以及图像上相邻像素的点融合为一个像素块,大大降低点云规模,充分减少人体图模型的边数和顶点数
- 将人体模型图构造为稀疏的图能够大大提高计算测地距离的效率
SLIC特点
- SLIC 算法生成的超像素块整齐
- 能够很好的将相似特征像素分到一起,而且生成超像素块在轮廓保持方面也很理想
- SLIC 算法需要设置的外部参数非常少
SLIC与k-means的区别
- 标准k-means 搜索整张图像
- SLIC 算法只搜索有限区域
提取特征点的步骤:
- 先将深度图像中的点,利用邻域关系等连接成一张连通图
- 利用几何关系,求得人体中心点
- 使用Dijkstra 算法从人体中心点出发求整个人体的5 个肢端点
- 根据肢端点位置将人体肢体分为5 个部位
- 得到部位信息后,然后在每一个部位内部进行k-means 聚类,聚类结束后,最后将部位内部得到的所有聚类中心点作为人体的特征点
基于测地距离的迪杰斯特拉算法,定位一级骨架点的具体步骤:
- 首先在构建好稀疏图的基础上,利用点云中所有点的横坐标与纵坐标的均值找到人体的中心点O
- 然后从O 出发计算人体连通图上各个点到中心点O 的测地距离
- 构建一个记录每个点相对于中心点O 测地距离的map,选取一个合适的测地阈值(一般为中心点到肩膀附近的距离),将人体分为5 个独立的区域
- 基于洪水填充算法(flood fill algorithm)分割出每一个区域,并将每个区域内最大的测地值点作为肢端点
3.7.1.3 人体部位的提取
经过上述步骤求得人体肢端点位置后,分别计算每一个肢端点到人体连通图上其他所有点的距离,最后根据身体上每一个像素到5 个肢端点的测地距离,利用KNN(k-Nearest Neighbor,邻近算法,K 最近邻)算法判断该像素属于哪一个肢端点所在的部位
- K表示距离自己最近的点的个数,在这K个点中,哪个类别的点最多,自己就跟着属于哪个类别,即随大流
3.7.1.4 聚类特征点的提取
- 得到身体部位信息后,本文的方案是在部位内进行k-means 聚类,并将聚类中心作为刻画人体姿态的特征
- 传统k-means 通过随机初始化聚类中心点的方式,无法保证聚类的效率,与传统k-means 初始化聚类中心点采取的策略不同
- 本文事先将每一个部位内的数据按照像素行从小到大的关系排列起来,平均选取k 个聚类中心点,然后进行聚类迭代操作,经过验证本文提出的策略相比于随机选取聚类中心点迭代次数明显减少,提高了聚类效率
- 得到聚类中心点后,本文按照身体部位顺序将聚类点排序为一个向量。身体部位信息则基于肢端点信息由SVM 训练学习得到。
3.7.2 基于稀疏回归模型的骨骼点提取
求解一个聚类特征点与骨架点之间的稀疏回归模型,求解此模型需要用到拉格朗日乘子法。
3.7.2.1 基于拉格朗日乘子法的约束问题求解
参考
论文及代码:基于Depth
- Efficient Human Pose Estimation from Single Depth Images 2012 MSRA 【code】
- 3D Human Pose Estimation in RGBD Images for Robotic Task Learning
- A2J: Anchor-to-Joint Regression Network for 3D Articulated Pose Estimation from a Single Depth Image : 使用ITOP数据集
- V2V-PoseNet: Voxel-to-Voxel Prediction Network for Accurate 3D Hand and Human Pose Estimation from a Single Depth Map
论文及代码:基于RGB
- https://yinguobing.com/bottlenecks-block-in-mobilenetv2/
- Real-time 2D Multi-Person Pose Estimation on CPU: Lightweight OpenPose
- Real-time-3D-Human-Pose-Estimation-with-a-Single-RGB-Camera
- Awesome Human Pose Estimation
- VNect: Real-time 3D Human Pose Estimation with a Single RGB Camera 利用了骨头长度
- Realtime multi-person 2D pose estimation using part affinity fields. 利用了身体部位间的关系
人体姿态估计Depth数据集
- 迈向视点不变的3D人类姿势估计 (ITOP: Towards Viewpoint Invariant 3D Human Pose Estimation) - Fei-Fei Li
- Stanford University
- https://www.cnblogs.com/bonelee/p/9030092.html
- 基于深度图像的人体姿态估计及相似性度量
- 深度图像中人体姿态估计研究
推荐专栏文章
- 【项目实践】从零开始学习SSD目标检测算法训练自己的数据集(附注释项目代码)
- 【项目实践】从零开始学习Deep SORT+YOLO V3进行多目标跟踪(附注释项目代码)
- OCR移动端网络汇总与PyTorch实现
更多嵌入式AI算法部署等请关注极术嵌入式AI专栏。