你好请问想要重新训练这个模型的话我应该怎么做?
请问您解决了吗
还没有
---原始邮件--- 发件人: @.> 发送时间: 2025年3月25日(周二) 下午2:13 收件人: @.>; 抄送: @.@.>; 主题: Re: [andreas128/RePaint] 你好请问想要重新训练这个模型的话我应该怎么做? (Issue #59)
请问您解决了吗
— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you authored the thread.Message ID: @.***> bye111 left a comment (andreas128/RePaint#59)
请问您解决了吗
— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you authored the thread.Message ID: @.***>
我在 Guided-Diffusion 用自己的数据集训练了模型,花了两三天的时间才把每个参数以及相应的函数都弄清楚,也是遇到了n多个bug。本来以为万事大吉,结果现在又遇到bug了,我训练出来的模型,是三通道输出的,但是RePaint使用的是6通道的pt文件,我死活没想明白这个道理。
size mismatch for out.2.weight: copying a param with shape torch.Size([3, 64, 3, 3]) from checkpoint, the shape in current model is torch.Size([6, 64, 3, 3]).
果然看 iusse 还是有用的,刚吐槽完,在下一个 iusse 里就找到了答案,learn_sigma = true 通道就为6。但是又报了别的错……祝各自好运。
请问您解决了吗,我遇到训练出来权重不匹配问题。是不是因为guided-diffusion训练用的unet结构和repaint测试的不同。RuntimeError: Error(s) in loading state_dict for UNetModel: Missing key(s) in state_dict: "input_blocks.4.0.in_layers.0.weight", "input_blocks.4.0.in_layers.0.bias", Unexpected key(s) in state_dict: "input_blocks.4.0.op.weight", "input_blocks.4.0.op.bias", "input_blocks.8.0.op.weight", size mismatch for label_emb.weight: copying a param with shape torch.Size([1, 512]) from checkpoint, the shape in current model is torch.Size([1000, 512]). size mismatch for out.2.weight: copying a param with shape torch.Size([3, 64, 3, 3]) from checkpoint, the shape in current model is torch.Size([6, 64, 3, 3]). size mismatch for out.2.bias: copying a param with shape torch.Size([3]) from checkpoint, the shape in current model is torch.Size([6]).
请问您解决了吗,我遇到训练出来权重不匹配问题。是不是因为guided-diffusion训练用的unet结构和repaint测试的不同。
这确实是权重不匹配的问题。虽然repaint说模型的训练是使用的 guided-diffusion训练好的模型文件,但是这句话有歧义。我猜测那两个repaint是自己训练的。模型的参数里面,如果按照repaint设置好的去训练,最重要的有两个,一个是学习方差,unet的通道数是6,一个是gdm相比于improved-diffusion,对unet加了一个功能,之前上采样和下采样和残差块是分开的,但是repaint启用了,在resblock中进行上下采样的参数。你研究研究参数集,RePaint给的默认的参数集,就和它给的两个跑好的权重文件一样,跑一跑就知道了。
好的谢谢您,意思是可以通过改参数解决,不必更改结构重训练是吧
好的谢谢您,意思是可以通过改参数解决,不必更改结构重训练是吧
他这个代码挺🐕的,把训练相关的都删了。你要不介意可以在我的代码仓库里找 Recode-RePaint,我重构了config 文件的结构,同时把原本的采样和训练模块也都加回去了。256和128我都跑过了,你可以直接训练和采样试试看。但是参数你得自己调哈,反正训练和采样保证参数的一致性就能跑repaint了。
好的好的,谢谢您!
好的谢谢您,意思是可以通过改参数解决,不必更改结构重训练是吧
他这个代码挺🐕的,把训练相关的都删了。你要不介意可以在我的代码仓库里找 Recode-RePaint,我重构了config 文件的结构,同时把原本的采样和训练模块也都加回去了。256和128我都跑过了,你可以直接训练和采样试试看。但是参数你得自己调哈,反正训练和采样保证参数的一致性就能跑repaint了。
再者就是,请问当我使用class_conda=True时,是否必须伴有classifier分类器的权重,能否仅用train的权重实现多类别图像修复
再者就是,请问当我使用class_conda=True时,是否必须伴有classifier分类器的权重,能否仅用train的权重实现多类别图像修复
我以为你知道的,RePaint它本来就不用分类器,无条件引导,只是保留了一个接口。你把 script_util 中的分类器启动代码注释掉就行。我之前把这个unet单独提取了一个 unet2.py 出来,我上传之前不小心删掉了,你就暂时注释掉用吧,反正也用不上分类器。等我空了再把这个删除的文件补上。
再者就是,请问当我使用class_conda=True时,是否必须伴有classifier分类器的权重,能否仅用train的权重实现多类别图像修复
我以为你知道的,RePaint它本来就不用分类器,无条件引导,只是保留了一个接口。你把 script_util 中的分类器启动代码注释掉就行。我之前把这个unet单独提取了一个 unet2.py 出来,我上传之前不小心删掉了,你就暂时注释掉用吧,反正也用不上分类器。等我空了再把这个删除的文件补上。
不好意思,没看清楚你的问题。要看你说的多类别图像修复是什么任务了,如果你要专注于某一个东西的修复,那你不但需要分类器,你还需要在此基础上改代码。如果只是类似的,也不需要区分的那么开,比如说同样是人脸,你非要分一个男人和女人,是可以这么训练,但是合一起也没问题,就跟RePaint官方的 CelebA 数据集训练的人脸修复一样。RePaint本身是无条件引导的修复方式,你要实现你所说的多类别修复,你自己研究代码做调整,反正我注释都写得的很清楚了,你现在学也算是事半功倍。但是我要说明的是,如果你的数据集,每个类别的数据量不够多,可能效果不会太好,每个类别至少要小1w才有效果的。
再者就是,请问当我使用class_conda=True时,是否必须伴有classifier分类器的权重,能否仅用train的权重实现多类别图像修复
我以为你知道的,RePaint它本来就不用分类器,无条件引导,只是保留了一个接口。你把 script_util 中的分类器启动代码注释掉就行。我之前把这个unet单独提取了一个 unet2.py 出来,我上传之前不小心删掉了,你就暂时注释掉用吧,反正也用不上分类器。等我空了再把这个删除的文件补上。
不好意思,没看清楚你的问题。要看你说的多类别图像修复是什么任务了,如果你要专注于某一个东西的修复,那你不但需要分类器,你还需要在此基础上改代码。如果只是类似的,也不需要区分的那么开,比如说同样是人脸,你非要分一个男人和女人,是可以这么训练,但是合一起也没问题,就跟RePaint官方的 CelebA 数据集训练的人脸修复一样。RePaint本身是无条件引导的修复方式,你要实现你所说的多类别修复,你自己研究代码做调整,反正我注释都写得的很清楚了,你现在学也算是事半功倍。但是我要说明的是,如果你的数据集,每个类别的数据量不够多,可能效果不会太好,每个类别至少要小1w才有效果的。
感谢回复,因为我看官方yml中当class_conda=true时,使用到了 classifier_path: ./data/pretrained/256x256_classifier.pt model_path: ./data/pretrained/256x256_diffusion.pt 所以才感到疑惑,那我训练效果不好可能还是数据太少导致,我八个类最多一类才700张
感谢回复,因为我看官方yml中当class_conda=true时,使用到了 classifier_path: ./data/pretrained/256x256_classifier.pt model_path: ./data/pretrained/256x256_diffusion.pt 所以才感到疑惑,那我训练效果不好可能还是数据太少导致,我八个类最多一类才700张
你没说之前我还真没注意到。它虽然说用了三个数据集,你说的那个class_conda=true 是用 image net 训练的时候,分了类,但是它下载的链接中,训练好的模型文件,只有 CelebA 和 Places 两个,ImageNet 根本就没有,所以之前我才忽略了这个事儿。原来ImageNet的两个,是GDM页面中有的文件啊,懂了,还是交流起来进步的快啊。
感谢回复,因为我看官方yml中当class_conda=true时,使用到了 classifier_path: ./data/pretrained/256x256_classifier.pt model_path: ./data/pretrained/256x256_diffusion.pt 所以才感到疑惑,那我训练效果不好可能还是数据太少导致,我八个类最多一类才700张
你没说之前我还真没注意到。它虽然说用了三个数据集,你说的那个class_conda=true 是用 image net 训练的时候,分了类,但是它下载的链接中,训练好的模型文件,只有 CelebA 和 Places 两个,ImageNet 根本就没有,所以之前我才忽略了这个事儿。原来ImageNet的两个,是GDM页面中有的文件啊,懂了,还是交流起来进步的快啊。
哈哈确实,谢谢您