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

news2024/11/30 12:48:38

主要研究人体姿态估计中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

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

保障效率与可用,分析Kafka的消费者组与Rebalance机制

系列文章目录 上手第一关,手把手教你安装kafka与可视化工具kafka-eagle Kafka是什么,以及如何使用SpringBoot对接Kafka 架构必备能力——kafka的选型对比及应用场景 Kafka存取原理与实现分析,打破面试难关 防止消息丢失与消息重复——Kafka可…

YOLOv5 分类模型的预处理

YOLOv5 分类模型的预处理 flyfish 版本 6.2 将整个代码简化成如下代码 imgsz224 file "/home/a/Pictures/1.jpg" transforms classify_transforms(imgsz) im cv2.cvtColor(cv2.imread(file), cv2.COLOR_BGR2RGB) print(im.shape)im transforms(im) print(im.…

【计算机网络】第二章:应用层

应用层协议原理 客户-服务器体系结构: 特点:客户之间不能直接通信;服务器具有周知的,固定的地址,该地址称为IP地址。 配备大量主机的数据中心常被用于创建强大的虚拟服务器;P2P体系结构: 特点&…

项目压测优化

基本信息 客户名称:xxx 产品名称:ATS 版本号:版本无关 问题分类:性能问题 问题描述 压测付款查询和收款查询接口,发现cpu过高,响应时间过长不符合要求。 客户要求:1500并发情况下,接…

BUUCTF 后门查杀 1

BUUCTF:https://buuoj.cn/challenges 题目描述: 小白的网站被小黑攻击了,并且上传了Webshell,你能帮小白找到这个后门么?(Webshell中的密码(md5)即为答案)。 密文: 下载附件,解压得到一个网站文件夹。 解…

呼吸灯【FPGA】

晶振50Mhz 1us 等于 计0~49 1ms等于 0~999us 1s等于 0~999ms //led_outalways(posedge FPGA_CLK_50M_b5 or negedge reset_e8) //【死循环】敏感【触发条件:上升沿 clk】【运行副本】if(reset_e81b0)begin //50Mhz晶振, 49_999_999 是 1秒…

畅销书《Kali Linux高级渗透测试》更新版速速查收~

懒大王感谢大家的关注和三连支持~ 作者简介: 懒大王敲代码,正在学习嵌入式方向有关课程stm32,网络编程,数据结构C/C等 今天给大家推荐畅销书《Kali Linux高级渗透测试》,希望大家能觉得实用! 欢迎大家点赞…

10.30寄存器,寄存器堆

寄存器 8位环形移位寄存器 module shift_regist (input wire clk,input wire rstn,input wire [7:0]D,output reg [7:0]Q ); always (posedge clk or negedge rstn) beginif(!rstn)Q<8b000000;elseQ<{D[6:0],D[7]} ; end endmodule //shift_regist 输入有时钟…

Qt入门日记1

目录 1.Qt简介和案例 2.第一个Qt程序 3.学会查看帮助文档 4.创建一个按钮 5.对象树简介 6.Qt的坐标系 7. 信号和槽 7.1自定义信号和槽 7.2信号连接信号 7.3拓展 7.4Qt4版本以前的connect 1.Qt简介和案例 Qt是一个跨平台的C图形用户界面应用程序框架(就是一个库吧…

2024“点点点”测试员如何上岸测试开发岗?附完整学习路线!

&#x1f4e2;专注于分享软件测试干货内容&#xff0c;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;交流讨论&#xff1a;欢迎加入我们一起学习&#xff01;&#x1f4e2;资源分享&#xff1a;耗时200小时精选的「软件测试」资…

干货分享 | 一分钟带你了解TSMaster小程序编辑代码智能提示功能

本文给大家带来TSMaster小程序编辑的新功能&#xff0c;其中主要包含&#xff1a;代码编辑智能提示功能、可用外部代码编辑器编辑小程序代码并同步。 本文关键字&#xff1a;C小程序、Python小程序、代码智能提示、外部代码编辑器、Visual Studio 目录/Catalog ● TSMaster的…

11月1日星期三今日早报简报微语报早读

11月1日星期三&#xff0c;农历九月十八&#xff0c;早报微语早读分享。 1、神舟十六号航天员乘组平安抵京&#xff1b; 2、微信/抖音/B站等平台&#xff1a;将推动50万粉以上“自媒体”账号实名信息展示&#xff1b; 3、第三批鼓励仿制药品建议目录公示&#xff0c;包括抗癌…

灰狼优化算法(GWO)python

目录 一、灰狼优化算法的python实现 二、灰狼优化算法与遗传算法的对比分析&#xff08;python&#xff09; 2.1 GWO1.py 2.2 GA1.py 2.3 GWO_vs_GA.py 2.4 运行结果 ​三、基于莱维飞行改进的灰狼优化算法的python实现 一、灰狼优化算法的python实现 import numpy as …

报修软件有什么用?企业如何做好设备管理与维护?

在当今的商业环境中&#xff0c;设备设施的维护和管理已经成为企业运营的重要环节。无论是学校、酒店、物业等大型企事业单位&#xff0c;还是运维集成商、制造工厂等企业单位&#xff0c;都需要对设备设施进行有效的管理。报修软件作为一种智能化的解决方案&#xff0c;为设备…

钉钉会议室无需API开发轻松连接OA、电商、营销、CRM、用户运营、推广、客服等近千款系统

钉钉会议室支持成员管理、主持人权限管理、高级会控、组织内会议全员静音、共享权限控制等会议管理能力&#xff0c;确保会议安全可控的进行。 官网&#xff1a;https://page.dingtalk.com/wow/z/dingtalk/Rax/RoomsIntro 集简云无代码集成平台&#xff0c;轻松连接钉钉会议室…

专业软件测评中心▏App渗透测试的测试流程和注意事项简析

当前&#xff0c;我国数字经济蓬勃发展&#xff0c;为实现高质量发展注入了澎湃动力&#xff0c;App的需求和供给都十分旺盛&#xff0c;因此安全问题逐渐成为用户最为关注的话题之一&#xff0c;而渗透测试至关重要。 一、App渗透测试流程&#xff1a;   1、需求收集&#…

Vray3.6 for SketchUp安装失败错误如何处理?

SketchUp这款软件是一个极受欢迎并且易于使用的3D软件&#xff0c;有很多朋友会通过Sketchup建模或是Sketchup渲染操作。 Sketchup 建模渲染来说&#xff0c;也是较简单的一款软件&#xff0c;今天小编聊的话题不是Sketchup怎样渲染的操作。 而是对于一些新手朋友提到的关于V…

functools模块:让Python编程更高效

​​​​​​​ 概要 不知道小伙伴们在Python编程中&#xff0c;我们经常会遇到一些需要反复使用的代码片段&#xff0c;例如装饰器、高阶函数等。为了提高代码的复用性和可读性&#xff0c;Python提供了functools模块。functools模块包含了许多实用的功能&#xff0c;…

软文推广方案,媒介盒子分享

作为企业宣传的手段&#xff0c;它能用较低的成本获得较好的宣传效果&#xff0c;但有许多企业在进行软文推广时并不起效&#xff0c;这是因为没掌握好方法。今天媒介盒子就来告诉大家&#xff0c;通用的软文推广方案。 一、 明确推广目标以及受众 明确软文推广的目标有助于明…