Stable Diffusion + Hugging Face 自動お絵かきAI 簡単に使ってみた
Hugging Faceで提供されている様々なライブラリを使用して、
自動お絵かきAIを実行してみたいと思います。
Hugging Face
Hugging Faceとは
Hugging Faceは、以下を主軸としているアメリカの企業
- 自然言語処理に関連したライブラリを開発
- 人工知能のコミュニティを運営
- 学習済みの機械学習モデルやデータセットなどを公開
特に注目すべき開発&公開されているライブラリは、
- transformers
何千もの学習済みモデルを提供してくれるライブラリ - datasets
HuggingFace Datasets Hubで公開されている多数のデータセットを
ダウンロードから前処理まで一括で行ことが可能なdataloaderライブラリ
有名なモデルとしては、
- Stable Diffusion : 入力したテキストから画像を自動作成するAIモデル
- OpenJourney : Stable Diffusion v1.5を調整しMidjourneyに近い動作をするモデル
- BERT : Googleが実装を発表した自然言語処理モデル
- GPT-2 : ChatGPT(GPT-3)の元となった自然言語処理モデル
様々な方がカスタマイズを加えた形で提供しています。説明欄を見ているだけで面白いです。
アクセストークンを取得する
Hugging Faceで提供しているライブラリにアクセスするためのトークンを取得します。
無料でできますので、実施しましょう。
Hugging Faceにアクセスし、右上の「Sign Up」を選択します。
登録すると、メールでの認証確認がありますので、忘れずに行いましょう。
プロフィールページから、「Access Token」に移動し、「New Token」ボタンを押します。
後ほど、pythonのコード内でHugging Faceにアクセスする時に使用します。
本トークンは、他人に知られないように十分に注意して取り扱ってください。
自動お絵かきAIの実行
Hugging FaceのStable Diffusion一覧のページにアクセスすると、様々なモデルを見ることができます。
今回もGoogle Colaboratoryを使用して、コードを記載していきたいと思います。
最初に、「編集」→「ノートブックの設定」から、
ハードウェアアクセラレートを「GPU」に設定しましょう。
以下のコマンドを入力し、Shift+Enterを押して実行しましょう。
GPUの情報が出てくれば、正常に設定変更できています。
!nvidia-smi
続けて、コードを記載していきます。
今回紹介するモデルは、以下の通りになります。詳細はリンク先をご確認ください。
- runwayml /stable-diffusion-v1-5 : Stable Diffusionモデル V1.5
- stabilityai/stable-diffusion-2 : Stable Diffusionモデル V2.0
- hakurei/waifu-diffusion : アニメ画風に調整されたモデル
- ayan4m1/trinart_diffusers_v2 : アニメ・漫画の画風を強化学習したモデル
- prompthero/openjourney : Midjourney風の画風に調整されてモデル
- nitrosocke/Ghibli-Diffusion : ジブリ風の画風に調整されてモデル
後日追加分
- nitrosocke/mo-di-diffusion : 最近のディズニー映画風の画風に調整されてモデル
- Envvi/Inkpunk-Diffusion : サイバーパンク風の画風に調整されてモデル
- Lykon/DreamShaper : ポートレート作成向けに調整されたモデル
各モデルごとに趣向が異なりますが、私はMidjourneyの絵が好みですので、
OpenJourneyのモデルで進めて行きます。
他にも多々ありますので、リンクから参照してみてください。
!pip install diffusers transformers scipy ftfy
from diffusers import StableDiffusionPipeline
import torch
AuthToken="(取得したアクセストークンを入力)"
# モデル:Stable Diffusion V1.5 を使用する場合
# model_id = "runwayml
/stable-diffusion-v1-5"
# モデル:Stable Diffusion V2.1 を使用する場合
# model_id = "stabilityai/stable-diffusion-2-1"
# モデル:Waifu Diffusion を使用する場合
# model_id="hakurei/waifu-diffusion"
# モデル:Trinart Diffusion V2 を使用する場合
# model_id ="ayan4m1/trinart_diffusers_v2
# モデル:OpenJourney を使用する場合
model_id ="prompthero/openjourney"
# モデル:Ghibli-Diffusion を使用する場合
# model_id ="nitrosocke/Ghibli-Diffusion"
device = "cuda"
pipe = StableDiffusionPipeline.from_pretrained(model_id, use_auth_token=AuthToken).to(device)
実行後に、「accelerateを入れた方が良いよ」「サンプルサイズ設定を小さくした方が良いよ」など
メッセージが出ますが、よく分かっていないのでそのまま続行しています。
後々、対処方法が分かったら追記したいと思います。
画像の生成について細かくパラメータを設定したい場合、以下の通りです。
- Prompt
この部分に任意の文字列(英語)を入力することで、好きな絵を出力させることができます - Guidance Scale
入力されたプロンプト(呪文)への忠実度を制御するためのパラメータ(1~30)。
デフォルト値=7.5。1が設定された場合、プロンプトは完全に無視。
5~10程度が、出力画像を見ているとバランスが良い。 - Num Inference Steps
画像をどれくらい精細に描画するかを決めるパラメータ
設定値が高いほど高精細な画像なるが、生成時間が長くなる。
デフォルト値=50。100~120程度が時間、精度を考慮するとバランスが良い。 - Seed
通常ランダムで設定されるSeed値を固定することで、同じ画像を再現することが可能。
デフォルト値=ランダム - width・height
出力画像の幅・高さの設定。デフォルト値=512
from datetime import datetime
prompt = "pikachu"
#描画する回数を設定
num_images = 1
#イラスト生成
for i in range(num_images):
# seedを固定しない場合
image = pipe(prompt, guidance_scale=7.5, num_inference_steps=100).images[0]
# seedを固定する場合
#generator = torch.Generator(device).manual_seed(2500)
#image = pipe(prompt, guidance_scale=7.5, num_inference_steps=100, generator=generator).images[0]
#生成日時をファイル名にして保存
date = datetime.now().strftime("%Y%m%d_%H%M%S")
path = date + ".png"
image.save(path)
from IPython.display import Image,display_png
display_png(Image(path))
無事にピカチュウが表示されました。
(上:何もパラメータを設定しない場合)
(下:guidance_scale=7.5, num_inference_steps=100)で設定した場合)
他のモデルを使ってみて、モデルごとの違いを考察するのもよし。
プロンプトを変更して、出力画像の違いを考察するのもよし。
一番は、どういうプロンプトを入力することで、意図した画像を出力できるかがポイント。
英語のサイトですが、STABLE DIFFUSION ARTにプロンプトガイドがありましたので、
参考までに載せておきます。
とりあえず、ここまで。