Sapiens——人类视觉大模型的基础
引言
大规模预训练以及随后针对特定任务的语言建模微调取得了显著成功,已将这种方法确立为标准做法。同样, 计算机视觉方法正逐步采用大规模数据进行预训练。LAION5B、Instagram-3.5B、JFT-300M、LVD142M、Visual Genome 和 YFCC100M 等大型数据集的出现使得人们能够探索远远超出传统基准范围的数据语料库。该领域的突出工作包括 DINOv2、MAWS 和 AIM。DINOv2 通过在 LDV-142M 数据集上扩展对比 iBot 方法,在生成自监督特征方面实现了最先进的性能。MAWS 研究了十亿张图像上掩蔽自编码器 (MAE) 的扩展。AIM 探索了类似于 BERT 的自回归视觉预训练对于视觉转换器的可扩展性。与这些主要侧重于一般图像预训练或零样本图像分类的方法相比,Sapiens 采取了一种明显以人为本的方法:Sapiens 的模型利用大量人类图像进行预训练,随后针对一系列与人类相关的任务进行微调。追求大规模 3D 人体数字化仍然是计算机视觉领域的关键目标。
在受控或工作室环境中取得了重大进展,但将这些方法扩展到不受约束的环境仍然存在挑战。为了应对这些挑战,开发能够执行多项基本任务的多功能模型至关重要,例如关键点估计、身体部位分割、深度估计和从自然环境中的图像进行表面法线预测。在这项工作中,Sapiens 旨在为这些基本的人类视觉任务开发模型,这些模型可以推广到野外环境。目前,最大的公开语言模型包含超过 100 亿个参数,而更常用的语言模型包含大约 7 亿个参数。相比之下,Vision Transformers (ViT) 尽管共享类似的架构,但尚未成功扩展到这种程度。虽然在这方面做出了许多努力,包括开发针对文本和图像进行训练的密集 ViT-4B,以及制定稳定训练 ViT-22B 的技术,但常用的视觉主干仍然介于 300 亿到 600 亿个参数之间,并且主要在约 224 像素的图像分辨率下进行预训练。同样,现有的基于 Transformer 的图像生成模型(例如 DiT)使用不到 700 亿个参数,并在高度压缩的潜在空间上运行。为了弥补这一差距,Sapiens 推出了一系列大型高分辨率 ViT 模型,这些模型在数百万张人体图像上以 1024 像素的图像分辨率进行本地预训练。
Sapiens 针对四项以人为中心的基本视觉任务提出了一系列模型:2D 姿势估计、身体部位分割、深度估计和表面法线预测。Sapiens 模型原生支持 1K 高分辨率推理,并且非常容易通过对超过 300 亿张野生人类图像进行预训练的模型进行微调来适应单个任务。Sapiens 观察到,在给定相同计算预算的情况下,对精选的人类图像数据集进行自我监督预训练可显著提高以人为中心的各种任务的性能。即使在标记数据稀缺或完全合成的情况下,生成的模型也表现出对野生数据的出色泛化能力。简单的模型设计还带来了可扩展性——随着参数数量从 0.3 扩展到 2 亿,跨任务的模型性能得到提高。 Sapiens 在各种以人为本的基准中始终超越现有基线,与之前的最先进结果相比取得了显著的进步:Humans-7.6K(姿势)上 5 mAP,Humans-17.1K(部分分段)上 2 mIoU,Hi22.4D(深度)上 4% 相对 RMSE,以及 THuman53.5(正常)上 2% 相对角度误差。
人类视觉模型的突破
近年来,我们在 2D 和 3D 中生成照片级逼真的人类方面取得了显著进展。这些方法的成功很大程度上归功于对各种资产(例如 2D 关键点、细粒度身体部位分割、深度和表面法线)的稳健估计。然而,对这些资产进行稳健而准确的估计仍然是一个活跃的研究领域,而用于提高单个任务性能的复杂系统通常会阻碍更广泛的采用。此外,在野外获得准确的地面实况注释是出了名的难以扩展。Sapiens 的目标是提供一个统一的框架和模型来推断野外的这些资产,为每个人解锁广泛的以人为本的应用程序。
Sapiens 认为,这种以人为中心的模型应该满足三个标准:泛化、广泛适用性和高保真度。泛化确保了对未知条件的鲁棒性,使模型能够在不同的环境中始终如一地执行。广泛适用性表示模型的多功能性,使其适用于各种任务,只需进行最少的修改。高保真度表示模型能够产生精确、高分辨率的输出,这对于忠实的人类生成任务至关重要。本文详细介绍了体现这些属性的模型的开发,统称为 Sapiens。
根据洞察,Sapiens 利用大型数据集和可扩展的模型架构,这是泛化的关键。为了扩大适用范围,Sapiens 采用了先预训练再微调的方法,使预训练后能够以最少的调整适应特定任务。这种方法提出了一个关键问题:哪种类型的数据对预训练最有效?考虑到计算限制,应该重点收集尽可能多的人体图像,还是最好在较少的整理集合上进行预训练以更好地反映现实世界的变化?现有方法通常会忽略下游任务背景下的预训练数据分布。为了研究预训练数据分布对人类特定任务的影响,Sapiens 收集了 Humans-300M 数据集,其中包含 300 亿张不同的人体图像。这些未标记的图像用于从头开始预训练一系列视觉转换器,参数数量从 300 亿到 2 亿不等。
在从大型数据集中学习通用视觉特征的各种自监督方法中,Sapiens 选择了 掩蔽自编码器 (MAE)方法以其简单和高效的预训练而闻名。与对比或多推理策略相比,MAE 具有单次推理模型,允许使用相同的计算资源处理大量图像。为了获得更高的保真度,与之前的方法相比,Sapiens 将其预训练的原始输入分辨率提高到 1024 像素,与现有最大的视觉主干相比,FLOP 增加了约 4 倍。每个模型都在 1.2 万亿个标记上进行预训练。对于以人为本的任务进行微调,Sapiens 使用一致的编码器-解码器架构。编码器使用预训练中的权重初始化,而解码器(轻量级且特定于任务的头部)则随机初始化。然后对两个组件进行端到端微调。Sapiens 专注于四个关键任务:2D 姿势估计、身体部位分割、深度和法线估计,如下图所示。
与之前的研究一致,Sapiens 肯定了标签质量对模型实际性能的关键影响。公共基准通常包含嘈杂的标签,在模型微调期间提供不一致的监督信号。同时,利用细粒度和精确的注释与 Sapiens 的 3D 人体数字化主要目标紧密结合非常重要。为此,Sapiens 提出了一组密度大大提高的 2D 全身关键点用于姿势估计,以及一组详细的类别词汇用于身体部位分割,超越了以前数据集的范围。具体来说,Sapiens 引入了 308 个关键点的综合集合,涵盖身体、手、脚、表面和面部。此外,Sapiens 将分割类别词汇扩展到 28 个类别,涵盖头发、舌头、牙齿、上/下唇和躯干等身体部位。为了保证注释的质量和一致性以及高度自动化,Sapiens 使用多视图捕获设置来收集姿势和分割注释。Sapiens 还利用以人为中心的合成数据进行深度和法线估计,利用来自 RenderPeople 的 600 个详细扫描来生成高分辨率深度图和表面法线。Sapiens 表明,特定领域的大规模预训练与有限但高质量的注释相结合可实现强大的野外泛化。总体而言,Sapiens 的方法展示了一种有效的策略,可以开发能够在现实世界场景中执行的高精度判别模型,而无需收集昂贵且多样化的注释集。
方法与建筑
Sapiens 采用掩码自动编码器 (MAE) 方法进行预训练。该模型经过训练,可以根据部分观察结果重建原始人体图像。与所有自动编码器一样,Sapiens 的模型有一个编码器,可将可见图像映射到潜在表示,还有一个解码器,可根据该潜在表示重建原始图像。预训练数据集由单人和多人图像组成,每张图像都调整为具有正方形长宽比的固定大小。类似于 维生素,将图像划分为具有固定块大小的规则不重叠块。这些块的子集被随机选择并屏蔽,其余部分可见。屏蔽块与可见块的比例(称为屏蔽率)在整个训练过程中保持不变。
Sapiens 的模型在各种图像特征上都表现出了泛化能力,包括尺度、裁剪、受试者的年龄和种族以及受试者的数量。模型中的每个补丁标记占图像面积的 0.02%,而标准 ViT 中为 0.4%,减少了 16 倍,为模型提供了细粒度的标记间推理。即使掩码率增加到 95%,Sapiens 的模型也能在保留的样本上实现人体解剖结构的合理重建。下图展示了 Sapien 的预训练模型在未见过的人体图像上的重建。
此外,Sapiens 利用大型专有数据集进行预训练,该数据集由大约 1 亿张自然图像组成,专注于人类图像。预处理包括丢弃带有水印、文本、艺术描绘或非自然元素的图像。然后,Sapiens 使用现成的人体边界框检测器来过滤图像,保留检测分数高于 0.9 且边界框尺寸超过 300 像素的图像。数据集中有超过 248 亿张图像包含多个主体。
2D 姿态估计
Sapien 框架在多个骨架上对 P 中的编码器和解码器进行微调,其中包括 K = 17 [67]、K = 133 [55] 和一个新的高度详细骨架,其中 K = 308,如下图所示。
与最多 68 个面部关键点的现有格式相比,Sapien 的注释包含 243 个面部关键点,包括眼睛、嘴唇、鼻子和耳朵周围的代表点。这种设计旨在细致地捕捉现实世界中面部表情的细微细节。利用这些关键点,Sapien 框架手动注释了来自室内捕捉设置的 1 万张 4K 分辨率图像。与之前的任务类似,我们将法线估计器 N 的解码器输出通道设置为 3,对应于每个像素的法线向量的 xyz 分量。生成的合成数据也用作表面法线估计的监督。
实验与结果
Sapiens-2B 使用 1024 个 A100 GPU 通过 PyTorch 进行了 18 天的预训练。Sapiens 在所有实验中均使用 AdamW 优化器。学习计划包括简短的线性预热,然后进行余弦退火进行预训练,再进行线性衰减进行微调。所有模型均从头开始进行预训练,分辨率为 1024 × 1024,块大小为 16。为了进行微调,输入图像的大小被调整为 4:3 的比例,即 1024 × 768。Sapiens 应用了标准增强功能,例如裁剪、缩放、翻转和光度失真。添加了来自非人类 COCO 图像的随机背景以用于分割、深度和正常预测任务。重要的是,Sapiens 使用差异学习率来保持泛化,初始层的学习率较低,后续层的学习率逐渐升高。逐层学习率衰减设置为 0.85,编码器的权重衰减设置为 0.1。
下表详细列出了 Sapiens 的设计规格。Sapiens 遵循特定方法,优先按宽度而非深度扩展模型。值得注意的是,Sapiens-0.3B 模型虽然在架构上与传统的 ViT-Large 相似,但由于分辨率更高,其 FLOP 数量是后者的 XNUMX 倍。
Sapiens 使用高保真注释对面部、身体、脚和手 (K = 308) 姿势估计进行了微调。对于训练,Sapiens 使用包含 1M 幅图像的训练集,对于评估,它使用包含 5K 幅图像的测试集 Humans5K。评估采用自上而下的方法,其中 Sapiens 使用现成的边界框检测器并进行单个人体姿势推理。表 3 显示了 Sapiens 模型与现有全身姿势估计方法的比较。所有方法均在 Sapiens 的 114 个关键点词汇表和 COCO-WholeBody 的 308 个关键点词汇表之间的 133 个共同关键点上进行评估。Sapiens-0.6B 比目前最先进的 DWPose-l 高出 +2.8 AP。与 DWPose 不同,Sapiens 采用通用的编码器-解码器架构,并进行大量以人为本的预训练,而 DWPose 采用复杂的学生-老师框架,并针对任务量身定制特征提炼。
有趣的是,即使参数数量相同,Sapiens 模型也表现出比同类模型更出色的性能。例如,Sapiens-0.3B 比 VitPose±L 高出 +5.6 AP,而 Sapiens-0.6B 比 VitPose±H 高出 +7.9 AP。在 Sapiens 系列中,结果表明模型大小与性能之间存在直接相关性。Sapiens-2B 以 61.1 AP 创下了新的最先进水平,比现有技术显著提高了 +7.6 AP。尽管使用室内捕捉工作室的注释进行了微调,但 Sapiens 仍表现出对现实世界场景的强大泛化能力,如下图所示。
Sapiens 使用 28 个类别的分割词汇进行微调和评估。训练集包含 100K 张图像,而测试集 Humans-2K 包含 2K 张图像。将 Sapiens 与在同一训练集上微调的现有身体部位分割方法进行比较,使用每种方法建议的预训练检查点作为初始化。与姿势估计类似,Sapiens 在分割方面表现出了泛化能力,如下表所示。
有趣的是,最小的模型 Sapiens-0.3B 凭借更高的分辨率和大量以人为中心的预训练,比现有的最先进的分割方法(如 Mask2Former 和 DeepLabV3+)高出 12.6 mIoU。此外,增加模型大小可进一步提高分割性能。Sapiens-2B 的性能最佳,在测试集上达到 81.2 mIoU 和 89.4 mAcc,下图显示了 Sapiens 模型的定性结果。
结论
Sapiens 代表着将以人为本的视觉模型推进到基础模型领域的重要一步。Sapiens 模型在各种以人为本的任务中展示了强大的泛化能力。最先进的性能归功于:(i) 在专门为理解人类而定制的精选数据集上进行大规模预训练,(ii) 可扩展的高分辨率和高容量视觉转换器主干,以及 (iii) 在增强工作室和合成数据上进行高质量注释。Sapiens 模型有可能成为众多下游任务的关键构建块,并为社区中更广泛的群体提供高质量视觉主干的访问权限。
相关文章:

Sapiens——人类视觉大模型的基础
引言 大规模预训练以及随后针对特定任务的语言建模微调取得了显著成功,已将这种方法确立为标准做法。同样, 计算机视觉方法正逐步采用大规模数据进行预训练。LAION5B、Instagram-3.5B、JFT-300M、LVD142M、Visual Genome 和 YFCC100M 等大型数据集的出现…...

《深度学习》【项目】 OpenCV 身份证号识别
目录 一、项目实施 1、自定义函数 2、定位模版图像中的数字 1)模版图二值化处理 运行结果: 2)展示所有数字 运行结果: 3、识别身份证号 1)灰度图、二值化图展示 运行结果 2)定位身份证号每一个数…...

机器学习实战—天猫用户重复购买预测
目录 背景 数据集 用户画像数据 用户行为日志数据 训练数据 测试数据 提交数据 其它数据 数据探索 导入依赖库 读取数据 查看数据信息 缺失值分析 数据分布 复购因素分析 特征工程 模型训练 模型验证 背景 商家有时会在特定日期,例如节礼日(Boxing-day),黑…...

一款rust语言AI神器cursor在ubuntu环境下的安装启动教程
虽然cursor目前只支持英文但是它强大的代码联想能力以及问答能力,可以高效的提高编码效率。 如下步骤所有的前提是你的ubuntu上面已经安装了vscode以及其必须的extensions。 1 下载 到官网https://www.cursor.com下载指定版本的软件。 下载到本地以后会生成如下软…...

【C#生态园】发现C#中的数据科学魔法:6款不可错过的库详解
探索C#中的数据科学与机器学习:6个强大库解析 前言 在数据科学和机器学习领域,Python一直占据着主导地位,然而对于习惯使用C#编程语言的开发人员来说,寻找适用于C#的数据科学库一直是一个挑战。本文将介绍几个流行的用于C#的数据…...

导入neo4j数据CSV文件及csv整理demo示例
Neo4j导入CSV文件(实体和关系)_neo4j导入csv关系-CSDN博客 https://blog.csdn.net/m0_69483514/article/details/131296060?spm1001.2101.3001.6661.1&utm_mediumdistribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ER…...

bug | pycharm社区版无sciview解决办法
一个程序运行多个图,plt.show()一次只弹出一个独立窗口,必须关掉一个才能显示下一张图,想找sciview却发现找不到,本来以为是新版pycharm的问题,后来才发现是community版根本没有sciview…不想换专业版了,研…...

PL/SQL程序设计入门
PL/SQL程序设计 PL/SQL起步鼻祖:hello World语法分析声明部分举例 应用举例 PL/SQL 起步鼻祖:hello World 先举个例子,用PL/SQL打印输出hello world declarev_string varchar2(20); beginv_string:hello world;dbms_output.put_line(v_str…...

一、Numpy入门
Numpy入门 前言一、numpy简介二、Numpy的ndarray属性2.1. 直接用 .属性的方法实现2.2. 直接函数的方法实现 三、Numpy的ndarray的创建3.1. ndarray介绍3.2. 数组形式3.3. zeros()、ones() 、 empty()3.4. arange(),类似 python 的 range() ,创建一个一维…...

自动化测试框架设计核心理念——关键字驱动
很多人在接触自动化测试时,都会听到关键字驱动这样的一个概念,但是在研究时却有些不太清楚这种驱动模式的设计及实现到底该如何着手去做。 关键字驱动,作为一种自动化测试框架的设计形式,在很早的时候就已经有提及过了。它的基本…...

GO GIN SSE DEMO
文章目录 接口描述:1.1 /events/time - 时间流1.2 /events/numbers - 数字流 2. 用户管理接口2.1 /user/:id - 获取用户信息2.2 /user - 创建用户 项目结构1. main.go2. 创建 handlers/event_time.go3. 创建 handlers/event_number.go4. handlers/user.go5. 运行服务…...

GEE教程:1950-2023年ECMWF数据中积雪的长时序统计分析
目录 简介 数据 函数 millis() Arguments: Returns: Long 代码 结果 简介 1950-2023年ECMWF数据中积雪的长时序统计分析 数据 ECMWF/ERA5_LAND/DAILY_AGGR是由欧洲中期天气预报中心(ECMWF)提供的数据集。它是一个格网数据集,包含从ERA5-Land再分析数据集中得出的…...

【React Native】路由和导航
RN 中的路由是通过 React Navigation 组件来完成的 Stack 路由导航RN 中默认没有类似浏览器的 history 对象在 RN 中路由跳转之前,需要先将路由声明在 Stack 中<Stack.Navigator initialRouteNameDetails> <Stack.Screen nameDetails /> </Stack.N…...

Linux环境基础开发工具---vim
1.快速的介绍一下vim vim是一款多模式的编辑器,里面有很多子命令,来实现代码编写操作。 2.vim的模式 vim一共有三种模式:底行模式,命令模式,插入模式。 2.1vim模式之间的切换 2.2 谈论常见的模式---命令模式…...

python AssertionError: Torch not compiled with CUDA enabled
查看:torch import torch# 输出带CPU,表示torch是CPU版本的 print(ftorch的版本是:{torch.__version__}) # print(ftorch是否能使用cuda:{torch.cuda.is_available()}) 修改一下代码,将cuda改成cpu 最后运行正常&…...

Pandas的入门操作-Series对象
Pandas的数据结构 Series对象 class pandas.Series(dataNone, indexNone) data参数 含义:data是Series构造函数中最主要的参数,它用来指定要存储在Series中的数据。 数据类型:data可以是多种数据类型,例如: Python 列…...

自然语言处理系列六十八》搜索引擎项目实战》搜索引擎系统架构设计
注:此文章内容均节选自充电了么创始人,CEO兼CTO陈敬雷老师的新书《自然语言处理原理与实战》(人工智能科学与技术丛书)【陈敬雷编著】【清华大学出版社】 文章目录 自然语言处理系列六十八搜索引擎项目实战》搜索引擎系统架构设计…...

H5依赖安装
依赖安装 git和sourceTree编辑器使用vscode下载nvm 和nodejs git和sourceTree 使用 ssh-keygen -t rsa 进行密钥获取 git下载地址:https://git-scm.com/ sourceTree下载地址:https://www.sourcetreeapp.com/ 编辑器使用vscode 最新版网址:…...

MatchRFG:引领MemeCoin潮流,探索无限增长潜力
Meme币无疑是本轮牛市最热闹的赛道,而围绕Meme币的讨论话题基本都集中在价格炒作上。似乎人们习惯性地认为,Meme币的创造和成长往往与真正的价值无关。热炒过后,价格能否通过共识转化为价值,也正是许多Meme币在热潮冷却后的主要成…...

2024/9/18 模型的存储与读取
一、模型的存储与读取 主要涉及到torch.save和torch.load函数 新建两个python文件: 1.在model_save文件中保存模型(方式一)和模型参数(方式二) 2.在model_load文件中读取模型(方式一)和模型参数并装载模型(方式二)...

在 fnOS上安装 KVM 虚拟化,并使用 Cockpit 网页管理虚拟机
在fnOS系统上安装 KVM 虚拟化,并使用 Cockpit 进行网页管理,可以按照以下步骤进行: 1. 安装 KVM虚拟化组件 首先,更新软件列表和系统包: sudo apt update && sudo apt upgrade -y 安装 KVM 及相关工具软件&…...

VUE实现刻度尺进度条
一、如下图所示效果: 运行后入下图所示效果: 实现原理是用div画图并动态改变进度, 二、div源码 <div style"width: 100%;"><div class"sdg_title" style"height: 35px;"><!--对话组[{{ dialo…...

ZYNQ FPGA自学笔记~点亮LED
一 ZYNQ FPGA简介 ZYNQ FPGA主要特点是包含了完整的ARM处理系统,内部包含了内存控制器和大量的外设,且可独立于可编程逻辑单元,下图中的ARM内核为 ARM Cortex™-A9,ZYNQ FPGA包含两大功能块,处理系统Processing System…...

攻击者如何在日常网络资源中隐藏恶意软件
近二十年来,安全 Web 网关 (SWG) 一直在监控网络流量,以检测恶意软件、阻止恶意网站并保护企业免受基于 Web 的威胁。 然而,攻击者已经找到了许多绕过这些防御措施的方法,SquareX的安全研究人员对此进行了记录。 最危险的策略之…...

《深度学习》深度学习 框架、流程解析、动态展示及推导
目录 一、深度学习 1、什么是深度学习 2、特点 3、神经网络构造 1)单层神经元 • 推导 • 示例 2)多层神经网络 3)小结 4、感知器 神经网络的本质 5、多层感知器 6、动态图像示例 1)一个神经元 相当于下列状态&…...

“中秋快乐”文字横幅的MATLAB代码生成
中秋快乐呀朋友们!!! 给大家带来一个好玩的代码,能够生成“中秋快乐”的横幅文字,比较简单,当然你也可以根据自己的需求去更改文字和背景,废话不多说,直接展示。 文字会一直闪烁&…...

【Node.js】RabbitMQ 延时消息
概述 在 RabbitMQ 中实现延迟消息通常需要借助插件(如 RabbitMQ 延迟队列插件),因为 RabbitMQ 本身不原生支持延迟消息。 延迟消息的一个典型场景是,当消息发布到队列后,等待一段时间再由消费者消费。这可以通过配置…...

前后端分离Vue美容店会员信息管理系统o7grs
目录 技术栈介绍具体实现截图系统设计研究方法:设计步骤设计流程核心代码部分展示研究方法详细视频演示试验方案论文大纲源码获取 技术栈介绍 本课题的研究方法和研究步骤基本合理,难度适中,本选题是学生所学专业知识的延续,符合…...

初学Linux(学习笔记)
初学Linux(学习笔记) 前言 本文跳过了Linux前期的环境准备,直接从知识点和指令开始。 知识点: 1.目录文件夹(Windows) 2.文件内容属性 3.在Windows当中区分文件类型是通过后缀,而Linux是通过…...

新增的标准流程
同样的新增的话我们也是分成两种, 共同点: 返回值都是只需要一个Result.success就可以了 接受前端的格式都是json格式,所以需要requestbody 1.不需要连接其他表的 传统方法,在service层把各种数据拼接给new出来的employee从…...