簡単・便利! 無料でAI画像生成ができるStable Diffusionの使い方
プログラミングができない人でもできる!
という事で技術的な事や歴史的な事は端折ります。
Contents
Stable Diffusionとは?
- オープンソースの画像生成AI
- 環境さえ整えば無料で使える
- 生成した画像は商用利用もOK
ライセンスは以下の記事などを参考に原文に当たってください。
画像生成AI「Stable Diffusion」のLicense要約を和訳して読む|イワケン|noteこのnoteは何か 画像生成AIの一つ「Stable Diffusion」のLicense要約のブログをDeepLで和訳したnoteです。 結論をいうと ・出力する画像は基本自由に使っていいよ、でも違法/有害なことしないでね という私は解釈をしました。しかし、私はソフトウェアエンジニアでありますがAIに関する専門家ではありません。その前提で、一つの参考として読んでいただけると嬉しいです。
Stable Diffusionを無料で使う方法
当記事ではGoogle Colaboratory上でStable Diffusionを動かしていきます。
v2.1の利用方法を追記しました
ただ使ってみた感じ、イラストについてはv1.4の方が得意そうなので、v1.4の使い方も残しておきます。
参考にした記事
アカウントを作成
- Hugging Face
のアカウントを持っていない人は作成しておきます。
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フィルターだったら以下の方法で解除。
Stable DiffusionでNSFWフィルターをスマートに回避する方法「Stable DiffusionのNSFWフィルターに引っかかってしまう・・・」「Potential NSFW contentというメッセージが出て、黒い画像が作成される・・・」このような場合には、この記事の内容が参考になります。
作成した画像の例(v1.4で作成)
Stable Diffusion on Google Colab
— 8/11に新曲上げたSophia / ほしがみちえ (@CosmossoahC) August 28, 2022
1枚目は「cosmetics」とだけ指定
2枚目の男の子の絵は自分で描いた元絵を食わせてtrending pixivとかでやったんだが構図しか残ってないな pic.twitter.com/dpw6gbnzCH
ちなみに自分で食わせた元絵は『ライアーの瞳』のジャケット絵の陰がないやつで、呪文はboy with purple eyes, trending pixiv
です。
元絵は小さいんだからUPしとくか(拡大したら重さの方がクソデカになってしまったので #StableDiffusion pic.twitter.com/ruFuVgWwaS
— 8/11に新曲上げたSophia / ほしがみちえ (@CosmossoahC) August 28, 2022