3DMM模型

news2024/11/17 15:50:58

目录

    • BFM
      • BFM_2009
        • 01_MorphableModel.mat
        • exp_pca.bin
        • topology_info.npy
        • exp_info.npy

BFM

BFM_2009

01_MorphableModel.mat
from scipy.io import loadmat
original_BFM = loadmat("01_MorphableModel.mat")
# dict_keys: ['__header__', '__version__', '__globals__',
#			 'tl',
#			 'shapeMU', 'shapePC', 'shapeEV',
#			 'texMU', 'texPC', 'texEV',
# 			 'segbin', 'segMM', 'segMB']

这个mat文件是通过MATLAB创建的,所有的index都是从1开始,需要特别注意。这个文件里主要存了3DMM mesh的几何(shape)和纹理(tex)相关的PCA参数。
__header__ \text{\_\_header\_\_} __header__: MATLAB 5.0 MAT-file, Platform: GLNX86, Created on: Wed Jul 23 15:09:28 2008
__version__ \text{\_\_version\_\_} __version__: 1.0
__globals__ \text{\_\_globals\_\_} __globals__: []
tl \text{tl} tl: [106466, 3],106466个面片,每个面片的顶点序号。
shapeMU \text{shapeMU} shapeMU:这个字段存的是mean shape。维度 [160470, 1], 53490个3D顶点reshape成了[160470, 1]的维度,数值范围[-114062.2, 131943.88],实际使用时,一般会除以1e5,将单位统一到分米。
shapePC \text{shapePC} shapePC: 这个字段存的是 principle shape components,shape的主成分基。维度[160470, 199],基的维度为199维。数值范围[-0.041886166,0.046161193]。
shapeEV \text{shapeEV} shapeEV: 这个字段存的是shape eigen value,表征shape每个主成分分量的标准差。维度[199, 1], 数值范围[3750.5396, 884336.25]。
texMU \text{texMU} texMU: mean texture,维度[160470, 1],数值范围[14.414997, 239.3551]。
texPC \text{texPC} texPC: principle texture components,维度[160470, 199],数值范围[-0.050797794, 0.055871148]。
texEV \text{texEV} texEV: texture eigen value,维度[199, 1],数值范围[127.32297, 4103.179]。
segbin \text{segbin} segbin:维度[53490, 4],以one-hot的形式定义了每个3D点所属的语义类别,如下图所示总计分为4类。
segMM \text{segMM} segMM: 维度[53490, 53490],稀疏矩阵。
segMB \text{segMB} segMB: 维度[53490, 213960],稀疏矩阵。

shape或者texture的计算公式为:

obj = mu + pc * (coef * ev)

shape还会叠加上表情系数带来的顶点偏移量。因此更具化的计算过程如下:

texture = tex_mu + tex_pc * (tex_coef * tex_ev)
shape = shape_mu + shape_pc * (tex_coef * shape_ev) + exp_pc * (exp_coef * exp_ev)
shape /= 1e5

原生的BFM2009只有shape和texture,没有提供表情相关的PCA参数。表情相关的PCA参数用的是下述的exp_pca.bin

exp_pca.bin

原始的BFM2009模型包含53490个顶点。
CNN-based Real-time Dense Face Reconstruction with Inverse-rendered Photo-realistic Face Images中提供的表情基包含了53215个顶点。真的是说来话长,这里的53215个顶点是借鉴了Face Alignment Across Large Poses: A 3D Solution这篇论文的处理方式,删掉了inner mouth vertices,具体从原始的53490个顶点中取了哪53215个点构成新的mesh,可以看model_info[‘trimIndex’]字段。那又为什么要删掉口腔内部顶点呢?

D3DFaceRecon又在53215的基础上沿着face landmarks裁剪,新的mesh包含35709个顶点。

topology_info.npy
topology = np.load("topology_info.npy", allow_pickle=True).item()
# dict_keys: ['tris', 'vert_tris', 'sub_inds']

这个npy文件定义了顶点数为34650,面片数为68746的 mesh \text{mesh} mesh拓扑结构。
tris \text{tris} tris: [68746, 3],每个面片由3个顶点组成,这个字段存储了68746个面片的每个面片的顶点序号。
vert_tris \text{vert\_tris} vert_tris: [34650, 8], 每个顶点会连接8个三角面片,这字段存储了34650个顶点的每个顶点连接的面片序号,面片从0开始编号。
sub_inds \text{sub\_inds} sub_inds: [34650,], 顶点序号从0开始,排到了53423,但实际只使用了34650个顶点,这个字段存储了这34650个顶点的序号。

这里有个问题, sub_inds \text{sub\_inds} sub_inds最大序号是53423,合计53424个点,01_MorphableModel中定义的mesh是53490个点。少掉的具体是哪66个点?

exp_info.npy
exp_info = np.load("exp_info.npy", allow_pickle=True).item()
# dict_keys: ['mu_exp', 'base_exp', 'sig_exp']

mu_exp \text{mu\_exp} mu_exp:表情均值,维度[103950,],34650个3D点reshape成了[103950,]维度,数值范围[-607.75006, 725.0776]。
base_exp \text{base\_exp} base_exp:表情基,维度[79, 103950], 表情基维度为79维,数值范围[-0.028425552, 0.07618008]。
sig_exp \text{sig\_exp} sig_exp:表情基的方差,维度[79,],数值范围[1587.7286, 285403.94]。

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

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

相关文章

C++ 文件操作之配置文件读取

C 文件操作之配置文件读取 在项目应用时常常会涉及一些调参工作,如果项目封装成了.exe或者.dll,那么频繁调参多次编译是一件十分低效的事情,如果代码算法或者逻辑是一定的,那么参数完全可以通过读入配置文件来获取之前在用C - op…

SpringBoot药品进销存管理系统(诊所管理系统)(乡村药店管理系统)

SSM毕设分享 SpringBoot药品进销存管理系统(诊所管理系统)(乡村药店管理系统) 1 项目简介 Hi,各位同学好,这里是郑师兄! 今天向大家分享一个毕业设计项目作品【SpringBoot药品进销存管理系统(诊所管理系统)(乡村药店管理系统)】 师兄根据实…

ROS-ROS通信机制-话题通信

文章目录 一、话题通信基础知识二、话题通信基本操作2-1 C2-2 Python2-3 C与python节点通信 三、自定义msg3-1 自定义msg3-2 C实现自定义msg调用3-3 Python实现自定义msg调用 一、话题通信基础知识 话题通信实现模型是比较复杂的,该模型如下图所示,该模型中涉及到三…

zxjy001-项目整体介绍

1、项目类型 全栈项目 前端:系统后台,系统前台后端:提供API接口 2、项目技术栈 前端 Vue,Element,Axios,NodeJs后端 Spring Boot,Spring Cloud,MybatisPlus,Spring Security,Redis,Maven,JWT,OAuth2其他技术 阿里云oss服务阿里云视频点播…

微服务实战系列之Cache(技巧篇)

前言 凡工具必带使用说明书,如不合理的使用,可能得到“意外收获”。这就好比每个人擅长的领域有所差异,如果放错了位置或用错了人,也一定会让 Leader 们陷入两难之地:“上无法肩负领导之重托,下难免失去伙伴…

设计模式之代理模式(1)

目录 概述定义应用场景主要角色类图 详述基本代码应用实例符合的设计原则 总结 概述 定义 代理模式是一种结构型设计模式,它允许通过一个代理对象来控制对原始对象的访问。代理对象可以在不改变原始对象的情况下,增加一些额外的功能,例如权限…

kubectl获取ConfigMap导出YAML时如何忽略某些字段

前言: 当我们在使用Kubernetes时,常常需要通过kubectl命令行工具来管理资源。有时我们也想将某个资源的配置导出为YAML文件,这样做有助于版本控制和资源的迁移。然而,默认情况下,使用kubectl get命令导出资源配置会包…

【IPv6】IPv6协议

一、IPv6数据报格式 这是与v4报头的对比 1.8bit的版本保留了,v4版本就是4,v6就是6。 2.v6去除了v4的首部长度字段,因为v6的首部长是固定的40字节。 3.服务类型(Type of Service, ToS)和通信类型(Traffi…

【Linux下如何生成coredump文件】

一,什么是coredump 我们经常听到大家说到程序core掉了,需要定位解决,这里说的大部分是指对应程序由于各种异常或者bug导致在运行过程中异常退出或者中止,并且在满足一定条件下(这里为什么说需要满足一定的条件呢&#…

贝叶斯网络 (人工智能期末复习)

文章目录 贝叶斯网络(概率图模型)定义主要考点例题- 要求画出贝叶斯网络图- 计算各节点的条件概率表- 计算概率- 分析独立性 贝叶斯网络(概率图模型) 定义 一种简单的用于表示变量之间条件独立性的有向无环图(DAG&am…

操作系统概述及发展史、Linux内核、发行版及应用领域

一、 操作系统(Operation System,OS) 裸机:没有安装操作系统的计算机 如果想在 裸机 上运行自己所编写的程序,就必须用机器语言书写程序如果计算机上安装了操作系统,就可以在操作系统上安装支持的高级语言…

工程师业余生活之制作蔬菜盆景

工程师业余生活陶冶情操之制作蔬菜盆景 (蔬 果 盆 景 裝 點 家 居) 市場上好多蔬菜瓜果,稍用一些心思,將一些價廉的蔬果製成別致的盆景, 便能使家居充滿自然氣息,增添生活情趣。以下介紹幾種製作方法: 【番薯盆景】 (番薯又名地…

人工智能_机器学习060_核函数对应数学公式_数据空间错位分割_简单介绍_以及核函数总结---人工智能工作笔记0100

我们之前做的都是线性分类问题,那么需要一根线来分割类别,但是,如果出现了,环形数据,我们知道,在二维中我们就无法分割了,那么有没有什么办法分割呢? 实际上是有的,可以看到,我们可以把数据进行升维,可以看到,如果把数据升高到2维度以上,可以看到,神奇的一幕出现了,这个时候,因…

每日3道PWN(第一天)

环境准备 我现在用的是kali 现阶段工具:checkesc、IDA、比较完善的python环境 下载工具的话,我这里不提供了 buuctf——test_your_nc1 参考wp: BUUCTF PWN-----第1题:test_your_nc_buuctf test_your_nc-CSDN博客 查看的资料:…

风格迁移网络修改流程(自用版)

一. AdaAttN-Revisit Attention Mechanism in Arbitrary Neural Style Transfer(ICCV2021) 下载vgg_normalised.pth打开visdom python -m visdom.server在 train_adaattn.sh 中配置 content_path、style_path 和 image_encoder_path,分别表…

深入理解Zookeeper系列-4.Watcher原理

👏作者简介:大家好,我是爱吃芝士的土豆倪,24届校招生Java选手,很高兴认识大家📕系列专栏:Spring源码、JUC源码、Kafka原理、分布式技术原理🔥如果感觉博主的文章还不错的话&#xff…

深入浅出理解kafka

1.Kafka简介 Kafka 本质上是一个 MQ(Message Queue),使用消息队列的优点: 解耦:允许独立的扩展或修改队列两边的处理过程。可恢复性:即使一个处理消息的进程挂掉,加入队列中的消息仍然可以在系…

LinuxBasicsForHackers笔记 -- 控制文件和目录权限

对于每个文件和目录,我们可以指定文件所有者、特定用户组以及所有其他用户的权限状态。 不同类型的用户 在Linux中,root用户是拥有一切权力的。 root 用户基本上可以在系统上执行任何操作。 系统上的其他用户具有有限的能力和权限,并且几乎…

使用正则表达式时-可能会导致性能下降的情况

目录 前言 正则表达式引擎 NFA自动机的回溯 解决方案 前言 正则表达式是一个用正则符号写出的公式,程序对这个公式进行语法分析,建立一个语法分析树,再根据这个分析树结合正则表达式的引擎生成执行程序(这个执行程序我们把它称作状态机&a…