Cosmos and Chaos
Eyecatch

簡単・便利! 無料でAI画像生成ができるStable Diffusionの使い方

プログラミングができない人でもできる!
という事で技術的な事や歴史的な事は端折ります。

Stable Diffusionとは?

  • オープンソースの画像生成AI
  • 環境さえ整えば無料で使える
  • 生成した画像は商用利用もOK

ライセンスは以下の記事などを参考に原文に当たってください。

Stable Diffusionを無料で使う方法

当記事ではGoogle Colaboratory上でStable Diffusionを動かしていきます。

v2.1の利用方法を追記しました

ただ使ってみた感じ、イラストについてはv1.4の方が得意そうなので、v1.4の使い方も残しておきます。

参考にした記事

v2.1で参考にした記事
v1.4で参考にした記事

NEUTRINOとかでGoogle Colabを使った事がある人は上記の記事だけで使えると思います。

アカウントを作成

のアカウントを持っていない人は作成しておきます。

Hugging Faceでトークンを発行する

Hugging Faceのメールアドレスを認証するとAccess Tokensからトークンを発行できるようになります。
権限は「write」が必要です。

トークンはStable Diffusionの学習データを利用する為に必要なもので、パスワードと同様に他人に知られないようにしてください。

(v1.4のみ)リポジトリの利用規約などに同意する

Stable Diffusionリポジトリにアクセスして、同意チェックを入れて「Access repository」をクリックします。
これで利用できるようになりました。

Google Colab Notebookを作成

Googleドライブを開き、新規作成からその他→Google Colaboratoryで作成します。

有料プランもありますが、勝手に課金される事は無いので安心してください。

ランタイムの設定

Google Colab Notebookのメニュー「ランタイム」→ランタイムのタイプを変更から、ハードウェアアクセラレータをGPUに変更します。

あとはコピペ→実行でOK

詳しい使い方は公式ドキュメントに記載されていますが、とりあえず使いたい人は以下の順番でコピペしていきます。
コピペできたら左側の再生ボタンのようなものをクリックし、実行しましょう。

必要なライブラリのインストール

!pip install --upgrade diffusers[torch] transformers

diffusersはv0.10.0以降が必要です。

v1.4の場合
!pip install diffusers==0.9.0
!pip install transformers scipy ftfy
!pip install "ipywidgets>=7,<8"

諸々の設定・ログイン

from google.colab import output
output.enable_custom_widget_manager()
from huggingface_hub import notebook_login
notebook_login()

ここで先程作成しておいたトークンを求められるので、コードブロックの下に出てきた入力フォームから送信します。

pipeの作成

from diffusers import StableDiffusionPipeline, EulerDiscreteScheduler
import torch
 
model_id = "stabilityai/stable-diffusion-2-1"
pipe = StableDiffusionPipeline.from_pretrained(
  model_id,
  scheduler=EulerDiscreteScheduler.from_pretrained(
    model_id,
    subfolder="scheduler"
  ),
  torch_dtype=torch.float16
).to("cuda")
pipe.enable_attention_slicing()
v1.4の場合
import torch
from diffusers import StableDiffusionPipeline
pipe = StableDiffusionPipeline.from_pretrained("CompVis/stable-diffusion-v1-4", revision="fp16", torch_dtype=torch.float16, use_auth_token=True)
pipe = pipe.to("cuda")
from torch import autocast

呪文の入力と画像生成

prompt = "a photograph of a magician with black hood, cannot see the face"

このpromptがText2Imgの場合の入力呪文です。
この呪文で生成された画像(v1.4で作成)はこの記事の一番下にあります(ヘッダー画像にもなっています)。

最後に書き出しコード。

image = pipe(prompt).images[0]
image
v1.4の場合
with autocast("cuda"):
  image = pipe(prompt).images[0]
 
image

これで画像が生成されます!

ちなみに「+コード」を押すとコードブロック(入力欄)が分割でき、一つ一つ順番に命令を実行できます。
インストールなどはそのノートを開いた時に1度だけ行えば良いので、分割しておきましょう。

画像は右クリックから保存

画像はそのまま右クリックで保存できます。

トラブルシューティング

生成される画像の解像度を変更したい

以下の様にします。

image = pipe(prompt, height=512, width=768)["sample"][0]

解像度は8の倍数でないとエラーになります。

大きな解像度を指定したらエラーが出た

PYTORCH_CUDA_ALLOC_CONFがどうのこうのというエラーはメモリ不足です。
Google Colabのスペックはあまり強くない(無料版だとさらに制限が強い)ので仕方ありません。

メモリ不足を起こしたら以下のコマンドでメモリ内を掃除出来ます。

import gc
gc.collect(generation=0)
gc.collect(generation=1)
gc.collect(generation=2)

私がやってみた感じだとheight=512, width=768が限度の様です。

解像度を戻したり上記コマンドでリセットしてもエラーになる場合、ランタイムのメニューからランタイムを再起動し、最初からやり直してください。

なお以下の設定はやってみましたが効果がありませんでした。

%env PYTORCH_CUDA_ALLOC_CONF=max_split_size_mb:100

どうしても大きな画像が欲しいなら別のAIと組み合わせる方が楽かもです。
kakudaiACさんとか。
Google Colabに慣れているならReal-ESRGANとか。

学習モデルを固定したい

こうして(最後のカッコ内の数字がシード番号)、

generator = torch.Generator("cuda").manual_seed(1024)

こうじゃ。

image = pipe(prompt, generator=generator)["sample"][0]

pipe()のカッコ内は他の命令(サイズ指定とか)と組み合わせて利用できます。

Img2Imgをしたい

Google Colabの左側にフォルダっぽいアイコンがあります。
そこをクリックすると一時的なファイル置き場が出てきますので、ここにドラッグ&ドロップで元絵をアップロードします。

あとは以下のように書き出しコードを変更。

from PIL import Image
filename = "アップロードしたファイルの名前.png"
init_image = Image.open(filename)
with autocast("cuda"):  # この行はv2.1では削除してください
  image = pipe(prompt, init_image=init_image)["sample"][0]
 
image

v2.1で画像が真っ黒になる

エラーが出ない場合

v1.4で存在した以下のコードを

with autocast("cuda"):
  image = pipe(prompt).images[0]

以下のようにしてください。

image = pipe(prompt).images[0]

参考→Only generates black images?

エラーが出る場合

NSFWフィルターだったら以下の方法で解除。

作成した画像の例(v1.4で作成)

ちなみに自分で食わせた元絵は『ライアーの瞳』のジャケット絵の陰がないやつで、呪文はboy with purple eyes, trending pixivです。

Sophia

DTMとかやる人。