昇腾910B - Stable Diffusion + MindSpore Lite 解决生成图片无法被64整除导致的错误
【摘要】 1、背景以SD1.5为例,在huggingface上是能够下载开源的onnx文件,通过convert_lite命令能够快速支持MindSpore Lite推理引擎,并获得在昇腾芯片上的运行性能。但如果需要生成无法被64整除的图片尺寸在convert_lite转换时会报尺寸不匹配的错误:2、原因分析以需要生成512x528尺寸为例,在输入到unet前被下采样了,尺寸变成512/8, 528/8...
1、背景
以SD1.5为例,在huggingface上是能够下载开源的onnx文件,通过convert_lite命令能够快速支持MindSpore Lite推理引擎,并获得在昇腾芯片上的运行性能。但如果需要生成无法被64整除的图片尺寸在convert_lite转换时会报尺寸不匹配的错误:
2、原因分析
以需要生成512x528尺寸为例,在输入到unet前被下采样了,尺寸变成512/8, 528/8 = 64,66,而在unet这块还需要下采样4次,每次/2;那么对于64来说,64/2=32,32/2=16,16/2=8,最后变成8,这样看到这块是可以被整除的;对于66来说,66/2=33,33/2=16.5取整变成17, 17/2=8.5取整变成9, 会发现存在无法整除的情况,当这个9上采样的时候,9x2=18-->和需要的concat 17维度不一致,就会报错:
3/解决方法:重新导出需要尺寸的onnx模型
以720*720为例,修改对应代码,代码里的90 = 720/8; 修改size为720/8=90,先转为onnx模型
执行命令:
python convert_stable_diffusion_checkpoint_to_onnx.py --model_path runwayml/stable-diffusion-v1-5 --output_path ./
执行完之后会生成一个unet文件夹,里面结构如下:
接着将这个onnx转到对应尺寸的mindir模型即可
converter_lite --modelFile=./unet/model.onnx --fmk=ONNX --outputFile=./model --optimize=ascend_oriented --inputShape="sample:2,4,90,90;timestep:2;encoder_hidden_states:2,77,768"
备注:部分图片来自yefeng,教程由yangsensen编写,感谢大家
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)