「object has no attribute ‘sample’というエラーが出てしまう・・・」
「ローカル環境のimg2imgが急に動かなくなった・・・」
このような場合には、この記事の内容が参考になります。
この記事では、ローカル環境におけるimg2imgのエラーに対処する方法を解説しています。
本記事の内容
- img2imgでエラー発生
- 【エラー対応済コード】img2imgの動作確認
それでは、上記に沿って解説していきます。
img2imgでエラー発生
前提としては、次の方法でStable Diffusionをインストール済みとします。
そして、次の記事のようにimg2imgを動かそうとしている状況です。
その際に次のようなエラーが出ているなら、このまま読み進めてください。
AttributeError: 'AutoencoderKLOutput' object has no attribute 'sample'
まず、このエラーが出ている場合には「diffusers」のバージョンを確認します。
Diffusersについては、次の記事で解説しています。
バージョンの確認方法は、「pip list」で一覧から確認できます。
特定ライブラリをピンポイントで調べるには、「pip show」が利用可能です。
> pip show diffusers Name: diffusers Version: 0.3.0 Summary: Diffusers Home-page: https://github.com/huggingface/diffusers Author: The HuggingFace team Author-email: patrick@huggingface.co License: Apache ~
Diffusersのバージョンが0.3.0以降であれば、さらに読み進めましょう。
以上、img2imgでエラー発生を説明しました。
次は、img2imgの動作確認を説明します。
【エラー対応済コード】img2imgの動作確認
早速ですが、次のコードを試してください。
コードの詳細は、上で挙げた記事をご覧ください。
from PIL import Image import torch from torch import autocast from diffusers import ( DDIMScheduler, StableDiffusionImg2ImgPipeline ) MODEL_ID = "CompVis/stable-diffusion-v1-4" DEVICE = "cuda" YOUR_TOKEN = "コピーしたアクセストークン" BASE_IMG = "input.jpg" PROMPT = "A fantasy landscape, trending on artstation" SEED = 1024 STEP = 100 SCALE = 7.5 STRENGTH = 0.8 WIDTH = 512 HEIGHT = 256 scheduler = DDIMScheduler(beta_start=0.00085, beta_end=0.012, beta_schedule="scaled_linear", clip_sample=False, set_alpha_to_one=False) pipe = StableDiffusionImg2ImgPipeline.from_pretrained( MODEL_ID, scheduler=scheduler, revision="fp16", torch_dtype=torch.float16, use_auth_token=YOUR_TOKEN ).to(DEVICE) init_img = Image.open(BASE_IMG) init_img = init_img.resize((WIDTH, HEIGHT)) generator = torch.Generator(device=DEVICE).manual_seed(SEED) with autocast(DEVICE): image = pipe(prompt=PROMPT, init_image=init_img, strength=STRENGTH, guidance_scale=SCALE, generator=generator, num_inference_steps=STEP)["sample"][0] image.save("result.png")
上記コードが動きましたか?
Diffusersのバージョンが上がったことで、その影響が出たというところです。
まだまだ、Diffusersは開発途上のライブラリと言えます。
そのため、こういうことは今後もあるでしょうね。
以上、img2imgの動作確認を説明しました。