axinc-ai / ailia-models

The collection of pre-trained, state-of-the-art AI models for ailia SDK
2k stars 318 forks source link

add sd-turbo #1483

Closed takumi2786 closed 1 month ago

takumi2786 commented 4 months ago

Issue

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")

optimum

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")

diffusers

上記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:

kyakuno commented 1 month ago

モデルアップロード済み。 https://storage.googleapis.com/ailia-models/sd-turbo/text_encoder.onnx.prototxt

kyakuno commented 1 month ago

text_encoder.onnxが必要。