昇腾910B - Stable Diffusion + MindSpore Lite 解决生成图片无法被64整除导致的错误

举报
苏道 发表于 2024/04/19 19:48:59 2024/04/19
【摘要】 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转换时会报尺寸不匹配的错误:

images1.jpg

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维度不一致,就会报错:unet.png

3/解决方法:重新导出需要尺寸的onnx模型

diffusers/scripts/convert_stable_diffusion_checkpoint_to_onnx.py at main · huggingface/diffusers · GitHub

以720*720为例,修改对应代码,代码里的90 = 720/8; 修改size为720/8=90,先转为onnx模型

codes.png

执行命令:

python convert_stable_diffusion_checkpoint_to_onnx.py --model_path runwayml/stable-diffusion-v1-5 --output_path  ./

执行完之后会生成一个unet文件夹,里面结构如下:

dir.png

接着将这个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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。