【Stable Diffusion】img2imgのエラー解決方法

【Stable Diffusion】img2imgのエラー解決方法 機械学習

「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の動作確認を説明しました。

タイトルとURLをコピーしました