当前位置: 首页 > news >正文

cinematic-gaussians

项目结构

  1. train.py
    主训练脚本,负责模型的训练过程,包括数据加载、模型初始化、优化器设置、训练循环、日志记录和模型保存。

  2. gaussian_me
    核心模块,包含与模型、优化器、渲染器和数据处理相关的代码:

    • io/:处理数据集加载和解析。
    • utils/:提供各种工具函数,如图像处理、损失计算和通用工具。
    • model.py:定义高斯模型的核心逻辑。
    • optim.py:定义优化器,用于更新模型参数。
    • renderer.py:实现渲染逻辑。
  3. docs
    包含项目的文档和静态资源。

  4. submodules
    包含一些外部依赖的子模块,如差分高斯光栅化和简单的 KNN 实现。

核心模块讲解

1. 数据加载与处理

数据加载由 io 模块完成,主要通过 CamerasDataset 类实现:

  • from_folder 方法根据文件夹内容推断数据集类型,并调用相应的解析函数(如 readVolumeSceneInfo)。
  • __getitem__ 方法通过索引访问单个相机数据,并将图像转换为 PyTorch 张量。
  • split_train_val 方法将数据集划分为训练集和验证集。
2. 模型定义

GaussianModel 是项目的核心模型,定义在 model.py 中。它使用高斯分布来表示场景中的点云,并支持 3D 渲染和优化。

3. 优化器

GaussianOptimizer 定义在 optim.py 中,用于更新高斯模型的参数。它支持学习率调整和梯度更新。

4. 渲染器

render 函数定义在 renderer.py 中,用于将高斯模型渲染为图像。它支持背景颜色设置和分辨率调整。

5. 工具函数

utils 提供了多个工具模块:

  • camera_utils.py:处理相机相关的工具函数,如 camera_to_JSON。
  • image_utils.py:提供图像处理工具,如计算 PSNR。
  • loss_utils.py:定义损失函数,如 L1 损失和 SSIM 损失。

训练流程

train.py 文件实现了训练逻辑,主要包括以下步骤:

  1. 参数解析
    使用 argparse 从命令行解析训练参数,并通过 ModelParams、OptimizationParams 和 PipelineParams 类提取参数。

  2. 数据加载
    使用 CamerasDataset.from_folder 加载数据集,并根据需要划分为训练集和验证集。

  3. 模型初始化
    使用 GaussianModel.from_pc 从点云初始化高斯模型,并将其移动到 GPU。

  4. 优化器设置
    初始化 GaussianOptimizer,并设置学习率和优化目标。

  5. 训练循环

    • 每次迭代从数据加载器中获取一个相机视点。
    • 使用渲染器生成图像,并计算与真实图像的损失(L1 和 SSIM)。
    • 反向传播计算梯度,并更新模型参数。
    • 定期记录日志和保存模型。
  6. 日志记录与模型保存
    使用 TensorBoard 记录训练过程中的损失和渲染结果,并在指定的迭代次数保存模型。

通过高斯模型进行训练,具体训练了什么?

  1. 高斯模型的初始化
    使用 GaussianModel.from_pc 方法从数据集中提取的点云数据(dataset.init_pc())初始化高斯模型。高斯模型通过一组高斯分布来表示场景中的点云,每个高斯分布包含位置、半径、方向和颜色等信息。

  2. 数据集的加载与划分

    • 数据集通过 CamerasDataset.from_folder 方法加载,包含场景的相机信息和图像数据。
    • 如果启用了验证模式(model_params.eval),数据集会被划分为训练集和验证集(split_train_val 方法)。
  3. 渲染与损失计算

    • 使用 render 函数将高斯模型渲染为图像。渲染结果包括生成的图像、视点空间点云、可见性过滤器和高斯半径等信息。
    • 计算生成图像与真实图像之间的损失,包括:
      • L1 损失:衡量生成图像与真实图像的像素差异。
      • SSIM 损失:衡量生成图像与真实图像的结构相似性。
    • 最终损失是 L1 损失和 SSIM 损失的加权组合。
  4. 模型参数的优化

    • 使用 GaussianOptimizer 对高斯模型的参数进行优化。优化的目标是最小化渲染图像与真实图像之间的损失。
    • 优化过程中会动态调整学习率,并通过反向传播更新高斯模型的参数。
  5. 背景随机化与多分辨率训练

    • 支持随机背景颜色(opt.random_background),以增强模型的泛化能力。
    • 支持多分辨率训练(scales),逐步提高渲染分辨率以优化细节。
  6. 日志记录与模型保存

    • 使用 TensorBoard 记录训练过程中的损失、渲染结果和模型参数分布。
    • 在指定的迭代次数(saving_iterations)保存高斯模型的点云数据(.npz 格式)。

训练的输出结果

  1. 优化后的高斯模型

    • 高斯模型的参数经过优化后,能够更准确地表示场景中的点云数据。
    • 优化后的模型可以用于高质量的图像渲染。
  2. 渲染图像

    • 训练过程中生成的渲染图像与真实图像逐渐接近,最终能够生成逼真的场景渲染结果。
  3. 日志与可视化

    • 使用 TensorBoard 记录的训练日志,包括:
      • 损失曲线(L1 损失和总损失)。
      • 渲染图像与真实图像的对比。
      • 高斯模型参数的分布(如透明度直方图)。
    • 这些日志可以帮助分析训练过程和模型性能。
  4. 中间与最终模型文件

    • 在指定的迭代次数保存的高斯模型点云文件(.npz 格式),包含优化后的高斯分布参数。
    • 这些文件可以用于后续的评估或渲染。

加载数据集,包含场景的相机信息和图像数据

CamerasDataset.from_folder 方法负责从指定的文件夹路径加载数据集。

  1. 数据集类型推断
    通过检查文件夹中是否存在特定文件(如 cameras.json 或 transforms_train.json),推断数据集的类型。

  2. 场景信息加载
    根据数据集类型调用相应的函数(如 readVolumeSceneInfo 或 readColmapSceneInfo),加载场景信息(scene_info)。

  3. 返回数据集实例
    使用加载的 scene_info 创建并返回一个 CamerasDataset 实例。

scene_info 对象包含了场景的所有信息,包括:

  1. 相机信息
    每个相机的信息存储在 scene_info.cameras 中,包含相机的位姿、视场角(FoV)、图像路径等。

  2. 图像数据路径
    图像数据的路径存储在每个相机信息的 image_path 属性中。图像数据在 __getitem__ 方法中通过路径动态加载:

http://www.xdnf.cn/news/1023463.html

相关文章:

  • 【RAG+读代码】学术文档解析工具Nougat
  • DeepSeek 引领前端开发变革:AI 助力学习与工作新路径
  • 基于STM32手势识别智能家居系统
  • 抖音AI数字人对口型软件LatentSync最新版整合包,音频驱动口型讲话
  • echarts图封装 自动切换 大屏 swiper 切换里面放echarts图,注意不要开循环 否则出不来
  • 图像处理算法的学习笔记
  • SpringBoot的Web应用开发——Web缓存利器Redis的应用!
  • 【UEFI系列】PEI阶段讲解
  • 生产环境LVM存储降级方案
  • Python训练营---DAY53
  • Git 前后端 Java Vue 项目的 .gitignore 配置分享
  • Linux环境下安装和使用RAPIDS平台的cudf和cuml - pip 安装方法
  • java集合(八) ---- Vector 类
  • 电磁铁性能检测所需工具
  • DataGrip 安装和连接Mysql
  • Eslint、Prettier、.vscode 配置
  • 阳台光伏新风口!安科瑞ADL200N-CT/D16-WF防逆流电表精准护航分布式发电
  • NLP学习路线图(四十三):零样本学习
  • 分布式爬虫系统设计与实现:跨节点MySQL存储方案
  • 导出支付宝账单步骤
  • 3款工具打造递进图:快速入门与个性化定制的实用指南
  • 帆软报表超级链接将查询控件的参数传递到子页面查询控件上
  • 谷歌具身智能VLA大模型 —— Gemini Robotics : 将人工智能带入到物理世界
  • 停产料PC28F128J3F75A存储芯片Micron镁光NOR Flash存储器工业级 电子元器件解析
  • AI LLM大模型逆向环境搭建radare2 + r2mcp + r2ghidra
  • AD左边工程面板消失重新打开
  • ansible常用内置模块
  • 13.18 Ollama+LLaMA3企业级部署实战:6步打造私有化大模型高效引擎
  • 【JVM】- 类加载与字节码结构1
  • AXI4-Stream Clock Converter IP