- 【3DV 进阶-1】Hunyuan3D2.1 训练代码详细理解上-模型调用流程
- 【3DV 进阶-2】Hunyuan3D2.1 训练代码详细理解下-数据读取流程
- 【3DV 进阶-3】Hunyuan3D2.1 训练代码详细理解之-Flow matching 训练 loss 详解
- 【3DV 进阶-4】VecSet 论文+代码对照理解
- 【3DV 进阶-5】3D生成中 Inductive Bias (归纳偏置)的技术路线图
- 【3DV 进阶-6】为什么3D点云是无序集合?而2D图片是有序的呢?
- 【3DV 进阶-7】Hunyuan3D2.1-ShapeVAE 整体流程
- 【3DV 进阶-8】Hunyuan3D2.1 数据预处理详解- 水密化和采样 watertight and sample
- 【3DV 进阶-9】Hunyuan3D2.1 中的 MoE
- 【3DV 进阶-10】Trellis 中的表示 SLat 理解
本文介绍 Trellis.2 数据处理与训练流程图。
┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
│ TRELLIS.2 数据处理与训练流程图 │
└──────────────────────────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────┐
│ 原始3D资产下载 │
│ (download.py) │
│ glb/fbx/obj/... │
└──────────┬──────────┘
│
┌──────────────────────────┼──────────────────────────┐
│ │ │
▼ ▼ ▼
┌─────────────────────┐ ┌─────────────────────┐ ┌─────────────────────┐
│ 导出白模网格 │ │ 导出PBR纹理 │ │ 渲染多视角图像 │
│ (dump_mesh.py) │ │ (dump_pbr.py) │ │ (render_cond.py) │
│ │ │ │ │ │
│ mesh_dumps/*.pkl │ │ pbr_dumps/*.pkl │ │ rendered_cond/ │
│ (vertices+faces) │ │ (BaseColor,Metal │ │ (16张多视角图像) │
│ │ │ Roughness,Alpha) │ │ │
└──────────┬──────────┘ └──────────┬──────────┘ └──────────┬──────────┘
│ │ │
▼ ▼ │
┌─────────────────────┐ ┌─────────────────────┐ │
│ 形状体素化 │ │ PBR体素化 │ │
│ (dual_grid.py) │ │ (voxelize_pbr.py) │ │
│ │ │ │ │
│ dual_grid_256/ │ │ voxel_pbr_256/ │ │
│ dual_grid_512/ │ │ voxel_pbr_512/ │ │
│ dual_grid_1024/ │ │ voxel_pbr_1024/ │ │
│ (O-Voxels格式) │ │ (O-Voxels格式) │ │
└──────────┬──────────┘ └──────────┬──────────┘ │
│ │ │
│ ┌────────────────────┘ │
│ │ │
▼ ▼ │
╔═══════════════════════════════════════════╗ │
║ SC-VAE 训练 (第一阶段) ║ │
╠═══════════════════════════════════════════╣ │
║ ║ │
║ ┌─────────────────────────────────────┐ ║ │
║ │ Shape VAE │ ║ │
║ │ 配置: shape_vae_next_dc_f16c32 │ ║ │
║ │ 数据: FlexiDualGridDataset │ ║ │
║ │ 输入: dual_grid_* (O-Voxels) │ ║ │
║ │ 输出: Shape Encoder + Decoder │ ║ │
║ └─────────────────────────────────────┘ ║ │
║ ║ │
║ ┌─────────────────────────────────────┐ ║ │
║ │ Texture VAE │ ║ │
║ │ 配置: tex_vae_next_dc_f16c32 │ ║ │
║ │ 数据: SparseVoxelPbrDataset │ ║ │
║ │ 输入: voxel_pbr_* (O-Voxels+PBR) │ ║ │
║ │ 输出: Texture Encoder + Decoder │ ║ │
║ └─────────────────────────────────────┘ ║ │
║ ║ │
╚═══════════════════════════════════════════╝ │
│ │
│ (使用训练好的Encoder) │
▼ │
┌─────────────────────────────────────────────────┐ │
│ 编码潜在表示 (Latents) │ │
├─────────────────────────────────────────────────┤ │
│ │ │
│ encode_shape_latent.py → shape_latent_*/ │ │
│ encode_pbr_latent.py → pbr_latent_*/ │ │
│ encode_ss_latent.py → ss_latent_*/ │ │
│ │ │
└──────────────────────────┬──────────────────────┘ │
│ │
└────────────────┬────────────────────┘
│
▼
╔═══════════════════════════════════════════════════════════════════╗
║ Flow Model 训练 (第二阶段) ║
╠═══════════════════════════════════════════════════════════════════╣
║ ║
║ ┌─────────────────────────────────────────────────────────────┐ ║
║ │ 1. SS Flow (稀疏结构生成器) │ ║
║ │ 配置: ss_flow_img_dit_1_3B_64_bf16 │ ║
║ │ 数据: ImageConditionedSparseStructureLatent │ ║
║ │ 输入: ss_latent + rendered_cond (图像条件) │ ║
║ │ 功能: 从图像生成稀疏结构 │ ║
║ └─────────────────────────────────────────────────────────────┘ ║
║ ║
║ ┌─────────────────────────────────────────────────────────────┐ ║
║ │ 2. Shape SLAT Flow (形状生成器) │ ║
║ │ 配置: slat_flow_img2shape_dit_1_3B_512_bf16 │ ║
║ │ 数据: ImageConditionedSLatShape │ ║
║ │ 输入: shape_latent + rendered_cond (图像条件) │ ║
║ │ 功能: 从图像生成形状潜在表示 │ ║
║ └─────────────────────────────────────────────────────────────┘ ║
║ ║
║ ┌─────────────────────────────────────────────────────────────┐ ║
║ │ 3. Texture SLAT Flow (纹理生成器) │ ║
║ │ 配置: slat_flow_imgshape2tex_dit_1_3B_512_bf16 │ ║
║ │ 数据: ImageConditionedSLatPbr │ ║
║ │ 输入: pbr_latent + shape_latent + rendered_cond │ ║
║ │ 功能: 基于形状+图像生成纹理潜在表示 │ ║
║ └─────────────────────────────────────────────────────────────┘ ║
║ ║
╚═══════════════════════════════════════════════════════════════════╝
┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
│ 数据依赖总结 │
├──────────────────────────────────────────────────────────────────────────────────────────────────┤
│ │
│ 训练阶段 │ 需要的数据 │ 数据处理脚本 │
│ ─────────────────────────────┼────────────────────────────────────┼─────────────────────────── │
│ Shape VAE │ dual_grid_* │ Step 4-5 │
│ Texture VAE │ voxel_pbr_* + dual_grid_* │ Step 4-5 │
│ SS Flow │ ss_latent + rendered_cond │ Step 6-7 │
│ Shape SLAT Flow │ shape_latent + rendered_cond │ Step 6-7 │
│ Texture SLAT Flow │ pbr_latent + shape_latent + cond │ Step 6-7 │
│ │
└──────────────────────────────────────────────────────────────────────────────────────────────────┘
总结
数据处理共7步,训练分2个阶段:
数据处理流程
-
步骤1:安装依赖
初始化环境并安装必要依赖:
. ./data_toolkit/setup.sh
-
步骤2:初始化元数据
加载数据集元数据(训练集:ObjaverseXL, ABO, HSSD, TexVerse;测试集:SketchfabPicked, Toys4k)
-
步骤3:下载数据
下载3D资产到本地存储,支持多节点分布式下载
-
步骤4:处理网格和PBR纹理
标准化3D资产:
- 导出网格(
dump_mesh.py) - 导出PBR纹理(
dump_pbr.py) - 获取资产统计信息(asset_stats.py)
- 导出网格(
-
步骤5:转换为O-Voxels
将处理后的网格和纹理转换为O-Voxels格式:
dual_grid.py:生成形状的O-Voxelsvoxelize_pbr.py:生成PBR纹理的O-Voxels- 支持多分辨率(如 256, 512, 1024)
此时数据集可用于 SC-VAE 训练
-
步骤6:编码潜在表示(Latents)
为训练第一阶段生成器,将稀疏结构编码为潜在表示:
- 编码形状潜在表示(
encode_shape_latent.py) - 编码PBR潜在表示(
encode_pbr_latent.py) - 更新元数据
- 编码稀疏结构(SS)潜在表示(
encode_ss_latent.py)
- 编码形状潜在表示(
-
步骤7:渲染图像条件
为训练图像条件生成器,渲染多视角图像(默认每个资产16个视角
阶段一:SC-VAE 训练(需要 Step 1-5 的数据)
- Shape VAE:学习形状的压缩表示,输入 O-Voxels 形状
- Texture VAE:学习纹理的压缩表示,输入 O-Voxels + PBR
阶段二:Flow Model 训练(需要 Step 6-7 的数据)
用训练好的 VAE Encoder 编码数据后:
- SS Flow:从图像生成稀疏结构(低分辨率骨架)
- Shape SLAT Flow:从图像生成高分辨率形状
- Texture SLAT Flow:基于形状+图像生成纹理