Eyecatch

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

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

Stable Diffusionとは?

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

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

Stable Diffusionを無料で使う方法

参考にした記事

NEUTRINOとかでGoogle Colab使った事がある人は上記の記事だけで使えると思います。
当記事でもGoogle Colaboratory上でStable Diffusionを動かしていきます。

アカウントを作成

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

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

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

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

リポジトリの利用規約などに同意する

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

Google Colab Notebookを作成

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

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

ランタイムの設定

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

あとはコピペ→実行でOK

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

!pip install diffusers==0.2.4
!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()

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

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の場合の入力呪文です。
この呪文で生成された画像はこの記事の一番下にあります(ヘッダー画像にもなっています)。

最後に書き出しコード。

with autocast("cuda"):
  image = pipe(prompt)["sample"][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"):
  image = pipe(prompt, init_image=init_image)["sample"][0]
 
image

作成した画像の例

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


セール中のプラグイン一覧はこちら