openpose原理以及各种细节的介绍

目录

前言:

效果演示:

视频效果

完整代码+UI界面


前言:

   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不仅能估计人体躯干的,人脸的,手的也可以。

效果演示:

视频效果

历史记录

 

完整代码+UI界面

视频,笔记和代码,以及注释都已经上传网盘,放在主页置顶文章

  • 25
    点赞
  • 129
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值