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




