Stable-DreamFusion安装及使用

电脑原配置为4060,cuda12.1,vs2019,需要结合官方的教程,这里是额外一些问题的说明

首先GitHub上下载Stable-DreamFusion

https://github.com/ashawkey/stable-dreamfusion

创建虚拟环境这些不用说了,然后

pip install -r requirements.txt

这里有问题的是torch默认是CPU版本的,可以注释掉,然后nvdiffrast和Clip直接用git可能下载不下来,我的做法是直接去对应的GitHub上下载到stable-dreamfusion的文件夹里,然后在虚拟环境里分别运行两个文件夹下的setup.py

cd nvdiffrast

python setup.py install

cd Clip

python setup.py install

然后这两个也可以注释掉,其他的就能下载没问题了,然后单独下载torch,随便在pytorch官网找个支持GPU的版本,torch的cuda版本可以向下兼容不可以向上兼容

pip install torch==1.13.1+cu117 torchvision==0.14.1+cu117 torchaudio==0.13.1 --extra-index-url https://download.pytorch.org/whl/cu117

 然后是下载3个权重,可以开梯子直接去以下网址

 https://zero123.cs.columbia.edu/assets/zero123-xl.ckpt

Google 云端硬盘 - 病毒扫描警告

https://drive.google.com/uc?id=1Jrh-bRnJEjyMCS7f-WsaFlccfPjJPPHI&confirm=t

下载完以后直接放在对应的pretrained/文件夹里

此时直接运行,还是会报错

python main.py --text "a hamburger" --workspace trial -O

 报错的主要原因是要去huggingface下载stablediffusion的权重,但是国内有墙,通常会下一半断掉,具体做法是去stabilityai/stable-diffusion-2-1-base · Hugging Face​​​​​​

 下载文件夹,里面只下载前六个文件夹和model_index.json就行,前六个文件夹里有比较大ckpt文件,据我尝试只下载1个ckpt就行,然后找到huggingface默认下载的文件夹一般是C:\Users\Yuuri\.cache\huggingface\hub\models--stabilityai--stable-diffusion-2-1-base\snapshots,把缺的东西补进去就行

这时候再运行应该不会报错,但是我笔记本的显存不够了,后面搬到服务器上试试

还有一些报错什么语法错误,好像是因为python3.7的print不支持符号?把=号去掉就好了

目前把这个模型移到了ubuntu服务器上,其他都一样,但是服务器train的时候会一直卡在模型信息打印之后,经过debug测试,是因为有一些cuda模型加载不出来,具体解决思路是

network_grid.py里面的两个encode

self.encoder, self.in_dim = get_encoder('hashgrid', input_dim=3, log2_hashmap_size=19, desired_resolution=2048 * self.bound, interpolation='smoothstep')
self.encoder_bg, self.in_dim_bg = get_encoder('frequency', input_dim=3, multires=6)

hashgrid卡可能是由于没有ninja,找到ninja的位置终端输入where ninja,

C:\Users\Yuuri\.conda\envs\sdf\Scripts\ninja.exe

然后在系统全局变量里添加C:\Users\Yuuri\.conda\envs\sdf\Scripts\,重启即可

卡在frequency大概率是cuda和驱动版本问题因为后续又出现了一些问题,发现原因是在这两个的引入文件里,freqencode/freq.py和gridencode/grid.py

import _freqencode from _backend改成import freqencode from _backend

import _gridencode from _backend改成import gridencode from _backend

这个方法在加载模型的时候不会报错,实际应用的时候会报错

module 'gridencoder' has no attribute 'grid_encode_forward'

最离谱的就是我之前已经训练了两次了,换了个盘突然就不行了,根据我的观察,原来是实时编译./gridencoder的,但是今天突然就无法编译了,训练和测试都不行,还有一个方法是提前编译

pip install ./gridencoder 需要等待比较长的时间,但亲测编译以后是可以用的,然后我又编译了

pip install ./freqencoder

pip install ./raymarching

发现后面一些错误都能直接运行了....

好在可以改成torch版本,会慢一些

self.encoder_bg, self.in_dim_bg = get_encoder('frequency_torch', input_dim=3, multires=6)

不能翻墙,所以huggingface下载的stablefusion要直接输送到本地,然后debug以后发现在sd_utils文件夹里

pipe = StableDiffusionPipeline.from_pretrained(model_key, torch_dtype=self.precision_t)
self.scheduler = DDIMScheduler.from_pretrained(model_key, subfolder="scheduler", torch_dtype=self.precision_t)

这两个断点进去,把

local_files_only = kwargs.pop("local_files_only", HF_HUB_OFFLINE)

改成True就可以本地训练了,不用每次都连到huggingface

训练的时候出现

loss=nan (nan), lr=0.050000: :   1% 1/100 [00:00<01:24,  1.17it/s]NaN or Inf found in input tensor.

见上文,编译pip install ./raymarching

网上原因是显卡驱动太老了, 建议更新到525,但我看了服务器驱动是525以上,我自己笔记本驱动是535,而且我不熟悉ubuntu更新显卡驱动(害怕出问题,影响其他人),所以目前还没有解决,考虑挂到issue上看看有没有其他方法。

issue上有人说将main.py里的opt.cuda_ray改成false,试了一下确实可以,然后新问题是我之前把cuda设置成6然后在test的时候报错cuda error,原因是测试的时候数据不在同一个cuda,好消息是cuda0此时是空的,所以cuda设为默认以后终于成功在服务器上运行了

再记录一下测试的情况,在我自己笔记本上跑了大概20多个epoch

python main.py --workspace trial -O --test --gui
python main.py --workspace trial -O --test --save_mesh

test可以生成三维面片obj、mtl、png,可以用在线网站3D模型在线查看器 - BimAnt

打开查看 

能有一个汉堡包的模型样子,下一篇博客开始研究这个模型的原理和其他命令的作用

然后是基于图像的尝试,图像是基于zero123,所以要用到之前下载的模型权重,然后要进行图像的预处理,

python preprocess_image.py <image>.png

预处理又会下载几个预训练权重,我直接把网址贴在这, 路径一般是在cache里面,

https://cdn.carve.photos/Carve/tracer_b7/resolve/d8a8fd9e7b3fa0d2f1506fe7242966b34381e9c5/tracer_b7.pth

https://cdn.carve.photos/Carve/fba/resolve/a5d3457df0fb9c88ea19ed700d409756ca2069d1/fba_matting.pth

 

timm/vit_base_r50_s16_384.orig_in21k_ft_in1k at main (huggingface.co) 

再加载timm模型的时候会报错,把原代码改成,注意路径改成你自己下下来以后存放的地方

model = timm.create_model("vit_base_resnet50_384", pretrained=pretrained, pretrained_cfg_overlay=dict(file='/home/name/.cache/huggingface/hub/models--timm--vit_base_r50_s16_384.orig_in21k_ft_in1k/pytorch_model.bin'))

 

https://openaipublic.azureedge.net/clip/models/b8cca3fd41ae0c99ba7e8951adf17d267cdb84cd88be6f7c2e0eca1737a03836/ViT-L-14.pt

预处理完了以后会生成image_rgba.png

python main.py -O --image <image>_rgba.png --workspace trial_image --iters 5000

总结:如果没有墙的话,效率会高十倍不止,很多报错都是因为有墙

大模型建议直接在有大GPU的电脑上尝试吧,省得又要重来

cuda真神奇,要好好学习代码背后的原理

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 16
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值