论文阅读笔记:Sapiens: Foundation for Human Vision Models

devtools/2024/11/14 19:31:06/

Sapiens: Foundation for Human Vision Models

  • 1 背景
    • 1.1 问题
    • 1.2 目标
  • 2 方法
  • 3 创新点
  • 4 模块
    • 4.1 Humans-300M数据集
    • 4.2 预训练
    • 4.3 2D位姿估计
    • 4.4 身体部位分割
    • 4.5 深度估计
    • 4.6 表面法线估计
  • 5 实验
    • 5.1 实现细节
    • 5.2 2D位姿估计
    • 5.3 身体部位分割
    • 5.4 深度估计
    • 5.5 表面法线估计
    • 5.6 讨论
  • 6 结论

论文:https://arxiv.org/abs/2408.12569
代码:https://github.com/facebookresearch/sapiens
Demo:1.https://about.meta.com/realitylabs/codecavatars/sapiens
             2.https://huggingface.co/collections/facebook/sapiens-66d22047daa6402d565cb2fc

1 背景

1.1 问题

目前在2D和3D中生成具有真实感的人方面已取得重大的进展。这些方法的成功很大程度归功于对各种资产的稳健估计,例如2D关键点,细粒度人体部分分割,深度或者表面法线。

例如ControlNet。

问题1:对这些资产的稳健和准确估计仍然是一个活跃的研究领域,复杂的系统来提高单个任务的性能往往阻碍了更广泛的应用。

问题2:野生数据集的标签缺乏准确性。

1.2 目标

作者认为,这种以人为中心的模型应该满足3个标准:泛化性,广泛适用性和高保真性:

(1)泛化性保证了对未知条件的鲁棒性,使模型能够在不同的环境中一致的执行。

(2)广泛的适用性表明了该模型的通用性,使其在最少修改的情况下适用于广泛的任务。

(3)高保真性是指模型能够产生精确的、高分辨率的输出,这对于人类生成任务来说是必不可少的。

本文的目标是提供一个体现了这些属性的统一的框架和模型,称为Sapines。

2 方法

(1)依据之前的工作,利用大型数据集和可扩展的模型架构是泛化的关键。

(2)为了更广泛的适用性,采用先预训练再微调的方法,使得预训练后能够以最小的调整来适应特定的任务。

这种方法提出的一个关键问题是:哪种类型的数据对预训练最有效?在给定计算限制的情况下,应该把重点放在收集尽可能多的人类图像上,还是最好在一个较小的数据集上预训练,以更好的反应显示世界的变异性?现有的方法往往忽略了下游任务背景下的预训练数据分布。为了研究预训练数据分布对特定人类任务的影响,作者收集制作了Humans-300M数据集,该数据集包含3亿张不同的人类图像,这些未标记的图像用于从头预训练各种尺寸的VIT,参数计数范围从300M到20B。

从大型数据集中学习通用视觉特征的各种自监督方法中,作者选择了masked-autoencoder(MAE)方法。MAE相比于对比策略或多推理策略,其单便推理允许以相同的计算资源处理更大数量的图像。

Segment Anything中也是用MAE对图像编码器进行预训练的。
在这里插入图片描述

(3)为了更高的保真度,作者将预训练的原始输入分辨率提高到1024像素,与现有最大的视觉主干(MAWS预训练的VIT模型)相比,FLOPs增加了4倍。每个模型在1.2万亿个tokens上进行预训练。

这里的1.2万亿个tokens应该是这么计算来的:

patch_size = 16
image_size = 1024
image_num = 3E8
token_num = (image_size // patch_size)**2 * image_num

表1列出了与早期方法的比较。
在这里插入图片描述

为了在以人为中心的任务上进行微调,作者使用了一致的编码器-解码器架构,编码器使用预训练权重进行初始化,而解码器是一个随机初始化的轻量级的,任务特定的头。然后对这两个组件进行端到端的微调。四个基本的以人为中心的视觉任务——2D姿态估计、身体部位分割、深度估计和表面法线预测,如图1所示。
在这里插入图片描述

由于Benchmark往往包含噪音标签,在模型微调过程中提供不一致的监督信号,同时,利用细粒度和精准的注释也很重要。因此作者提出了一个更密集的用于姿态估计的2D全身关键点集和一个用于身体部位分割的相机类别词汇表。具体来说,作者引入了一个包含身体,手,脚和面部的308个关键点综合合集。此外将分割类扩展到28类,涵盖了头发,舌头,牙齿,上/下唇、躯干等身体部位。为了保证标注的质量和一致性以及高度的自动化,作者使用多视图捕获设置来收集位姿和分割标记。作者还利用以人为中心的合成数据进行深度和法线估计,利用RenderPeople的600次详细扫描来生成高分辨率的深度图和表面法线。

这里作者分别从模型和数据两个方面,保证子任务输出结果的准确性,即文中提出的保真度。

3 创新点

  1. 作者引入了Sapiens,一个在大规模人体图像数据集上预训练的VIT家族

  2. 本研究表明,在相同的计算预算下,简单的数据整理和大规模预训练显著提高了模型的性能

  3. 模型经过高质量甚至合成标签的微调,表现出了广泛的泛化性

  4. 本文是第一个原生支持以人为中心任务的高保真推理的1K分辨率模型,在二维姿势、身体部位分割、深度和正常估计的基准测试集上取得了最先进的性能。

4 模块

4.1 Humans-300M数据集

本文使用了一个大型的人类图像数据集对大约10亿张野生人类图像进行预训练。预处理包含丢弃有水印,文本,艺术描述或非自然元素的图像。随后,使用现成的行人边界框检测器对图像进行过滤,保留检测分数在0.9以上且边界框超过300像素的图像。图2给出了数据集中每幅图像的人数分布情况,其中超过2.48亿张图像包含多个主体。
在这里插入图片描述

4.2 预训练

作者遵循masked-autoencoder方法进行预训练。模型是在给定原始人体图像的部分观测值下训练的,以重构原始人体图像。与所有的自编码器一样,本文模型包含一个编码器,将可见光图像映射到一个潜在的表示,以及一个解码器,从这个潜在的表示中重建原始图像。预训练数据集有单人图像和多人图像组成,每幅图像以正方形的宽高比例缩放到固定大小,类似于VIT,将图像划分成固定大小的规则非重叠块。随机选择这些块的子集并对其进行掩膜,剩余部分可见。将掩码块占可见块的比例定义为掩膜比,在整个训练过程中保持固定不变。图3展示了本文预训练模型在未知人体图像上的重建。

本文模型表现出对各种图像特征的泛化能力,包括尺度、裁剪、主体的年龄,种族和数量。本文的模型中每个图像块token占图像面积的0.02%((16*16)/(1024*1024)≈0.02%),而标准Vits的图像块面积token占图像面积的0.4%((16*16)/(224*224)≈0.4%),减少了16倍,这为模型提供了细粒度的token推理。如图3,即使使用了95%的掩码比例,本文模型也可以在遮挡样本上实现人体解剖结构的重建。
在这里插入图片描述

4.3 2D位姿估计

遵循自上而下的范式,即从输入图像 I ∈ R H × W × 3 I∈R^{H×W×3} IRH×W×3中检测 K K K 个关键点的位置。大多数方法将这个问题归结为热力图预测, K K K 个热力图表示对应关键点处于任意空间位置的概率。作者定义了一个用于关键点检测的姿态估计transformer P P P。训练和推理时的边界框缩放为 H × W H×W H×W,并作为输入提供给P。设 y ∈ R H × W × K y∈R^{H×W×K} yRH×W×K 表示给定输入 I I I 对应于真值关键点的 K K K 个热力图。位姿估计器将输入 I I I 转换成为一组预测热力图 y ^ ∈ R H × W × K \hat{y}∈R^{H×W×K} y^RH×W×K,即 y ^ = P ( I ) \hat{y}=P(I) y^=P(I) P P P 的训练目标是最小化均方差损失 L p o s e = M S E ( y , y ^ ) L_{pose}=MSE(y,\hat{y}) Lpose=MSE(y,y^)。在微调过程中, P P P的编码器用预训练的权值初始化,解码器随机初始化。长宽比 H : W H:W H:W 设置为4:3。预训练的位置嵌入相应地被插值。作者使用具有反卷积和卷积操作的轻量级解码器。

作者对 P P P 中的编码器和解码器进行了跨多个骨架的微调,包括 K = 17 K=17 K=17 K = 133 K=133 K=133 和一个新的 K = 308 K=308 K=308 高细节骨架,如图4(左)所示。与现有的最多包含68个面部关键点的格式相比,本文档 标注由243个面部关键点组成,包括眼睛,嘴唇,鼻子和耳朵周围的代表性点。这种设计是为了细致捕捉真是世界中面部表情的细微细节而量身定做。利用这些关键点,作者从一个室内拍摄装置中手动标注了100万张4K分辨率的图像。
在这里插入图片描述

4.4 身体部位分割

人体部位分割通常被称为人体解析,其目的是将输入图像 I I I 中的像素分为 C C C 类。大多数方法将这个问题转化为估计每个像素的类别概率,以创建一个概率图 p ^ ∈ R H × W × C \hat{p}∈R^{H×W×C} p^RH×W×C,即 p ^ = S ( I ) \hat{p}=S(I) p^=S(I),其中 S S S 是分割模型。如前所述,对 S S S 采用相同的编码器-解码器结构和初始化方案, S S S 被微调以最小化实际概率图 p p p 和预测概率图 p ^ \hat{p} p^ L s e g = W e i g h t e d C E ( p , p ^ ) L_{seg}=WeightedCE(p,\hat{p}) Lseg=WeightedCE(p,p^)

作者在两个部分分割词汇表中微调 S S S:C=20的标准集和C=28的新词汇表,如图4(右)所示。

4.5 深度估计

对于深度估计,作者采用了用于分割的架构,修改后的解码器输出通道设置为1进行回归。用 d ∈ R H × W d∈R^{H×W} dRH×W 表示图像 I I I 的真实深度图,用D表示深度估计器,其中 d ^ = D ( I ) \hat{d}=D(I) d^=D(I),M 表示图像中人类像素的个数。对于相对深度估计,作者使用图像中的最大和最小深度将 d d d 归一化到 [0,1]。 D D D 的损失 L d e p t h L_{depth} Ldepth 定义如下:
在这里插入图片描述

出自论文《Depth map prediction from a single image using a multi-scale deep network》,主要是为了解决平均尺度误差占总误差很大一部分的问题,例如真值深度全是0,预测深度全1,相对深度是没有误差的,但如果直接用L1或L2就会产生误差,所以作者令:

L d e p t h = 1 M ∑ i = 1 M ( l o g ( d i ) − l o g ( d ^ i ) + α ( d , d ^ ) ) L_{depth}=\frac{1}{M}\sum_{i=1}^M(log(d_i)-log(\hat{d}_i)+\alpha(d,\hat{d})) Ldepth=M1i=1M(log(di)log(d^i)+α(d,d^))

其中 α ( d , d ^ ) = 1 M ∑ i = 1 M ( l o g d ^ i − l o g ( d i ) ) \alpha(d,\hat{d})=\frac{1}{M}\sum_{i=1}^M(log{\hat{d}_i}-log(d_i)) α(d,d^)=M1i=1M(logd^ilog(di)),这个式子经过推导最终成为式(3)。

推导过程可见:https://zhuanlan.zhihu.com/p/29312227

同时,作者利用600张高分辨率摄影测量人体扫描数据渲染了50万张合成图像,如图5所示,以获得具有高保真度的鲁棒弹幕深度估计模型。从100张HDRI环境图集合中选择随机背景,在场景中放置一个虚拟相机,随机调整其焦距,旋转和平移,以获取4K分辨率的图像极其相关的GT真值深度图。
在这里插入图片描述

4.6 表面法线估计

与前面的任务类似,作者将法向量估计器 N N N 的解码器输出通道设置为3,对应于每个像素处法向量的 x y z xyz xyz 分量。生成的合成数据也被用作表面法线估计的监督。设 n n n 为图像 I I I 的真值发现图,即 n ^ = N ( I ) \hat{n}=N(I) n^=N(I)。与深度相似, 损失 L n o r m a l L_{normal} Lnormal 仅针对图像中的人体像素计算,定义如下:
在这里插入图片描述

总结:

综上所述,2D位姿估计,身体部位估计,深度估计和表面法线估计的网络结构基本一致,差别在于解码器的输出通道和含义不同,2D位姿估计的K个通道表示K个关键点的概率,身体部位估计的C个通道表示C个身体部位类别的概率,深度估计的1个通道表示相对深度,表面法线的3个通道表示 x y z xyz xyz 分量。

5 实验

5.1 实现细节

  1. 最大的模型Sapiens-2B使用Pytorch在1024个A100上预训练了18天。

  2. 预训练的分辨率为1024*1024,patch size为16。

  3. 微调的分辨率高宽比例为4:3,即1024*768。

  4. 不同尺寸的模型设计指标如表2。
    在这里插入图片描述

5.2 2D位姿估计

作者使用现成的边界框检测器进行单人姿态推断。表3展示了与现有的全身姿态估计方法的比较。
在这里插入图片描述

尽管只使用了来自室内捕获的数据和注释,但Sapiens显示出队真实世界的强大泛化能力,如图6所示。
在这里插入图片描述

5.3 身体部位分割

表4展示Spaiens与其他方法的对比。
在这里插入图片描述

图7展示了本文模型的效果。
在这里插入图片描述

5.4 深度估计

表5比较了现有深度估计SOTA模型和本文提出方法的对比。
在这里插入图片描述

图8将本文方法的效果和DepthAnything进行了对比。
在这里插入图片描述

5.5 表面法线估计

表6将本文模型与现有的人体表面法线估计模型进行了对比。
在这里插入图片描述

图9将本文模型与PIFuHD,ECON进行了对比。
在这里插入图片描述

5.6 讨论

(1)预训练数据的重要性:网络提取的特征质量与预训练数据质量紧密相连。表7展示了使用Human300M进行预训练可以在所有指标上获得更好的性能,这突出了在固定的计算预算下,以人为中心的预训练的好处。
在这里插入图片描述

作者还研究了在预训练期间所能看到的人类图像的数量的影响。图10显示,随着预训练数据规模的增加,性能稳步提高,没有出现饱和现象。
在这里插入图片描述

(2)零样本泛化性:本文模型对各种情况都具有泛化性。例如在分割中,Sapiens在单人图像上微调,主体多样性有限,背景变化小,且只有第三人称视图(如图4)。但因为大规模预训练,使得模型能够再多个主体,不同年龄和视图上进行泛化,如图11所示,这些观察对其他任务也成立。
在这里插入图片描述

(3)缺陷:虽然模型整体很好但并不完美,在具有复杂姿态、稀有姿态、拥挤和严重遮挡的人体图像上效果欠佳。尽管激进的数据增广和裁剪策略可以缓解这一问题,但作者认为本文模型可以作为一种工具来获得大规模的,真实世界的人的标签进行监督,以开发下一代人类视觉模型。

6 结论

本文模型的性能归功于:

  1. 在一个专门为理解人类而定制的大型数据集上进行大规模的预训练

  2. 扩展的高分辨率和大容量的VIT骨干

  3. 真实的和合成的数据上的高质量注释


http://www.ppmy.cn/devtools/115498.html

相关文章

【设计模式-享元】

Flyweight Pattern(享元模式) 是一种结构型设计模式,旨在通过共享对象来减少内存使用和提高性能。享元模式特别适用于需要大量相似对象的场景,可以有效地减少内存开销。 核心思想 享元模式通过将对象的共享部分(共享…

Dockerfile 安装Centos7、MySQL和Redis

为了创建一个包含 CentOS 7、MySQL 和 Redis 的 Docker 镜像,并持久化 MySQL 和 Redis 的数据,需要: 编写 Dockerfile 安装 CentOS 7、MySQL 和 Redis。在运行 Docker 容器时挂载数据卷来持久化数据。 以下是一个示例 Dockerfile&#xff0…

es6 和 commonJS 模块管理的区别

ES6 模块和 CommonJS 模块是两种广泛使用的 JavaScript 模块化方案。它们之间有许多显著的区别,包括语法、特性、运行时行为、兼容性等方面。 1. 模块引入背景 在 JavaScript 语言发展早期,并没有提供官方的模块化机制。随着应用规模的增加&#xff0c…

学习笔记JVM篇(五)

JVM常用命令参数 1、JPS JPS全称 Java Process Status Tool,这个命令与Liunx的PS很像,下面我们测试一下这个命令,首先编写一段非常简单的Java代码。 JPS的语法 JPS [options] [hostid] options:选项 -q: 只显示进程 ID (PID)…

【C++】—— string模拟实现

前言&#xff1a; 学习了string的使用&#xff0c;总感觉了解不是很深厚&#xff1b;自己模拟实现string类来帮助自己理解。 这里只是实现了一部分内容&#xff08;并没有实现完整的string类&#xff09;。 先来实现string类里面的成员变量&#xff1a; #include<iostream…

python qt5 常用

QT5中如何设置让窗口根据屏幕比例显示设置&#xff1f; desktop QDesktopWidget().screenGeometry() self.resize(int(desktop.width() * 0.3), int(desktop.height()*0.5)) QT5中关于背景穿透问题的处理方式&#xff1f; 场景如下&#xff1a;我们在开发的时候&#xff0c…

【C语言】数据类型和变量

个人主页 &#xff1a; zxctscl 如有转载请先通知 文章目录 1. 数据类型1.1 字符1.2 整型1.3 浮点型1.4 布尔类型 2. signed和unsigned3. 数据类型的取值范围4. 变量4.1 变量的创建4.2 变量的分类 5. 算术操作符&#xff1a;、-、*、/、%5.1 和 -5.2 *5.3 /5.4 % 6. 赋值操作符…

网络丢包定位记录(一)

数据在Internet上是以数据包为单位传输的&#xff0c;单位为字节&#xff0c;数据在网络上传输&#xff0c;受网络设备&#xff0c;网络质量等原因的影响&#xff0c;使得接收到的数据少于发送出去的数据&#xff0c;造成丢包。 数据包接收、发送原理 发送数据包&#xff1a; …