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

続けて、コードを記載していきます。

今回紹介するモデルは、以下の通りになります。詳細はリンク先をご確認ください。

後日追加分

各モデルごとに趣向が異なりますが、私は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にプロンプトガイドがありましたので、
参考までに載せておきます。

とりあえず、ここまで。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

two × three =