Stable Video Diffusion代码调试

网络上关于Stable Video Diffusion代码运行的相关资料比较少,记录一下自己在运行stable video diffusion中遇到的问题,希望对大家有帮助。

GitHub项目地址:Stability-AI/generative-models: Generative Models by Stability AI (github.com)

代码运行环境:

在Linux系统下按照Installation下的指令安装即可

模型训练中可能遇到的问题

训练命令示例:

python main.py --base configs/example_training/toy/mnist_cond.yaml

其中 --base 是虚拟环境名称,需要替换为自己在Installation时创建的虚拟环境名

运行python main.py --base configs/example_training/toy/mnist.yaml

出现上述报错,分析原因:是trainer_config字典中没有“device”键,以此为突破口查询main.py文件中666行之前和config相关的值,发现都是空值。这时思考,所需要的train_config以及之前代码中的config文件所需要的数据类型为字典,那么尝试直接读取yaml文件,将其转化为字典并赋给config

解决方案:

将630行左右的try部分红框部分注释,替换为638-641行

ps:这个问题大家要结合自己实际,如果没有报错就不要改。我早上这段代码报了上面的错误做了如上修改。晚上再跑,源代码是正确的,修改完是错误的,很奇怪。

在模型训练完成后,会出现如下报错:

raise MisconfigurationException(f"No `{step_name}()` method defined to run `Trainer.{trainer_method}`.")
这个问题,经过查询暂时还没有好的解决方案,目前的解决方案是在main文件中把trainer.test代码注释掉(待补充)

修改为:

运行python main.py --base configs/example_training/toy/mnist_cond.yaml可能出现的问题

在解决完上面minst.yaml的基础上继续解决运行minst_cond.yaml可能出现的问题

在不做任何修改的情况下会出现:

AttributeError: 'IdentityFirstStage' object has no attribute 'decoder'. Did you mean: 'decode'?
 

这个问题的意思是IdentityFirstStage中没有decoder方法

查看IdentityFirstStage中的代码(IdentityFirstStage的位置是sgm/models/autoencoder.py,用pycharm可以方便定位到)

发现并没有decoder方法,将def decode修改为def decoder

修改完成后继续运行:

报错requests.exceptions.ConnectTimeout: HTTPConnectionPool(host='169.254.169.254', port=80): Max retries exceeded with url: /latest/meta-data/instance-id (Caused by ConnectTimeoutError(<urllib3.connection.HTTPConnection object at 0x7fdd0d491360>, 'Connection to 169.254.169.254 timed out. (connect timeout=None)'))

定位到报错行:

读一下报错的大致意思是网络问题,下面我做了这样一件事情:查找resp在文件中有多少地方涉及到,发现在main文件中只有924-928行涉及到了resp,接着进一步阅读924-928行代码,明白大致是做什么的(自己阅读、用搜索引擎或者大模型都可以):

在理解代码作用之后,我们可以做出如下判断:这段代码和主要功能无关,那么可以果断注释掉:

解决完成后继续运行,报错:

 File "/vhome/shipu/generative-models-main/sgm/models/autoencoder.py", line 90, in decode
    raise NotImplementedError("decode()-method of abstract base class called")
NotImplementedError: decode()-method of abstract base class called
 

看一下报错信息,问题还是聚焦在IdentityFirstStage中,这个问题是说我们没有实现decode方法,那也就是说我们之前将decode方法修改为decoder方法不太妥当,那么怎么处理呢,这里我也不知道处理的方式对不对,仅供参考:

观察IdentityFirstStage类中各方法的实现方式

可以发现各方法的实现大致相同,既然缺少decode方法,那我们就补充decode方法:

其实这里我感觉更有可能的情况是作者在调用decode方法时写成了decoder,导致一开始我们把decode方法名修改为decoder

修改完成后继续运行:

运行成功!

  • 33
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值