【機械学習】Stable-Diffusionでテキストから爆速イラスト生成【2023】

新月一2023-01-31DeepLearning機械学習 生成AI Stable-Diffusion

png

TIP

  • GPUパソコン使ってStable-DiffusionでAIイラスト生成してみた!
  • リポジトリつき
  • 解説を踏まえて生成したイラストを記載

はじめに

最初に今回のコードの全体リポジトリを共有しておきます。 記事ではその内容について触れます。

  • gitlabのリポジトリ
    • https://gitlab.com/hiranorm/create_illust

当方の環境

  • GPU: GeForce 3090
  • CPU: Intel(R) Core(TM) i9-10900 CPU @ 2.80GHz
  • python: 3.10.9

Stable-diffusionについて

まず、Stable-diffusionとはなんぞやというところからですが、これは高性能な画像生成AIです。 構造でいうと、画像からVAE(変分オートエンコーダ)Encoderを通り、ノイズを増やす拡散モデル・ノイズを取り除く逆拡散モデルを通り、VAE Decoderを通してきれいな画像を生成するよう学習させ、textエンコーダを通した文章を逆拡散モデルに通すことで、文章から画像を生成することができる機械学習モデルのことです。 本記事では構造について詳しく解説は致しませんので、詳しく知りたい方は論文または参考サイトをご覧ください。

原論文: "High-Resolution Image Synthesis with Latent Diffusion Models", Rombach, R., Blattmann, A., Lorenz, D., Esser, P., Ommer, B. (CVPR'22)open in new window

参考サイト: 世界に衝撃を与えた画像生成AI「Stable Diffusion」を徹底解説!open in new window

今回は、そのStable-Diffusionを使ってイラストを生成してみようと思います。 .shファイルについては、bash FILE.shのようなコマンドで実行できます。

実装

1_create_venv.sh

今回はpythonのvenv機能を使って仮想環境を構築します。

python -m venv venv

2_make_diffusers.sh

gitのクローンと、pythonライブラリのインストール、追加学習用のフォルダの生成をします。

source venv/bin/activate
git clone https://github.com/ShivamShrirao/diffusers
cd diffusers/examples/dreambooth/
pip install -r requirements.txt
pip install diffusers
pip install bitsandbytes
# 学習させる画像を入れる
mkdir inputs

stable-diffusion.py

まずライブラリのインポートとパイプラインを準備します。 StableDiffusionはパイプラインが用意されていて、モデルもhugging-faceからインストールして使うことができます。

from diffusers import StableDiffusionPipeline, EulerDiscreteScheduler
import torch
import sys

# パイプラインの準備
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()

翻訳とファイル名の準備

精度を求めるなら、直接英語を入力したほうがいいのですが、今回はgoogletranslatorのライブラリを使って日本語を英語に翻訳した後にStable-Diffusionに入力します。ついでに、その翻訳版の入力プロンプトのスペースを_に変換して、ファイル名にして画像を保存します。

# 日本語テキストから翻訳
from deep_translator import GoogleTranslator
ja_text = "「……どうして……どうして僕ばかり……こんなにも辛いのに……」"
#ja_text = "ラインドローイング、影無し、白黒、教会"

en_text = GoogleTranslator(source='auto',target='en').translate(ja_text)
print(en_text)
file_name = en_text.replace(' ','_')
# 画像生成(入力は英語)
prompt = en_text
image = pipe(prompt, height=768, width=768).images[0]

image.save(f'output/3D/{file_name}.png')

出力-AIイラスト博覧会。

以上の準備を済ませましたら、色々文章を変えて画像を出力してみます。

プロンプト「サイバーパンク、猫」 png

サイバーパンク猫かっけぇ!

プロンプト「悲しみに暮れるおじさん」 png

車椅子の息子や娘が亡くなったようなストーリーを感じさせる一枚ですね。

背景の出力

ラインドローイング、影なしと指定することで、漫画やゲームの背景の素材に使えそうな画像を出力することもできます。

プロンプト「ラインドローイング、影無し、白黒、教会」 png

他のAIとの重ね技

最後に、以前ドグラ・マグラから学習させたテキスト生成AIに文章を作成させて、画像を出力してみます。

プロンプト「……どうして……どうして僕ばかり……こんなにも辛いのに……」 png

なんだか悲しげな雰囲気が出ていますね。

まとめ

今回の記事のまとめです。

  • Stable-Diffusionは文章からイラストを生成できるすごいヤツ。
  • ゲームや漫画の背景にも応用できそうな高精度で、可能性を感じる。

ちなみに、現在はMacbook Proなどでも利用できるinvokeAIというソリューションが出ているので、つよつよGPUがない方でも試してみてはいかがでしょうか。(モデルを学習させた元のデータセットによっては、叩かれることがありますので、権利関係にはご注意ください)

すごく面白い技術ですね。 データセットの著作権が議論を呼ぶこのイラスト生成という技術ですが、あくまで人間の補助ツールとして利用していけば、人間の労力が減っていいのではないかと私個人は思います。

ということで今日はここまで。

Last Updated 2023-04-16 06:01:13