Distribution-Aware Coordinate Representation for Human Pose Estimation阅读笔记

主要研究人体姿态估计中heatmap转坐标的方法,提出一种新的解码方法

(其实这人体姿态我毛也不会,过来看看这个heatmap解码方法)
代码:https://github.com/ilovepose/DarkPose/blob/master/lib/core/inference.py

方法

人体姿态估计简单来说就是要预测人的所有关节的坐标,这里主要研究把关节转为热体图,然后进行回归的那种方法。

根据上下文推测,这里应该是一个关键点一个通道heatmap

Coordinate Decoding

如果输出的heatmap的尺寸和原图的大小一样,那么我们只需要找到最大的点。
然而通常我们输出的heatmap需要上采样到原来的尺寸,也就是乘以一个系数 λ ∈ R + + \lambda \in \mathbb{R}_{++} λR++
这将导致亚像素定位问题(sub-pixel localisation)

The standard coordinate decoding method

h \mathbf{h} h为模型输出的heatmap
heatmap最大值 m \mathbf{m} m,第二大值 s \mathbf{s} s
那么heatmap中的关节位置
p = m + 1 4 s − m ∥ s − m ∥ 2 \mathbf{p} = \mathbf{m} + \frac{1}{4}\frac{\mathbf{s}-\mathbf{m}}{\|\mathbf{s}-\mathbf{m}\|_2} p=m+41sm2sm
这个就是最大值往第二大值的方向移动 1 4 \frac{1}{4} 41像素

最终原图像的关节位置为
p ^ = λ p \hat{\mathbf{p}} = \lambda \mathbf{p} p^=λp

这个移动的主要目的是补偿下采样导致的量化效应
heatmap中最大值点并不代表真实关节的位置,只是一个大概的位置。
在这里插入图片描述
从这个表可以看出,这个移动能够带来很大的提升

Our coordinate decoding method

我们假设预测出来的heatmap和生成的heatmap服从高斯分布
因此预测的heatmap
G ( x ; μ , Σ ) = 1 ( 2 π ) ∣ Σ ∣ 1 2 e x p ( − 1 2 ( x − μ ) T Σ − 1 ( x − μ ) ) \mathcal{G}\left(\mathbf{x};\mathbf{\mu}, \mathbf{\Sigma}\right) = \frac{1}{\left(2\pi\right) \left|\mathbf{\Sigma}\right|^{\frac{1}{2}}}\rm{exp}\left(-\frac{1}{2}\left(\mathbf{x}-\mathbf{\mu}\right)^T\mathbf{\Sigma}^{-1}\left(\mathbf{x}-\mathbf{\mu}\right)\right) G(x;μ,Σ)=(2π)Σ211exp(21(xμ)TΣ1(xμ))
其中 x \mathbf{x} x是预测heatmap中的像素坐标,
μ \mathbf{\mu} μ是高斯中心,也就是预测的关节位置
Σ \mathbf{\Sigma} Σ是协方差矩阵,是一个对角矩阵
Σ = [ σ 2 0 0 σ 2 ] \mathbf{\Sigma} = \begin{bmatrix} \sigma^2 & 0 \\ 0 & \sigma^2 \end{bmatrix} Σ=[σ200σ2]
σ \sigma σ是标准差

取个对数
P ( x ; μ , Σ ) = ln ⁡ ( G ) = − ln ⁡ ( 2 π ) − 1 2 ln ⁡ ( ∣ Σ ∣ ) − 1 2 ( x − μ ) T \begin{aligned} \mathcal{P}\left(\mathbf{x};\mathbf{\mu},\mathbf{\Sigma}\right) &= \ln \left(\mathbf{G}\right)\\ &=-\ln\left(2\pi\right) - \frac{1}{2}\ln\left(\left|\mathbf{\Sigma}\right|\right)-\frac{1}{2}\left(\mathbf{x}-\mathbf{\mu}\right)^T \end{aligned} P(x;μ,Σ)=ln(G)=ln(2π)21ln(Σ)21(xμ)T
一阶导
D ′ ( x ) ∣ x = μ = ∂ P T ∂ x ∣ x = μ = − Σ − 1 ( x − μ ) ∣ x = μ = 0 \left.\mathcal{D}^{\prime}(\boldsymbol{x})\right|_{\boldsymbol{x}=\boldsymbol{\mu}}=\left.\frac{\partial \mathcal{P}^T}{\partial \boldsymbol{x}}\right|_{\boldsymbol{x}=\boldsymbol{\mu}}=-\left.\Sigma^{-1}(\boldsymbol{x}-\boldsymbol{\mu})\right|_{\boldsymbol{x}=\boldsymbol{\mu}}=0 D(x)x=μ=xPT x=μ=Σ1(xμ) x=μ=0
二阶导
D ′ ′ ( m ) = D ′ ′ ( x ) ∣ x = m = − Σ − 1 \mathcal{D}^{\prime \prime}(\boldsymbol{m})=\left.\mathcal{D}^{\prime \prime}(\boldsymbol{x})\right|_{\boldsymbol{x}=\boldsymbol{m}}=-\Sigma^{-1} D′′(m)=D′′(x)x=m=Σ1
在最大值点泰勒展开到二阶
P ( μ ) = P ( m ) + D ′ ( m ) T ( μ − m ) + 1 2 ( μ − m ) T D ′ ′ ( m ) ( μ − m ) \mathcal{P}(\boldsymbol{\mu})=\mathcal{P}(\boldsymbol{m})+\mathcal{D}^{\prime}(\boldsymbol{m})^T(\boldsymbol{\mu}-\boldsymbol{m})+\frac{1}{2}(\boldsymbol{\mu}-\boldsymbol{m})^T \mathcal{D}^{\prime \prime}(\boldsymbol{m})(\boldsymbol{\mu}-\boldsymbol{m}) P(μ)=P(m)+D(m)T(μm)+21(μm)TD′′(m)(μm)
接着就能得到
μ = m − ( D ′ ′ ( m ) ) − 1 D ′ ( m ) \boldsymbol{\mu} = \mathbf{m}-\left(\mathcal{D}^{\prime \prime}(\boldsymbol{m})\right)^{-1}\mathcal{D}^{\prime}(\boldsymbol{m}) μ=m(D′′(m))1D(m)
说实话,不知道这个怎么得到的,我猜测是泰勒展开后求导为0得到的

代码里,一阶导和二阶导是用数字图像处理那种求导方法得到的

Heatmap distribution modulation

其实
这个图(a)里是预测的heatmap,可以看出其实是有多个峰值的
这可能会对作者的解码方法产生负面影响。为了解决这个问题,先调整一下这个heatmap的分布

更具体地,为了解决这种多个峰值的情况,作者使用了和训练时方差一样的高斯核 K \mathbf{K} K
h ′ = K ⊛ h \mathbf{h}^{\prime} = \mathbf{K} \circledast \mathbf{h} h=Kh

为了保留原来的heatmap的大小(?magnitude),最终会放缩一下
h ′ = h ′ − min ⁡ ( h ′ ) max ⁡ ( h ′ ) − min ⁡ ( h ′ ) ∗ max ⁡ ( h ) \boldsymbol{h}^{\prime}=\frac{\boldsymbol{h}^{\prime}-\min \left(\boldsymbol{h}^{\prime}\right)}{\max \left(\boldsymbol{h}^{\prime}\right)-\min \left(\boldsymbol{h}^{\prime}\right)} * \max (\boldsymbol{h}) h=max(h)min(h)hmin(h)max(h)

Coordinate Encoding

这里是讲热力图编码的方法

简单来说就是生成的时候不要用取整的方法得到热力图中心,而是直接生成

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【SOC基础】单片机学习案例汇总 Part1:电机驱动、点亮LED

📢:如果你也对机器人、人工智能感兴趣,看来我们志同道合✨ 📢:不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 📢:文章若有幸对你有帮助,可点赞 👍…

【QT】鼠标常用事件

新建项目 加标签控件 当鼠标进去,显示【鼠标进入】,离开时显示【鼠标离开】 将QLable提升成自己的控件,然后再去捕获 添加文件 改继承的类名 提升类 同一个父类,可以提升 效果 现在代码就和Qlabel对应起来了。 在.h中声明&…

【Azure】存储服务:Azure 的存储账户

文章目录 一、前提知识(建议了解)二、介绍 Azure 存储帐户三、使用 Microsoft Azure 门户创建存储帐户 一、前提知识(建议了解) 在每一个云厂商中,都有自身的云存储,也有根据不同功能进行区分的不同类型的…

双目视觉检测 KX02-SY1000型测宽仪 有效修正和消除距离变化对测量的影响

双目视觉检测的基本原理 利用相机测量宽度时,由于单个相机在成像时存在“近大远小”的现象,并且单靠摄入的图像无法知道被测物的距离,所以由被测物的跳动导致的被测物到工业相机之间距离变化,使测量精度难以提高。 因此测宽仪需…

java实现pdf文件添加水印,下载到浏览器

java实现pdf文件添加水印&#xff0c;下载到浏览器 添加itextpdf依赖 <dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.8</version> </dependency>文件下载到浏览器和指定路径 …

55个软件测试工具,正在做测试的你get到了吗

网络“黑色星期五”威胁&#xff0c;安全漏洞&#xff0c;网上银行盗窃&#xff0c;系统停机时间&#xff0c;以及许多这样的恶梦让全球的企业忧心忡忡难以入眠。确保性能具有加载的安全性和增强的经验是这个领域每个有能力的玩家所必备的。 我们为你提供了一个丰富的软件测试…

如何使用查看器筛选、搜索功能进行数据定位?

前言 我们曾探讨过观测云如何通过将内置视图与查看器相联结&#xff0c;实现更全面的数据关联分析。&#xff08;参见《内置视图联动查看器&#xff0c;实现数据关联分析》&#xff09;这里提到的查看器&#xff0c;实际是一个功能全面且强大的数据查看分析工具。其提供多种搜…

macOS M1安装wxPython报错‘tiff.h‘ file not found的解决方法

macOS12.6.6 M1安装wxPython失败&#xff1a; 报错如下&#xff1a; imagtiff.cpp:37:14: fatal error: tiff.h file not found解决办法&#xff1a; 下载源文件重新编译&#xff08;很快&#xff0c;5分钟全部搞定&#xff09;&#xff0c;分三步走&#xff1a; 第一步&…

【element-ui】表格

效果展示 组件代码 <el-table class"compTableClass" ref"tableOOOOO":class"(className in tableConfig)?tableConfig.className:":data"tableConfig.data" :height"tableConfig.height" style"width: 100%"…

学习笔记|单样本秩和检验|假设检验摘要|Wilcoxon符号检验|规范表达|《小白爱上SPSS》课程:SPSS第十一讲 | 单样本秩和检验如何做?很轻松!

目录 学习目的软件版本原始文档单样本秩和检验一、实战案例二、统计策略三、SPSS操作1、正态性检验2&#xff0e;单样本秩和检验 四、结果解读第一&#xff0c;假设检验摘要第二&#xff0c;Wilcoxon符号检验结果摘要。第三&#xff0c;Wilcoxon符号秩检验图第四&#xff0c;数…

【c++Leetcode】287. Find the Duplicate Number

问题入口 思想&#xff1a;Floyds Tortoise and Hare 这个算法除了可以检测是否有环&#xff08;问题入口&#xff09;&#xff0c;还可以用来检测重复数。当然这还需要一个慢指针才能实现。具体请点击标题跳转到原视频&#xff0c;这里是把内容再梳理一遍。如果有不对的地方…

可以直接在线制作电子画册的网站

​随着互联网技术的发展&#xff0c;越来越多的人开始使用在线工具来制作电子画册。今天&#xff0c;小编就来介绍一款可以直接在线制作电子画册的网站&#xff0c;让你的电子画册更加精美、个性化和实用。 1.首先点击FLBOOK在线制作制作电子杂志平台 2.点击开始制作&#xff0…

【Cargo Therapeutics】申请1亿美元纳斯达克IPO上市

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 猛兽财经获悉&#xff0c;美国生物制药公司【Cargo Therapeutics】近期已向美国证券交易委员会&#xff08;SEC&#xff09;提交招股书&#xff0c;申请在纳斯达克IPO上市&#xff0c;股票代码为(CRGX),Cargo Therapeutics…

社区投稿|解码Big Vector,开启Sui超扩展性的新篇章

* 本文是来自Sui生态项目Typus团队的投稿&#xff0c;文中「我们」均指代该项目团队&#xff0c;转载时修改部分不准确的用词。 本研究报告介绍了Big Vector的概念&#xff0c;这是一种我们用于 Typus V2 的新数据结构&#xff0c;以缓解 Sui 上数组和动态字段(dynamic field)…

spring boot配置ssl(多cer格式)保姆级教程

1. 准备cer格式的证书&#xff1b; 2. 合并cer证书并转化成jks格式的证书 为啥有这一步&#xff0c;因为cer证书配置在spring boot项目中&#xff0c;项目启动不起来。如果有大佬想指导一下可以给我留言&#xff0c;在此先谢过大佬。 1&#xff09;先创建一个jks格式的证…

通过python操作neo4j

在neo4j中创建结点和关系 创建结点 创建电影结点 例如&#xff1a;创建一个Movie结点&#xff0c;这个结点上带有三个属性{title:‘The Matrix’, released:1999, tagline:‘Welcome to the Real World’} CREATE (TheMatrix:Movie {title:The Matrix, released:1999, tagl…

大厂面试题-什么是服务网格?

概述 服务网格这个概念出来很久了&#xff0c;从2017年被提出来&#xff0c;到2018年正式爆发&#xff0c;很多云厂商和互联网企业都在纷纷向服务网格靠拢。像蚂蚁集团、美团、百度、网易等一线互联网公司&#xff0c;都有服务网格的落地应用。 服务网格是微服务架构的更进一…

端到端Scrum敏捷管理流程-

Leangoo领歌是一款永久免费的专业的敏捷开发管理工具&#xff0c;提供端到端敏捷研发管理解决方案&#xff0c;涵盖敏捷需求管理、任务协同、进展跟踪、统计度量等。 Leangoo领歌上手快、实施成本低&#xff0c;可帮助企业快速落地敏捷&#xff0c;提质增效、缩短周期、加速创新…

4.5 Object类

思维导图&#xff1a; 4.5 Object类笔记总结 1. 定义和重要性 Java提供的Object类是所有Java类的根类。直接或间接&#xff0c;所有的Java类都继承自Object类。它被称为超类。 2. 默认行为 当创建一个新的类且没有显式地使用extends关键字指定一个父类时&#xff0c;该类默认…

2023年【熔化焊接与热切割】报名考试及熔化焊接与热切割找解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 熔化焊接与热切割报名考试根据新熔化焊接与热切割考试大纲要求&#xff0c;安全生产模拟考试一点通将熔化焊接与热切割模拟考试试题进行汇编&#xff0c;组成一套熔化焊接与热切割全真模拟考试试题&#xff0c;学员可…