[Stable Diffusion] AIでテキストから画像を生成する使い方を解説 [text2img]

2022年8月23日火曜日

Artificial Intelligence

本記事では、機械学習手法Stable Diffusionを用いてテキストから画像を生成(text2img)する方法をご紹介します。

アイキャッチ

Stable Diffusion

概要

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

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

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

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




本記事では上記手法を用いて、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よりアカウントを作成します。
登録したメールアドレスに認証メールが届くのでメールに記載されたリンクにアクセスしてアカウント登録は完了です。

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

承認

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

Settings

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

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

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

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

%cd /content

!pip install diffusers transformers scipy ftfy accelerate

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

from diffusers import StableDiffusionPipeline

import matplotlib.pyplot as plt

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

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

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

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

# load pretrain model
model = StableDiffusionPipeline.from_pretrained("CompVis/stable-diffusion-v1-4", use_auth_token=access_tokens)
model.to("cuda")

TextToImage

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

prompt = "Detailing oil painting of three headed dog by Katsuhika Hokusai" #@param {type:"string"}
!mkdir outputs

num = 5

for i in range(num):
  # モデルにpromptを入力し画像生成
  image = model(prompt)[0][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

葛飾北斎風の3頭の犬を生成してもらいましたが、promptに忠実な画像が生成されています。

いくつか画像を生成させてみた結果は以下の通りです。
「サングラスをかけたハムスターの写真」

結果2

「葛飾北斎風のバイクに乗るダースベイダー」

結果3

写真、油絵など様々なタイプの画像が生成できました。

まとめ

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

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


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

参考文献

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

2. GitHub - CompVis/stable-diffusion

AIで副業ならココから!

まずは無料会員登録

プロフィール

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

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


Twitter

カテゴリ

このブログを検索

ブログ アーカイブ

TeDokology