Sora和快手可灵背后的核心技术 | 3DVAE:通过小批量特征交换实现身体和面部的三维形状变分自动编码器

【摘要】学习3D脸部和身体生成模型中一个解开的、可解释的和结构化的潜在表示仍然是一个开放的问题。当需要控制身份特征时,这个问题尤其突出。在本文中,论文提出了一种直观而有效的自监督方法来训练一个3D形状变分自动编码器(VAE),以鼓励身份特征的解开潜在表示。通过交换不同形状间的任意特征来管理迷你批次生成,这允许定义一个利用已知的潜在表示中的差异和相似性的损失函数。在3D网格上进行的实验结果表明,用于潜在解开的最先进的方法无法解开脸部和身体的身份特征。论文提出的方法正确地解耦了这些特征的生成,同时保持了良好的表示和重建能力。

原文:3D Shape Variational Autoencoder Latent Disentanglement via Mini-Batch Feature Swapping for Bodies and Faces
地址:https://arxiv.org/abs/2111.12448
代码:https://github.com/simofoti/3DVAE-SwapDisentangled
出版:CVPR
机构: 伦敦大学学院

1 研究问题

本文研究的核心问题是: 如何设计一种自监督的方法,在3D人脸和人体形状的生成模型中实现身份特征解开的潜在表示。

::: block-1
想象论文要开发一个3D游戏或虚拟试衣间,需要程序自动生成各种逼真的人脸和人体模型。论文希望这个生成系统有以下特点:1)能够通过调节少量的控制参数,就生成千变万化的脸部和身体;2)这些控制参数应该是可解释的,比如对应眼睛、鼻子、嘴巴等具体的面部器官。这样的生成工具不仅使用方便,而且便于实现局部的、细粒度的形状控制。
:::

本文研究问题的特点和现有方法面临的挑战主要体现在以下几个方面:

  • 身份特征具有明显的局部性,而现有的3D形状生成模型往往只学习到全局的latent表示,缺乏对局部身份特征的显式建模。
  • 缺乏可用于身份特征解开学习的监督信号。现有的latent解开方法主要针对人脸表情和姿态的解耦,而缺少面向身份特征的benchmark和评估标准。
  • 身份特征之间往往存在复杂的相关性,简单地对latent空间做划分,无法学习到语义清晰的特征表示。

针对这些挑战,本文提出了一种基于"迷你批次特征交换"的VAE训练范式:

::: block-1
核心思想是在组建每个训练批次时,随机地在不同形状实例之间交换局部的身份特征(如鼻子、眼睛、下巴等),从而得到一批在特定身份特征上存在差异,而在其他特征上保持一致的"合成"形状。然后要求VAE学习到的latent表示能够反映这种差异和一致性,即属于同一身份特征的潜变量应该在批内保持不变,而控制不同身份特征的潜变量应该各不相同。这其实是构建了一种弱监督信号,引导VAE去学习身份特征解开的表示(Sora和可灵等应该构建了很多弱监督信号)。同时,本文还提出了一个新的latent一致性损失函数,进一步利用批内形状的相似性约束,来强化解开学习的效果。实验表明,本文方法能在不影响生成质量的情况下,大幅提升latent表示的可解释性,实现对身份特征的有效解耦和操控。
:::

2 研究方法

本文提出了一种新颖的方法来训练3D形状变分自编码器(3D-VAE),以学习人脸和人体3D网格的解耦、可解释和结构化的潜在表示。该方法包括三个关键部分:3D-VAE的基本结构、特征交换mini-batch的生成,以及潜在一致性损失函数的构建。接下来将详细介绍每一部分。

2.1 3D形状变分自编码器

论文采用文献[16]中提出的网格卷积VAE作为基本架构。编码器 E E E 将输入网格 X X X 映射到潜在分布 Z Z Z , 定义为近似后验 q ( z ∣ X ) q(z|X) q(zX)。解码器(也称生成器) G G G 根据似然 p ( X ∣ z ) p(X|z) p(Xz) 将潜在向量 z z z 映射回网格。编码器使用spiral++卷积、ELU激活和池化层,而解码器使用spiral++卷积、ELU激活和反池化层。此外还有三个全连接层:两个预测潜在分布均值和对角协方差,一个将 z z z 转换回网格。

训练时最小化如下损失函数:

L V A E = L R + α L L + β L K L L_{VAE} = L_R + αL_L + βL_{KL} LVAE=LR+αLL+βLKL

其中 L R L_R LR 是重建损失, L L L_L LL 是基于网格拉普拉斯矩阵的平滑正则项, L K L L_{KL} LKL 是变分分布 q ( z ∣ X ) q(z|X) q(zX) 与先验 p ( z ) p(z) p(z) 间的KL散度。 α α α β β β 是平衡系数。

2.2 特征交换mini-batch生成

核心创新点之一是特征交换方法。具体来说,论文先在一个模板网格上定义 F F F 个特征区域,每个区域对应一组顶点。由于数据集中的网格具有顶点对应关系,可以很容易地识别出每个网格的各个特征区域。举个例子,对于人脸,论文可以定义眼睛、鼻子、嘴巴等不同的特征(图1左)。

基于此,论文精心设计了mini-batch的生成过程。一个大小为 B B B 的mini-batch可以看作一个 B × B \sqrt{B} \times \sqrt{B} B ×B 的矩阵,其中对角线上的元素从数据集中采样,其余元素通过特征交换得到。每次生成一个mini-batch时,论文随机选择一个特征并交换不同网格间该特征对应的顶点坐标(图1左)。这样,矩阵的每一行包含相同的人脸/人体,但具有不同的特征;而每一列包含不同的人脸/人体,但具有相同的特征。

2.3 潜在一致性损失函数

mini-batch的精心设计为构建潜在一致性损失函数奠定了基础。当一个mini-batch输入到编码器后,论文得到大小为 B × B \sqrt{B} \times \sqrt{B} B ×B 的潜在向量矩阵,其中每个向量 z i j z_{ij} zij 被均匀地划分为 F F F 个子集,分别控制一个特征(图1中间)。

假设当前mini-batch交换了特征 f f f, 则 z i j = ( z i j f ∣ z i j c ) z_{ij} = (z^f_{ij}|z^c_{ij}) zij=(zijfzijc)。其中 z i j f z^f_{ij} zijf 控制特征 f f f, 而 z i j c z^c_{ij} zijc 控制其他特征。直觉上,同一列的 z i j f z^f_{ij} zijf 应该接近,因为它们对应相同的特征 f f f;而同一行的 z i j f z^f_{ij} zijf 应该远离。反之,同一行的 z i j c z^c_{ij} zijc 应该接近,而同一列的 z i j c z^c_{ij} zijc 应该远离。这就好比对角线上的人脸彼此不同,但具有相同的特征 f f f

基于这一思想,论文构建潜在一致性损失函数如下:

L c = γ B ∑ s , p , q = 1 B I p ≠ q ( max ⁡ [ 0 , ∥ z p s f − z q s f ∥ 2 2 − ∥ z s p f − z s q f ∥ 2 2 + η 1 ] + max ⁡ [ 0 , ∥ z s p c − z s q c ∥ 2 2 − ∥ z p s c − z q s c ∥ 2 2 + η 2 ] ) \begin{aligned} L_c = \frac{γ}{\sqrt{B}} \sum_{s,p,q=1}^{\sqrt{B}} \mathbb{I}_{p \neq q} \Big(&\max[0, \|z^f_{ps} - z^f_{qs}\|^2_2 - \|z^f_{sp} - z^f_{sq}\|^2_2 + η_1] \\ +&\max[0, \|z^c_{sp} - z^c_{sq}\|^2_2 - \|z^c_{ps} - z^c_{qs}\|^2_2 + η_2] \Big) \end{aligned} Lc=B γs,p,q=1B Ip=q(+max[0,zpsfzqsf22zspfzsqf22+η1]max[0,zspczsqc22zpsczqsc22+η2])

其中 γ γ γ 是归一化系数, I \mathbb{I} I 是指示函数, η 1 η_1 η1 η 2 η_2 η2 是容差。该损失函数遍历mini-batch矩阵的对角线,并要求匹配的潜在变量对之间的距离比不匹配的对之间的距离小一个容差 η η η。这鼓励 VAE 学习到的潜在表示能够解耦地控制每个特征的生成。

最后,结合原有的VAE损失(1)和潜在一致性损失(2),论文得到总的损失函数:

L = L V A E + κ L c = L R + α L L + β L K L + κ L c L = L_{VAE} + κL_c = L_R + αL_L + βL_{KL} + κL_c L=LVAE+κLc=LR+αLL+βLKL+κLc

其中 κ κ κ 控制潜在一致性损失的权重。

综上所述,本文提出了一种通过特征交换生成mini-batch、并构建潜在一致性损失函数的方法,使得3D-VAE能够学习到更加解耦、可解释和结构化的3D人脸和人体的潜在表示。该方法只需要对标准的VAE进行很小的改动,却能学习到可以独立控制每个特征生成的潜在空间。这极大地提高了生成模型的可解释性和可用性。

3 实验

3.1 实验场景介绍

本文提出了一种新的VAE框架,通过批特征交换与潜在一致性损失,使学习到的潜在表征具有更好的可解释性、结构性和解纠缠特性。实验旨在验证该方法在人脸与人体3D网格生成任务中的有效性。

3.2 实验设置

  • Datasets:从UHM和STAR线性模型中随机生成人脸与人体3D网格数据集,各1万个,划分为训练集(90%)、验证集(5%)和测试集(5%)
  • Baseline:VAE、DIP-VAE-I/II、Factor VAE等最先进的自监督潜在解纠缠模型
  • Implementation details:
    • 骨干网络:SpiralNet++,人脸模型4层卷积,人体模型3层卷积
    • 超参数:40个epoch,ADAM优化器,学习率1e-4,批大小16,潜变量维度(人脸60维,人体33维)等
  • metric:
    • 重建误差:平均/最大每顶点误差
    • 生成多样性:随机生成的样本对之间的平均每顶点距离
    • 分布距离:JSD、MMD、COV等
    • 潜变量解纠缠:观察潜变量遍历对生成特征的影响

3.3 实验结果

3.3.1 实验一、与其他潜在解纠缠方法的性能对比

目的:评估所提出的模型与其他自监督潜在解纠缠方法在生成任务上的性能表现
涉及图表:表1
实验细节概述:在人脸数据集上,比较了VAE、DIP-VAE-I/II、Factor VAE等模型的重建误差、生成多样性、分布距离等指标
结果:

  • 本文模型的重建误差与普通VAE相当,优于其他方法,说明批特征交换和一致性损失并未降低重建能力
  • 本文模型的生成多样性与大多数方法相近,Factor VAE多样性更高但生成样本真实性较差
  • 其他评估生成性能的指标表明,本文方法与其他模型性能相当

3.3.2 实验二、潜在表征的解纠缠效果评估

目的:定性评估学习到的潜在表征对控制不同面部/身体特征的解纠缠能力
涉及图表:图3、图4、图5、图10、图11
实验细节概述:遍历每个潜变量,生成两个改变该变量至最小值(-3)和最大值(+3)的3D网格,观察顶点位移,分析其对不同特征的影响
结果:

  • 本文模型的潜在表征展现出明显的结构性和可解释性,不同潜变量对应控制了特定的面部/身体特征
  • 相比之下,其他方法学到的潜在表征难以解释,大多数变量均表现出纠缠的特性

3.3.3 实验三、消融研究

目的:分析模型关键组件(批特征交换、一致性损失、拉普拉斯正则化、归一化)的作用
涉及图表:图13
实验细节概述:分别移除模型的潜在一致性损失、拉普拉斯损失和输入归一化,重新训练并对比性能
结果:

  • 移除潜在一致性损失后,仅保留批特征交换无法获得解纠缠的潜在表征
  • 移除拉普拉斯损失会导致生成网格表面不规则,出现不连续
  • 移除输入归一化则降低了生成人脸的真实性

3.3.4 实验四、泛化能力评估

目的:验证模型对于训练分布外样本的拟合能力
涉及图表:图14
实验细节概述:在CoMA人脸数据集的中性表情上,通过优化潜码最小化与目标网格的重建误差,测试模型的泛化性能
结果:

  • 重建误差随着施加的噪声线性增长,但整体仍保持较低水平,说明模型泛化能力较好
  • 本文方法的重建误差在所有模型中最低,证明其更强的泛化性

4 总结后记

本论文针对3D生成模型中潜在表示解耦的问题,提出了一种基于Mini-Batch特征交换和潜在一致性损失的自监督方法。通过在Mini-Batch内的样本间交换预定义的网格特征并约束对应潜变量的相似性,实现了对身体和面部3D网格的特征级解耦生成控制。实验结果表明,所提方法能够学习到更加解释性强、结构化的潜在表示,生成效果优于现有方法。

::: block-2
疑惑和想法:

  1. 除了预定义的语义特征,是否可以通过无监督的方式自动发现并解耦3D形状的内在成分表示?(有个有趣工作CausalVAE)
  2. 本文假设训练数据需要具有顶点对应性,如何将方法拓展到非结构化的3D数据如点云、体素?
  3. 形状的局部特征通常具有层次结构,如何建模特征间的拓扑关系,实现分层解耦控制?
    :::

::: block-2
可借鉴的方法点:

  1. Mini-Batch内样本特征交换的思想可以用于其他需要解耦因素的生成任务,如图像合成、视频生成等。
  2. 将Mini-Batch结构引入loss设计来施加归纳偏置的方法值得借鉴,可用于改进其他自监督表示学习任务。
  3. 利用领域知识对架构施加约束以实现可解释特征解耦的思路具有一定通用性,可用于其他生成模型。
    :::

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

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

相关文章

自学网络安全的三个必经阶段(含路线图)

一、为什么选择网络安全? 这几年随着我国《国家网络空间安全战略》《网络安全法》《网络安全等级保护2.0》等一系列政策/法规/标准的持续落地,网络安全行业地位、薪资随之水涨船高。 未来3-5年,是安全行业的黄金发展期,提前踏入…

Python:基础爬虫

Python爬虫学习(网络爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字…

上海晋名室外危废品暂存柜助力储能电站行业危废品安全储存

近日又有一台SAVEST室外危废暂存柜项目成功验收交付使用,此次项目主要用于储能电站行业废油、废锂电池等危废品的安全储存。 用户单位在日常工作运营中涉及到废油、废锂电池等危废品的室外安全储存问题。4月中旬用户技术总工在寻找解决方案的过程中搜索到上海晋名的…

uniapp地图自定义文字和图标

这是我的结构&#xff1a; <map classmap id"map" :latitude"latitude" :longitude"longitude" markertap"handleMarkerClick" :show-location"true" :markers"covers" /> 记住别忘了在data中定义变量…

46.Python-web框架-Django - 多语言配置

目录 1.Django 多语言基础知识 1.1什么是Django国际化和本地化&#xff1f; 1.2Django LANGUAGE_CODE 1.3关于languages 1.4RequestContext对象针对翻译的变量 2.windows系统下的依赖 3.django多语言配置 3.1settings.py配置 引用gettext_lazy 配置多语言中间件&#x…

(代数:解一元二次方程)可以使用下面的公式求一元二次方程 ax2+bx+c0 的两个根:

(代数:解一元二次方程)可以使用下面的公式求一元二次方程 ax2bxc0 的两个根: b2-4ac 称作一元二次方程的判别式。如果它是正值,那么一元二次方程就有两个实数根。 如果它为 0&#xff0c;方程式就只有一个根。如果它是负值&#xff0c;方程式无实根。 编写程序&#xff0c;提示…

Linux结业测试题,旨在检测ip网络配置,文件权限等基础

Linux期末结业考试 一、评分方式&#xff08;总分100分&#xff0c;理论40分在职教云考试&#xff09; 主要涉及的知识和技能点*分值权重*Linux的最小安装10%激活网络&#xff0c;并正确设置ip地址10%克隆1台机器&#xff0c;并正确设置ip地址10%SSH免密互信服务10%文件和目录…

CNAS认证是什么?怎么做?

在全球化日益深入的今天&#xff0c;产品质量和安全已经成为企业生存和发展的重要基石。而在这个过程中&#xff0c;CNAS认证作为一种权威性的认可机制&#xff0c;发挥着不可替代的作用。那么&#xff0c;CNAS认证究竟是什么&#xff1f;我们又该如何进行这一认证过程呢&#…

LabVIEW水箱液位控制系统

介绍了如何使用LabVIEW软件和硬件工具开发水箱液位控制系统。系统集成了数据采集、实时控制和模拟仿真技术&#xff0c;展示了高精度和高可靠性的特点&#xff0c;适用于需要精细水位调节的工业应用。 项目背景 在制造和化工行业&#xff0c;液位控制是保证生产安全与效率的关…

vue-loader

Vue Loader 是一个 webpack 的 loader&#xff0c;它允许你以一种名为单文件组件 (SFCs)的格式撰写 Vue 组件 起步 安装 npm install vue --save npm install webpack webpack-cli style-loader css-loader html-webpack-plugin vue-loader vue-template-compiler webpack…

TcpClient 服务器、客户端连接

TcpClient 服务器 TcpListener 搭建tcp服务器的类&#xff0c;基于socket套接字通信的 1 创建服务器对象 TcpListener server new TcpListener(IPAddress.Parse("127.0.0.1"), 3000); 2 开启服务器 设置最大连接数 server.Start(1000); 3 接收客户端的链接,只能…

ARM-V9 RME(Realm Management Extension)系统架构之调试

安全之安全(security)博客目录导读 本节中&#xff0c;“RMSD外部调试”一词用于描述任何系统或PE的外部调试功能&#xff0c;这些功能能够实现以下目的&#xff1a; 监控或修改RMSD行为。对Realm PAS或Realm安全状态的外部访问。 本节中&#xff0c;“Root外部调试”一词用于…

vue2动态路由实现

实现一个简单的动态路由&#xff1a; 1、先定义菜单页面组件的结构&#xff0c;使用的是elementUI的NavMenu 导航菜单 <template><div><el-menu default-active"1" router><el-submenu :index"item.path" v-for"item in menu_…

想设计完美Banner?这7个步骤教你快速上手!

一个合格的网页横幅设计体现在吸引用户点击&#xff0c;促进用户的购物欲望上。网页横幅设计可能是一个漫长而复杂的过程&#xff0c;涉及到每个职位。团队工作时&#xff0c;横幅设计的沟通过程越长&#xff0c;越容易忘记某些步骤&#xff0c;或者因为时间限制而忽略某些部分…

visio添加表格

插入Excel表格&#xff1a; 打开Microsoft Visio&#xff0c;新建一个空白画布。点击菜单栏中的“插入”。在插入中点击“图表”。在弹出的插入对象设置页面中选择“Microsoft Excel工作表”。点击确定按钮&#xff0c;然后在表格中输入内容。将鼠标点击到画布的空白处&#x…

翻译《The Old New Thing》- The case of the exception that a catch (…) didn’t catch

The case of the exception that a catch (...) didnt catch - The Old New Thing (microsoft.com)https://devblogs.microsoft.com/oldnewthing/20240405-00/?p109621 Raymond Chen 2024年04月05日 一位客户认为他们修复了一个bug&#xff0c;但他们仍然因为这个bug而崩溃。…

基于SpringBoot3+Vue3宠物小程序宠物医院小程序的设计与实现

大家好&#xff0c;我是程序员小孟。 最近开发了一个宠物的小程序&#xff0c;含有详细的文档、源码、项目非常的不错&#xff01; 一&#xff0c;系统的技术栈 二&#xff0c;项目的部署教程 前端部署包&#xff1a;npm i 启动程序&#xff1a;npm run dev 注意事项&…

C++ 25 之 调用函数调用规则

c25调用函数调用规则.cpp #include<iostream> using namespace std;class Students04{ // 1.创建好类之后&#xff0c;编译器会默认提供三个函数&#xff1a;默认构造函数、构造函数、拷贝构造函数 // 2.自己写了有参构造函数&#xff0c;编译器就不会提供默认构造函数&…

JAVA云HIS医院管理系统源码 云HIS运维平台源码 SaaS模式支撑电子病历4级,HIS与电子病历系统均拥有自主知识产权

JAVA云HIS医院管理系统源码 云HIS运维平台源码 SaaS模式支撑电子病历4级&#xff0c;HIS与电子病历系统均拥有自主知识产权 系统简介&#xff1a; SaaS模式Java版云HIS系统&#xff0c;在公立二甲医院应用三年&#xff0c;经过多年持续优化和打磨&#xff0c;系统运行稳定、功…

EasyGBS下载、安装、登录WEB

下载 解压后有一个UserManual.pdf&#xff0c;可以参考。 安装 运行EasyGBS.exe 需要重启机器 打开WEB http://localhost:10000 登录WEB easygbs/easygbs