Self-supervised 3D Human Pose Estimation from a Single Image
基于单幅图像的自监督三维人体姿态估计
主页: https://josesosajs.github.io/ imagepose/
源码:未开源
摘要
我们提出了一种新的自我监督的方法预测三维人体姿势从一个单一的图像。预测网络是从描绘处于典型姿势的人的未标记图像的数据集和一组未配对的2D姿势训练的。通过最小化对注释数据的需要,该方法具有快速应用于其他铰接结构(例如,关节)的姿态估计的潜力。动物)。自我监督来自早期的想法,利用3D旋转下的预测姿势之间的一致性。我们的方法是一个实质性的进步,在国家的最先进的自我监督的方法,直接从图像中训练映射,没有肢体关节的约束或任何3D经验的姿态之前。我们使用提供图像和地面真实3D姿势的基准数据集(Human3.6M,MPI-INF-3DHP)将性能与最先进的自监督方法进行比较。尽管对注释数据的要求降低,但我们表明该方法优于Human3.6M,并与MPI-INF-3DHP的性能相匹配。定性结果的数据集ofhuman手显示的潜力,快速学习,以预测3D姿态关节结构以外的人体。
3D姿态估计流水线。我们的方法通过2D姿态的中间表示联合学习从图像中估计3D姿态。管道嵌入在更大的网络中,用于端到端训练。
引言
我们的方法同时学习2D和3D姿态表示在很大程度上是无监督的方式,只需要一个经验先验的未配对的2D姿势。我们在Human3.6M [11]和MPI-INF 3DHP [23]数据集上证明了其有效性,这是两个最受欢迎的人体姿势估计基准。我们还使用人手的合成数据集显示了该方法对其他关节结构的适应性[33]。在实验中,该方法优于最先进的自监督方法,这些方法从图像中估计3D姿态,并且在训练中需要更高的监督。总的来说,我们的方法具有以下优点:
它不假设任何3D姿势注释或配对的2D姿势注释。
它具有快速适应其他铰接结构(例如,关节)的3D姿态预测的潜力。动物和有关节的无生命物体)。
方法
我们提出的3D姿态估计模型由从全身图像映射到3D姿态的三个网络Φ、Ω、Λ的流水线组成。这在图2中左上角的蓝色虚线框中显示。管道包括:
- 从输入图像X映射到中间骨架图像s的卷积神经网络(CNN)Φ
- 从s到2D姿态表示y的第二CNN Ω映射
- 完全连接的网络Λ将2D姿态y提升到所需的3D姿态V

我们通过将这三个网络合并到一个更大的网络(图2)来一起训练它们,并优化端到端。该更大的网络被构造成并入3D姿态的变换的循环。环周围的几何一致性的程度有助于损失函数,并提供训练的自我监督。训练从描绘不同姿势的人的图像数据集开始。我们还假设我们有一个典型的2D姿态的(通常不相关的)数据集,我们使用可微渲染函数κ从该数据集获得骨架图像。这些将在GAN框架D中使用,以帮助确保生成的骨架图像是真实的。在下面的章节中,我们将提供有关模型组件的更多详细信息。
Image to 3D pose mapping
图像到姿态映射是网络Φ、Ω、Λ的组成,以将示出人的图像X映射到其3D姿态表示V。映射的第一部分是CNN Φ,它从图像x映射到骨架图像s = Φ(x),将人显示为简笔画。我们的网络Φ采用与[14]中的自动编码器类似的架构,但没有解码器级。经过训练后,s中出现的骨架与x中的人对齐。
然后,网络Ω将骨架图像s映射到2D姿态表示y = Ω(Φ(x))。非正式地,Ω学习从骨架图像中提取2D关节位置(xi,yi)。最后,Λ是将2D姿态提升到3D中的所需姿态V的神经网络。特别地,Λ(y)估计输入y中的每对(xi,yi)关节位置的深度zi = di + Δ,其中Δ是恒定深度。然后,关节vi在3D姿态V中的3D位置由下式给出:
其中Zi被强制为大于1,以防止来自负深度的不确定性。与以前的作品[3,38,41]一致,∆固定为10。
我们的提升网络Λ是基于[3,22]的工作,并在[38]之后扩展。在这种情况下,我们的扩展版本不仅输出输入中每个关节位置(xi,yi)的深度zi,还生成仰角α的值。当执行3D姿势V的旋转时,将使用该角度。特别地,我们使用α来固定垂直轴相对于执行旋转的地平面的仰角。
总结
Skeleton images and discriminator
骨架图像和鉴别器
我们鼓励训练网络生成逼真的骨架图像的帮助下,经验的2D姿势。注意,这些2D姿态是未配对的,即,它们不是训练图像的注释。首先使用[14]提出的渲染器将来自我们的经验先验的2D姿态渲染为骨架图像。令C是一组连接的关节对(i,j),e是图像像素位置,并且u是身体关节位置的一组(x,y)2D坐标。骨架图像渲染函数由下式给出:
非正式地,κ通过从链接关节的线段定义距离场来工作,并应用指数衰减来创建图像。
由[14],我们使用鉴别器网络D,其使用先前骨骼图像来鼓励预测的骨骼图像表示可信的姿势。D的任务是确定骨架图像s = Φ(x)是否看起来像真实的骨架图像,例如先前w = κ(u)中的那些。形式上,目标是学习D(s)∈ [0,1]以匹配骨架图像的参考分布p(w)和预测骨架图像的分布q(s)。对抗性损失[8]比较未配对样本w和预测s:
Random rotations and projections
随机旋转和投影
我们的模型的基本组成部分是提升过程,其允许从估计的2D输入y学习准确的3D姿态V。为了提供提升函数和最终整个端到端网络的自我监督,我们通过随机旋转三维姿态v的第二个虚拟视图(v = R * v)来模拟三维姿态v的虚拟视图。以前的工作[3]已经通过从固定分布均匀地采样方位角和仰角来选择旋转矩阵R。最近,[38]证明了学习仰角分布会导致更好的结果。因此,我们遵循他们的方法并使用Λ来预测旋转矩阵的仰角。围绕方位轴Ra的旋转从均匀分布[-π,π]采样。
根据[38],我们还通过计算分批平均值µe和标准差σe来预测数据集的仰角Re正态分布。我们从正态分布N(µe,σe)中采样,以在仰角方向Re上旋转姿态。然后,完整的旋转矩阵R由给出。
在旋转3D姿势之后,我们通过透视投影投影来投影v。然后,相同的提升网络Λ(y)产生另一个3D姿态(v’,其然后旋转回到原始视图。使用相同的透视投影将最终3D姿势v’投影到2D。3D姿势的变换的该循环提供了自我监督的一致性损失。在此上下文中,我们假设如果提升网络Λ准确地估计2D输入y的深度,则3D姿态(v)和(v’应该是相似的。相同的原理适用于y和最终2D投影y’。这给出了损失函数的以下两个分量:
此外,3D姿势v和v’应该是相似的。然而,我们不是与L2损失进行比较,而是遵循[38,41]并测量来自网络中相应阶段的批次的两个样本之间的3D姿态差异的变化。
类似于Wandt et al.[38],我们不假设样本来自相同的视频序列;样本j和k可以来自不同的序列和对象。
总结
,
由
预测,从均匀分布[-π,π]采样。
由数据集的均值方差求来,从正态分布N(µe,σe)中采样。实现自我监督
Empirical prior on 2D pose
LikeWandt等人[38],我们使用归一化流来提供2D姿势的先验。归一化流将简单分布(例如,正态分布)转换成复分布,使得可以容易地计算在该复分布下的样本密度。设Z ∈ RN为正态分布,g为可逆函数g(z)= ¯y,其中¯y ∈ RN为二维人体姿态向量y在PCA子空间中的投影。通过改变变量,y的概率密度函数由下式给出:
其中f是g的倒数,det中是雅可比矩阵。在[38]中的归一化流程实现之后,我们将f表示为神经网络[4],并在具有负对数似然损失的2D姿态数据集上进行优化:
Additional losses
我们计算从骨骼图像到2D姿态的映射的损失y = Ω(s)。我们使用与[14]相同的损失,但没有预训练Ω,即,我们与所有其他网络同时学习这种映射。LΩ由下式给出
其中u表示来自未配对先验的2D姿态,s是预测的骨架图像,并且λ是设置为0.1的平衡系数。函数κ是骨架图像渲染器。
基于将相对骨长度并入姿态估计方法[21,28,38]的已证明的有效性,我们添加该方法以在估计3D姿态时施加软约束。按照[38]中的公式,我们计算第n个骨骼的相对骨骼长度bn除以给定姿势v的所有骨骼的平均值。我们使用预先计算的相对骨骼长度作为高斯先验的平均值。然后,骨长度的负对数似然定义损失函数
其中,N是由关节之间的连接性定义的骨骼数量。请注意,这是一个软约束,允许个体之间的相对骨长度变化。
Training
我们从头开始训练Φ、Ω、D和Λ。如[38]所示,只有归一化流是独立预训练的。用于训练我们的模型的完整损耗函数具有七个分量,为了便于消融研究,我们将这些损失项中的三个分组并将其表示为Lbase
因此,最终的复合损失函数被定义为:
在测试期间,我们只保留由图2左上方框中所示的训练Φ、Ω和Λ网络组成的流水线。关于网络和培训的更详细说明,请参见补充部分。
相关文章:

Self-supervised 3D Human Pose Estimation from a Single Image
基于单幅图像的自监督三维人体姿态估计 主页: https://josesosajs.github.io/ imagepose/ 源码:未开源 摘要 我们提出了一种新的自我监督的方法预测三维人体姿势从一个单一的图像。预测网络是从描绘处于典型姿势的人的未标记图像的数据集和一组未配对…...

ubuntu下cups部分场景
第一章:部分操作指令 在计算机领域中,cups 是“通用UNIX打印系统”(Common UNIX Printing System)的缩写,它是一种用于在UNIX-like操作系统上管理打印任务的开源打印系统。cups 提供了一个框架,允许用户和…...

通过geoserver imageMosic发布多张tif数据
通过geoserver imageMosic发布多张tif数据 reference: https://zhuanlan.zhihu.com/p/132388558 https://zhuanlan.zhihu.com/p/103674876 https://docs.geoserver.org/latest/en/user/tutorials/imagemosaic_timeseries/imagemosaic_timeseries.html 步骤 下载数据 http…...

输出图元(四)8-2 OpenGL画点函数、OpenGL画线函数
4.3 OpenGL画点函数 要描述一个点的几何要素,我们只需在世界坐标系中指定一个位置。然后该坐标位置和场景中已有的其他几何描述一起被传递给观察子程序。除非指定其他属性值,OpenGL 图元按默认的大小和颜色来显示。默认的图元颜色是白色&#x…...

java八股文
6. 如何保证消息的可靠性? 在RabbitMq的整个消息投递过程中,有三种情况下,会存在消息丢失的问题: 6. RabbitMq如何保证消息的可靠性? 所以从这三个维度保证消息的可靠性去可靠性传递就可以了,从生产者发送…...

算法通关村——解析堆的应用
在数组中找第K大的元素 LeetCode21 Medium 我们要找第 K 大的元素,如果我们找使用大堆的话那么就会造成这个堆到底需要多大的,而且哪一个是第 K 的的元素我们不知道是哪一个索引,我们更想要的结果就是根节点就是我们要找的值,所以…...

爬虫源码---爬取小猫猫交易网站
前言: 本片文章主要对爬虫爬取网页数据来进行一个简单的解答,对与其中的数据来进行一个爬取。 一:环境配置 Python版本:3.7.3 IDE:PyCharm 所需库:requests ,parsel 二:网站页面 我们需要…...

Python的由来和基础语法(一)
目录 一、Python 背景知识 1.1Python 是咋来的? 1.2Python 都能干啥? 1.3Python 的优缺点 二、基础语法 2.1常量和表达式 2.2变量和类型 变量的语法 (1) 定义变量 (2) 使用变量 变量的类型 (1) 整数 (2) 浮点数(小数) (3) 字符串 (4) 布尔 (5) 其他 动态类型…...

使用maven创建springboot项目
创建maven快速启动项目 命令行或者idea、eclipse快捷创建也可以 pom.xml下project项目下导入springboot 父工程 <!--导入springboot 父工程--> <parent><artifactId>spring-boot-starter-parent</artifactId><groupId>org.springframework.bo…...

MySQL 基本操作1
目录 Create insert 插入跟新 1 插入跟新 2 Retrive select where 子句查询 1.查找数学成绩小于 80 的同学。 2.查询数学成绩等于90分的同学。 3.查询总分大于240 的学生 4.查询空值或者非空值 5.查询语文成绩在70~80之间的同学 6.查询英语成绩是99 和 93 和 19 和…...

linux内网yum源服务器搭建
1.nginx: location / {root /usr/local/Kylin-Server-V10-SP3-General-Release-2303-X86_64;autoindex on;autoindex_localtime on;autoindex_exact_size off; } 注:指定到镜像的包名 2.修改yum源地址 cd /etc/yum.repos.d/vim kylin_x86_64.repo 注: --enabled设置为1 3.重…...

机器学习与数据分析
【数据清洗】 异常检测 孤立森林(Isolation Forest)从原理到实践 效果评估:F-score 【1】 保护隐私的时间序列异常检测架构 概率后缀树 PST – (异常检测) 【1】 UEBA架构设计之路5: 概率后缀树模型 【…...

项目总结知识点记录-文件上传下载(三)
(1)文件上传 代码: RequestMapping(value "doUpload", method RequestMethod.POST)public String doUpload(ModelAttribute BookHelper bookHelper, Model model, HttpSession session) throws IllegalStateException, IOExcepti…...

基于LinuxC语言实现的TCP多线程/进程服务器
多进程并发服务器 设计流程 框架一(使用信号回收僵尸进程) void handler(int sig) {while(waitpid(-1, NULL, WNOHANG) > 0); }int main() {//回收僵尸进程siganl(17, handler);//创建服务器监听套接字 serverserver socket();//给服务器地址信息…...

浅谈JVM垃圾回收机制
一、HotSpot VM中的GC分为两大类 1.部分收集(Partial GC): 新生代收集(Minor GC/Young GC):只对新生代进行垃圾收集老年代收集(Major GC/Old GC):只队老年代进行垃圾收集混合收集(Mixed GC):对整个新生代和老年代进行垃圾收集 2.整堆收集(Full GC) 收集整个Java堆和方法区 …...

【80天学习完《深入理解计算机系统》】第十二天3.6数组和结构体
专注 效率 记忆 预习 笔记 复习 做题 欢迎观看我的博客,如有问题交流,欢迎评论区留言,一定尽快回复!(大家可以去看我的专栏,是所有文章的目录) 文章字体风格: 红色文字表示&#…...

基于Python+OpenCV智能答题卡识别系统——深度学习和图像识别算法应用(含Python全部工程源码)+训练与测试数据集
目录 前言总体设计系统整体结构图系统流程图 运行环境Python 环境PyCharm安装OpenCV环境 模块实现1. 信息识别2. Excel导出模块3. 图形用户界面模块4. 手写识别模块 系统测试1. 系统识别准确率2. 系统识别应用 工程源代码下载其它资料下载 前言 本项目基于Python和OpenCV图像处…...

Redis集群操作-----主从互换
一、将节点cluster1的主节点7000端口的redis关掉 [rootredis-cluster1 src]# ps -ef |grep redis 二、查看集群信息:...

肖sir __linux命令拓展__05
linux命令拓展 1.追加内容到某文件 echo “i like learn linux” >>quzhi.txt 2.删除指定的空目录: rmdir 目录名 rmdir -p 目录名 (删除指定的空目录及其内子空目录) 3.显示zip包信息 zipinfo 压缩包名 (显示压缩包内的文…...

大白菜清理电脑密码教程
首先安装大白菜: 插入u盘一键制作启动盘 制作成功,重启进入u盘启动模式...

[libglog][FFmpeg] 如何把 ffmpeg 的库日志输出到 libglog里
ffmpeg 提供了自己的 log 模块 av_log,会默认把输出打印到 stderr 上,因此无法方便地跟踪日志。但是 ffmpeg 提供了一个接口 av_log_set_callback 以供外界自定义自己的日志输出。 libglog 提供的是c 形式的日志输出样式,因此需要将二者关联起…...

【Unity-Cinemachine相机】虚拟相机(Virtual Camera)的本质与基本属性
我们可以在游戏进行时修改各个属性,但在概念上,最好将Virtual Camera 当作一种相机行为的“配置文件”,而不是一个组件。 我们的相机有几种行为就为它准备几种虚拟相机,比如角色移动就为它第三人称相机,瞄准就准备一个…...

LeetCode:718. 最长重复子数组 - Python
718. 最长重复子数组 问题描述: 给两个整数数组 nums1 和 nums2 ,返回 两个数组中 公共的 、长度最长 的 子数组 的 长度 。 示例 1: 输入:nums1 [1,2,3,2,1], nums2 [3,2,1,4,7] 输出:3 解释:长度最长…...

【面试题精讲】Redis如何实现分布式锁
首发博客地址 系列文章地址 Redis 可以使用分布式锁来实现多个进程或多个线程之间的并发控制,以确保在给定时间内只有一个进程或线程可以访问临界资源。以下是一种使用 Redis 实现分布式锁的常见方法: 获取锁: 客户端尝试使用 SETNX命令在 Re…...

list【2】模拟实现(含迭代器实现超详解哦)
模拟实现list 引言(实现概述)list迭代器实现默认成员函数operator* 与 operator->operator 与 operator--operator 与 operator!迭代器实现概览 list主要接口实现默认成员函数构造函数析构函数赋值重载 迭代器容量元素访问数据修改inserterasepush_ba…...

Nginx+Tomcat的动静分离与负载均衡
目录 前言 一、案例 二、Nginx的高级用法 三、tomcat部署 四、Nginx部署 五、测试 总结 前言 通常情况下,一个 Tomcat 站点由于可能出现单点故障及无法应付过多客户复杂多样的请求等情况,不能单独应用于生产环境下,所以我们需要一套更…...

【设计模式】Head First 设计模式——策略模式 C++实现
设计模式最大的作用就是在变化和稳定中间寻找隔离点,然后分离它们,从而管理变化。将变化像小兔子一样关到笼子里,让它在笼子里随便跳,而不至于跳出来把你整个房间给污染掉。 设计思想 将行为想象为一族算法,定义算法族…...

c#object类中方法的使用
C#中的Object类是所有类的基类,它定义了一些通用的方法和属性,可以在任何对象上使用。以下是Object类中常用的方法和属性的使用: 1.ToString():将对象转换为字符串表示形式。 string str obj.ToString();2.Equals():…...

三种常用盒子布局的方法
在Vue中,可以使用各种CSS布局属性和技巧来设置盒子的布局。以下是一些常用的方法: 1.使用Flexbox布局:在包含盒子的父元素上设置display: flex,然后可以使用flex-direction、justify-content和align-items 等属性来控制盒子的布局…...

GB28181学习(二)——注册与注销
概念 使用REGISTER方法进行注册和注销;注册和注销应进行认证,认证方式应支持数字摘要认证方式,高安全级别的宜支持数字证书认证;注册成后,SIP代理在注册过期时间到来之前,应向注册服务器进行刷新注册&…...