前言:
OpenPose是一个基于深度学习的人体姿势估计库,它可以从图像或视频中准确地检测和估计人体的关键点和姿势信息。OpenPose的目标是将人体姿势估计变成一个实时、多人、准确的任务。——本节介绍openpose的原理部分
把关键点按照定义好的规则从上到下把它拼接起来——top-down,先做目标检测,检测到每一个目标框,然后在框里面进行特征点连接,所以不会出现这个人连到另外一个人的部位去
Top-dowm(先做检测再做回归,与传统的目标检测RCNN系列很像)的方法的问题:
相比较与传统的top-dowm来说,openpose是没有进行目标检测的,在目标没有框的时候来做任务。。
通过回归损失,得到每一个关键点的特征图,18个关键点就18张特征图。
在实际打标签的时候就需要把标签做成热度图,而且在实际肩膀的位置是1,如果你打的点远离肩膀,那就是0.9,0.8,0.7,每一个点都要进行高斯分布形成一个热度图
右下角是飞镖游戏举的例子
PAF就是将属于同一个人的不同关键点按顺序拼接,而且是有方向的,重点是这个方向!!!白色衣服人的肩膀的点会与所有的粉色点连接,但是要找到最适合属于同一个人的,就是PAF做的事
分为两个网络。第一个网络预测18个特征图,每一张特征图表示当前预测的是什么部位
19种不同的连接方式规则,每一种连接方式都要预测他们的方向,因为每种连接方式有两个方向,19*2(x,y)=38种不同的连接方向
如何确定关键点的连接? 下图一个头连接了两个脖子,如果你能告诉我哪个得分高,那就迎刃而解了。匈牙利匹配?二分图
这个匹配与向量大小无关,仅更方向有关,所以在打标签的时候,都是做成了单位向量,它只有方向没有大小。
标签定义,两条垂线是有阈值的,然后做出矩形,但凡落到矩形中的,那就是跟v是同一个方向的,只保留掉落在矩形面积中的点,其他点全部去掉。
19组连接方式,38个特征图,每个特征图代表x或者y方向。 19是先验,作者规定的,头连鼻子,鼻子连脖子,脖子连肩膀等等。。。。。。。。。
下图 是实际做出了的效果:
得到PFA的标签后(包括所有人该连接处的向量),开始计算方向相同的值,
下图的上方是各种打乱的方向,他们是预测值,调整预测值的方向相同的值,而右下角是标注的图,是同一个方向的
再看看下图的上方,明显右边计算出来的积分(投影的思想)更大也就是权重更大,所以选择这个方向
计算完PAF权值计算后开始连接
如何确定关键点的连接?
如果能给我一个权值(分数,代价矩阵)这件事就能做了
基于上图的预测值和真实标注值后,那怎么判断预测值是左边的可能性大呢,还是右边的可能性大呢?
积分的思想,可以想象成求近似。
左边,计算几个矩形的面积,那简单,计算出来相加就行
但是右边,矩形如果有无限多个,就不好计算了,用积分近似,计算当前xy轴围成的面积
原来投影是这样用的。 当两个向量相同的时候,他们的内积是最大的,因为cos0等于1。也就是投影是最大的,如果有夹角,夹角越大那么投影就越小。现在的目标就是找到最大的投影也就是同个方向的
预测的时候,比如有b这两种点,需要判断a分别到各个绿色的的点的方向,是否跟a与b的方向解决或者相同,越接近的就是这条线的概率就越大。那为什么需要积分呢? 因为当这个部位非常超级很多个点的时候,单单计算面积之和已经不好使了,需要用积分来近似。
但是为了计算高效性,作者在预测的时候,把文件编译成C,
匹配结果:
先做完这一步
如果同时考虑多种匹配,那太难了
咱们固定好就是二分图,这个固定就是作者预先设定好的那个规则,谁连谁都事先指定好了。这样可以直接套匈牙利算法
然后看看这个例子:第一个红点与下面的三个蓝色点,那肯定是第一个的积分最大,绿色先的积分肯定要小于黄色的
细节说完了。
现在说说整体框架图
首先输入图像a,b帮我们估计18个关键点实际的位置,18个关键点那就会生成 18个特征图(看B,好几张特征图)。
c图也是18张特征图,每张特征图有19*2种?
d图使用积分计算出谁更大就选择谁
e图把所有结果连接起来
网络结构
Convolutional Pose Machines CPM当年类型的模型(感受野要大层数要深,每个stage都加上了loss)
级联的思想:
Stage1,2,3一层一层的修正,一层一层逐层优化,是当年很流行的做法
序列的作用
多个stage,相当于纠正的过程,不断调整预测结果
制定好谁跟谁连接,按照先后顺序来的
[[1, 8], [8, 9], [9, 10], [1, 11], [11, 12], [12, 13], [1, 2], [2, 3], [3, 4], [2, 14], [1, 5], [5, 6], [6, 7], [5, 15], [1, 0], [0, 14], [0, 15], [14, 16], [15, 17]]
超过了一定范围,那就是0了,只有中心点是1
整体框架
两个分支都要经过多个阶段,注意每个阶段后要把特征拼接一起
Openpose不仅能估计人体躯干的,人脸的,手的也可以。