stable-dreamfusion 复现

本文记录了一位深度学习初学者在复现Google的Dreamfusion网络过程中遇到的困难,包括使用stabledreamfusion的部署配置、安装步骤,以及解决nvdiffrast、CLIP和tinycudann等库的问题和HuggingFace连接问题的实践经验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

深度学习小白,毕设要用到这个网络,复现遇到了挺多困难,记录一下解决过程。

dreamfusion是google开发的text to 3D的网络,不管是dreamfusion还是他使用的文本到二维生成网络imagen都是不开源的,因此想尝试dreamfusion,只能用他的模仿品stable dreamfusion,stable dreamfusion的作者提到,他无法复现出dreamfusion这么好的效果,但在paper with code上,他在T**3 数据集上,表现依然很靠前。

部署配置

4060,vs2022,cuda11.8

建议在GPU内存大于24G的服务器上部署,这样可以用他的各种可选功能,效果也会更好。其他无过多要求,我开始用的显卡是4060,不太够用,后面就换服务器上跑了。

 

网址 

GitHub - ashawkey/stable-dreamfusion: Text-to-3D & Image-to-3D & Mesh Exportation with NeRF + Diffusion.

安装

下载源码

git clone https://github.com/ashawkey/stable-dreamfusion.git
cd stable-dreamfusion

创建conda/venv环境

先检查下cuda,torch,python这个对应,建议单独拿出来装

pip install torch==2.1.2+cu118 torchvision==0.16.2+cu118 --extra-index-url https://download.pytorch.org/whl/cu118

剩下的直接装(建议注释掉requirements.txt中的torch,一是已经装过了,二是按他那个默认的装可能下载成cpu版本的)

pip install -r requirements.txt

随后下载三个权重,第一个放在pretrained/zero123里,第二三个放在pretrained/omnidata里。

第一个下载地址:https://zero123.cs.columbia.edu/assets/zero123-xl.ckpt

第二三个下载地址(当然用gdown下载也是一样的):https://drive.usercontent.google.com/download?id=1wNxVO4vVbDEMEpnAi_jwQObf2MFodcBR&authuser=0

https://drive.usercontent.google.com/download?id=1Jrh-bRnJEjyMCS7f-WsaFlccfPjJPPHI&authuser=0

讲道理,按说这样就ok了,确实ok的就不用往下看了,我记录一下不ok的问题(可能有点蠢)。

问题

1.  requirements中有三个库是可能出现问题的nvdiffrast,CLIP,tinycudann。

他们都基本是网络问题导致的,前两个很简单,第三个要稍微费点劲。

前两个,先开个总文件夹lib存他们,然后直接去github上搜一下,git clone下来,然后在你开的环境里运行(这个其实就是pip的工作流程)

python setup.py install

第三个,如果要是一遍安装成功就不用来看这个了。

        fmt:https://github.com/fmtlib/fmt/tree/b0c8263cb26ea178d3a5df1b984e1a61ef578950

        cutlass:
        https://github.com/NVIDIA/cutlass/tree/1eb6355182a5124639ce9d3ff165732a94ed9a70

  • 以管理者身份打开"x64 Native Tools Command Prompt for VS 2022"终端,cd到你tinycudann的这个路径,一直cd到./tiny-cuda-nn/bindings/torch这里
  • my_venv是你为stable dreamfusion创建的conda/venv环境,随后运行
    activate tiny-cuda-nn
    python setup.py install

2.三个需要在运行时才编译的库(我很不理解,为啥不能pip的时候就给人安装好)

gridencoder,raymarching,freqencoder

我测试出来的方法是首先分别进入他们仨的文件夹,找到setup.py,注释掉nvcc_flag中的'-O3', '-std=c++14',以及如果你的visual studio不装在c盘,记得改下下面那个路径

随后直接在你的环境中python setup.py install就好

3. 出现huggingface的连接问题。

这个问题见仁见智了,爱怎么解决怎么解决,stackflow和github上有很多解法。

这个工程是用from_pretrained()方法下载的,我不会看他到底下在哪,虽然他提示了C:/User/xx/.cache/huggingface/.......这样的路径,但我把下载好的东西放过去他提示找不到,所以还是一劳永逸。

断开你的梯子,然后设置环境变量

setx HF_ENDPOINT=https://hf-mirror.com

随后就可以根据readme里的usage测试训练啦!

<think>嗯,用户现在在做3D重组,用Stable DreamFusion。我需要仔细分析他的情况。首先,他已经用几个模型处理了数据:YOLOv8+SAM生成mask,MiDaS生成深度图,分辨率都是384x256。现在他想用Stable-Dreamfusion进行3D重组,需要具体代码。 用户可能对DreamFusion的流程不太熟,所以得一步步来。首先,可能需要准备数据,包括图像、mask、深度图。然后配置环境,安装依赖库,比如PyTorch、Diffusers、HuggingFace Transformers之类的。接着,可能需要加载预训练模型,比如Stable Diffusion,然后结合NeRF进行3D重建。 用户的数据结构可能需要整理,比如每个类别的图片放在不同文件夹,mask和深度图对应命名。代码部分可能需要读取这些数据,将它们作为输入传递给模型。要注意的是,Stable-Dreamfusion可能需要特定的输入格式,比如调整图像大小,或者归一化处理。 另外,DreamFusion原本是基于文本生成3D模型,但用户有图像和深度信息,可能需要修改流程,利用这些信息来引导3D重建。可能需要使用类似于Img2NeRF的方法,或者利用depth-aware的NeRF实现。 代码方面,可能需要先加载模型,定义NeRF模型,设置优化器。然后,在训练循环中,结合RGB图像、mask和深度图作为监督信号,进行体积渲染,计算损失,反向传播。可能需要调整损失函数,包括颜色损失、深度损失、mask的交叉熵损失等。 用户可能遇到的问题包括环境配置、版本兼容性、显存不足等,需要提醒他们可能的注意事项。比如建议使用特定版本的库,或者降低分辨率来节省显存。 最后,用户可能需要将生成的3D模型导出为mesh格式,比如.obj或.ply,并提供可视化的代码示例,比如使用matplotlib或pyvista进行渲染。 需要确保代码结构清晰,步骤明确,注释详细。同时,提醒用户可能需要根据实际情况调整参数,如学习率、迭代次数等,并提供参考的文献或GitHub仓库,方便他们进一步研究。</think>我将为您梳理Stable-Dreamfusion的实现流程并提供关键代码框架。以下是分步骤实现方案: --- ### 一、环境准备 ```bash # 建议使用Python 3.8+和PyTorch 1.12+ conda create -n dreamfusion python=3.8 conda install pytorch torchvision torchaudio cudatoolkit=11.3 -c pytorch pip install git+https://github.com/ashawkey/stable-dreamfusion pip install opencv-python matplotlib imageio gdown ``` --- ### 二、数据结构准备 建议按如下结构组织数据: ``` data/ ├── class1/ │ ├── frame0001_rgb.png # 原图 │ ├── frame0001_mask.png # SAM掩码 │ ├── frame0001_depth.png # MiDaS深度图 │ └── ... # 其他关键帧 ├── class2/ └── class3/ ``` --- ### 三、核心代码框架(结合您的数据特性修改) ```python import torch from sd import StableDreamFusion from nerf import NeRF from torchvision import transforms class DreamFusionWrapper: def __init__(self, data_path): # 初始化模型 self.sd_model = StableDreamFusion( model_path="stabilityai/stable-diffusion-2-1-base", nerf=NeRF(), device="cuda" ) # 加载自定义数据 self.rgb_imgs, self.masks, self.depths = self.load_custom_data(data_path) # 定义图像预处理 self.transform = transforms.Compose([ transforms.Resize((256, 384)), # 保持原始分辨率 transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5)) ]) def load_custom_data(self, path): # 实现自定义数据加载逻辑(需补充文件遍历代码) # 返回: rgb_tensor, mask_tensor, depth_tensor pass def train(self): # 结合多模态监督信号 for epoch in range(1000): # NeRF体积渲染 rendered_rgb, rendered_depth = self.sd_model.render() # 计算多模态损失 rgb_loss = torch.nn.functional.mse_loss(rendered_rgb, self.rgb_imgs) depth_loss = torch.nn.functional.l1_loss(rendered_depth, self.depths) mask_loss = torch.nn.functional.binary_cross_entropy( rendered_mask, self.masks ) total_loss = rgb_loss + 0.5*depth_loss + 0.2*mask_loss # 反向传播 self.optimizer.zero_grad() total_loss.backward() self.optimizer.step() if __name__ == "__main__": wrapper = DreamFusionWrapper("./data/class1") # 逐个类别训练 wrapper.train() wrapper.save_mesh("output.obj") # 导出3D模型 ``` --- ### 四、关键参数调整建议 1. **NeRF网络结构**: ```python NeRF( D=8, # 网络深度 W=256, # 网络宽度 input_ch=63, # 输入通道数(需与数据匹配) output_ch=4, # 输出通道(RGB+密度) skips=[4], # 跳跃连接层 ) ``` 2. **训练参数**: ```python optimizer = torch.optim.Adam( params=self.sd_model.nerf.parameters(), lr=5e-4, # 初始学习率 betas=(0.9, 0.999) ) scheduler = torch.optim.lr_scheduler.ExponentialLR(optimizer, gamma=0.99) ``` --- ### 五、注意事项 1. **显存优化**: ```python # 在NeRF配置中添加 use_fp16 = True # 半精度训练 num_rays = 1024 # 单次射线采样数 ``` 2. **深度图处理**: ```python # 需将MiDaS深度图归一化到[0,1] depth_img = cv2.imread(depth_path, cv2.IMREAD_UNCHANGED) depth_normalized = (depth_img - depth_img.min()) / (depth_img.max() - depth_img.min()) ``` 3. **多视角一致性**: 建议添加姿态估计模块(可考虑使用COLMAP进行稀疏重建获取相机位姿) --- ### 六、可视化输出 ```python # 导出后使用MeshLab查看 import pyvista as pv mesh = pv.read("output.obj") mesh.plot(texture=self.texture) ``` 建议参考论文实现: 1. DreamFusion原始论文:https://dreamfusion3d.github.io/ 2. Stable-Dreamfusion改进:https://github.com/ashawkey/stable-dreamfusion 实际实现中需要根据具体数据分布调整损失函数权重和训练策略。建议先用单个物体调试后再扩展多类别。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Caesala

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值