Closed takumi2786 closed 1 month ago
https://github.com/axinc-ai/ailia-models/issues/1421
SD_TURBOの実装を行いました。
以下確認しました
ただ、 Image to Imageのタスクについては、動作確認できておらず、調査内容は以下になります。
optimumのonnx Pipelineで実行した場合: 出力画像がおかしい
from optimum.onnxruntime.modeling_diffusion import ORTStableDiffusionImg2ImgPipeline pipeline = ORTStableDiffusionImg2ImgPipeline.from_pretrained( "stabilityai/sd-turbo", provider="CPUExecutionProvider", export=True, ) from diffusers.utils import load_image image_url = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/cat.png" init_image = load_image(image_url).resize((512, 512)) image = pipeline( "the cat has blue eyes", image=init_image, num_inference_steps=2, strength=0.5, guidance_scale=0.0, ).images[0] image.save("./optimum.png")
diffuserのAutoPipelineForImage2Imageを利用した場合: 正常な出力が得られる
from diffusers import AutoPipelineForImage2Image pipeline = AutoPipelineForImage2Image.from_pretrained( "stabilityai/sd-turbo", provider="CPUExecutionProvider", export=True, ) from diffusers.utils import load_image image_url = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/cat.png" init_image = load_image(image_url).resize((512, 512)) image = pipeline( "the cat has blue eyes", image=init_image, num_inference_steps=2, strength=0.5, guidance_scale=0.0, ).images[0] image.save("./diffusers .png")
上記2つで参照されるコードを比較したところ、画像変換部分の処理が異なっているように見えました。
https://github.com/huggingface/optimum/blob/7184ef4e720369ed75dcfa1404195fffb7b71aec/optimum/pipelines/diffusers/pipeline_stable_diffusion_img2img.py#L195
https://github.com/huggingface/diffusers/blob/0ab63ff6478b7cc6b5ae0d46c7c386d476cfa87f/src/diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion_img2img.py#L1045
こちらの調査は時間がかかりそうだったため、ひとまずText to TextのみでPRをOpenしました :bow:
モデルアップロード済み。 https://storage.googleapis.com/ailia-models/sd-turbo/text_encoder.onnx.prototxt
text_encoder.onnxが必要。
Issue
https://github.com/axinc-ai/ailia-models/issues/1421
作業内容
SD_TURBOの実装を行いました。
以下確認しました
ただ、 Image to Imageのタスクについては、動作確認できておらず、調査内容は以下になります。
optimumのonnx Pipelineで実行した場合: 出力画像がおかしい
diffuserのAutoPipelineForImage2Imageを利用した場合: 正常な出力が得られる
上記2つで参照されるコードを比較したところ、画像変換部分の処理が異なっているように見えました。
https://github.com/huggingface/optimum/blob/7184ef4e720369ed75dcfa1404195fffb7b71aec/optimum/pipelines/diffusers/pipeline_stable_diffusion_img2img.py#L195
https://github.com/huggingface/diffusers/blob/0ab63ff6478b7cc6b5ae0d46c7c386d476cfa87f/src/diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion_img2img.py#L1045
こちらの調査は時間がかかりそうだったため、ひとまずText to TextのみでPRをOpenしました :bow: