[Stable Diffusion] AIで日本語のテキストから画像を生成する方法を解説 [text2img]

2022年9月12日月曜日

Artificial Intelligence

本記事では、rinna株式会社が提供する日本語版Stable Diffusionを用いて日本語のテキストから画像を生成する方法をご紹介します。

アイキャッチ

Stable Diffusion

概要

Stable Diffusionは、拡散モデルによる画像合成モデルです。
自然言語で入力されたテキスト(prompt)から画像を生成するText to Imageタスクを実現します。

Latent Diffusionをベースとした本モデルは、非常に大規模なデータセットであるLAION-5Bを用いてトレーニングされています。

GoogleのImagenやOpenAIのGLIDE, DALLE-2など最新の画像生成モデルは社会に与える影響が大きいことなどを理由に学習済みモデルの公開を控えるケースが目立っていましたが、
Stable Diffusionでは、AIの平等な使用機会を与えることを目的に学習済みモデルの公開に踏み切っています。

なお、以下の記事では有償にはなりますが、Lattent DiffusionやGLIDEの技術解説やデモを紹介しています。よろしければご参照ください。
技術解説までは、無料で参照可能です。

過去に、日本語版CLIPを提供して話題となっていたrinna株式会社が、今回は、日本語版のStable DiffusionをHugging Faceに公開しています。

本記事では日本語版Stable Diffusionを用いて、Text to ImageタスクをGoogle Colaboratoryで実行していきます。

なお、画像とテキストから新たな画像を生成するImage to Imageタスク、特定の範囲の画像を修復するInpaintingタスクは以下をご参照ください。

デモ(Colaboratory)

それでは、実際に動かしながらText to Imageタスクを実行していきます。
ソースコードは本記事にも記載していますが、下記のGitHubでも取得可能です。
GitHub - Colaboratory demo

また、下記から直接Google Colaboratoryで開くこともできます。
Open In Colab

なお、このデモはPythonで実装しています。
Pythonの実装に不安がある方、Pythonを使った機械学習について詳しく勉強したい方は、以下の書籍やオンライン講座などがおすすめです。

環境セットアップ

初めにHuggingFaceのアカウントを作成します。
HuggingFaceにアクセスし画面右上のSignUpよりアカウントを作成します。
登録したメールアドレスに認証メールが届くのでメールに記載されたリンクにアクセスしてアカウント登録は完了です。

続いて、こちらのrinna/japanese-stable-diffusionにアクセスし記載の内容を確認の上承認します。

contruct

承認後、画面右上のアカウントのアイコンから[Settings]->[Access Tokens]に移動しNewTokenを発行し、メモしておきます。

Settings

以降の作業はGoogle Colaboratoryで行います。

それではGoogle Colaboratoryでセットアップしていきます。 Colaboratoryを開いたら下記を設定しGPUを使用するようにしてください。

「ランタイムのタイプを変更」→「ハードウェアアクセラレータ」をGPUに変更

まずライブラリをインストールします。

%cd /content

!pip install diffusers==0.2.4 transformers scipy ftfy
!pip install git+https://github.com/rinnakk/japanese-stable-diffusion

最後にライブラリをインポートします。

import torch
from torch import autocast
from diffusers import LMSDiscreteScheduler
from japanese_stable_diffusion import JapaneseStableDiffusionPipeline

import matplotlib.pyplot as plt

以上で環境セットアップは完了です。

学習済みモデルのセットアップ

続いて、先ほど発行したアクセストークンを使用して、モデルをダウンロードします。

access_tokens="先ほどメモしたAccessToken" # @param {type:"string"}

# load pretrain model
model_id = "rinna/japanese-stable-diffusion"
device = "cuda" if torch.cuda.is_available() else "cpu"
# Use the K-LMS scheduler here instead
scheduler = LMSDiscreteScheduler(beta_start=0.00085, beta_end=0.012, beta_schedule="scaled_linear", num_train_timesteps=1000)
pipe = JapaneseStableDiffusionPipeline.from_pretrained(model_id, scheduler=scheduler, use_auth_token=access_tokens)
pipe = pipe.to(device)

TextToImage

それでは、promptを設定し画像を生成していきます。

prompt = "整列するサラリーマン" #@param {type:"string"}
!mkdir outputs

num = 5

for i in range(num):
  # モデルにpromptを入力し画像生成
  with autocast("cuda"):
    image = pipe(prompt, guidance_scale=7.5, width=768, height=512)["sample"][0] 
  # 保存
  image.save(f"outputs/test_{i:04}.png")
  
for i in range(num):
  plt.imshow(plt.imread(f"outputs/test_{i:04}.png"))
  plt.axis('off')
  plt.show()

出力結果は以下の通りです。

結果1

その他の結果も見てみます。

「日本の伝統文化」

結果2

若干手が怖いことになっていますが、日本語のテキストから画像が生成されていることが確認できました。

まとめ

本記事では、日本語版Stable Diffusionを用いてText to Imageを行う方法をご紹介しました。
かなり高精度なモデルのため悪用厳禁であることは言うまでもありません。

また本記事では、機械学習を動かすことにフォーカスしてご紹介しました。
もう少し学術的に体系立てて学びたいという方には以下の書籍などがお勧めです。ぜひご一読下さい。


また動かせるだけから理解して応用できるエンジニアの足掛かりに下記のUdemyなどもお勧めです。

参考文献

1.  論文 - High-Resolution Image Synthesis with Latent Diffusion Models

2. GitHub - CompVis/stable-diffusion

AIで副業ならココから!

まずは無料会員登録

プロフィール

メーカーで研究開発を行う現役エンジニア
組み込み機器開発や機会学習モデル開発に従事しています

本ブログでは最新AI技術を中心にソースコード付きでご紹介します


Twitter

カテゴリ

このブログを検索

ブログ アーカイブ

TeDokology