Stable Diffusionによる画像生成(text-to-image)

この記事では、Stable Diffusionを用いてテキストから画像を生成する方法を紹介します。

画像とテキストから新たな画像を生成するimage-to-image、画像の指定領域を修復するimage inpaintingの方法は、それぞれ以下の記事をご覧ください。

Stable Diffusionとは

GitHub - CompVis/stable-diffusion: A latent text-to-image diffusion model

Stable Diffusionは、High-Resolution Image Synthesis with Latent Diffusion Modelsで提案されたLatent Diffusionという特殊なタイプのDiffusionモデル(拡散モデル)に基づく画像生成モデルです。

拡散モデルは、画像生成タスクにおいて非常に優れた精度を発揮することが知られていますが、一般的にメモリ消費量が膨大であるため、学習や推論が困難でした。

Latent Diffusionは、GANの一種と同様に低次元の潜在表現を活用することでこの点を克服し、メモリの消費を軽減することに成功したため、より汎用的なモデルとなっています。

デモ

それでは、Google Colaboratoryを使って実際に実行していきます。

なお、記事内で紹介したコードをすべて含むノートブックは、以下のリンクから直接参照することができます。

Open In Colab

事前準備

まず、モデルが公開されているHugging Faceのアカウントを作成します。

Hugging Faceのトップページから右上の「Sign Up」に進みます。アドレスとパスワードを入力すると、登録したアドレスに認証メールが届くので、メール内のリンクをクリックして作成は完了です。

次に、Stable Diffusionのリポジトリを開き「Access repository」をクリックします。

最後に、学習済みモデルをダウンロードするためのアクセストークンを取得します。

トップページから先ほど作成したアカウントでログイン後、右上のアカウントのアイコンをクリックし、「Settings」、「Access Tokens」と進みます。画面中央の「New Token」をクリックしてアクセストークンを発行し、コピーしておきます。

これで事前準備は完了です。

環境設定

ここからは、Google Colaboratory上で作業を行います。

はじめに、画面上部のメニューから、「ランタイム」、「ランタイムのタイプを変更」と進み、「ハードウェアアクセラレータ」を「GPU」に変更しておきます。これにより、推論時にGPUを利用することができます。

続いて、必要となるライブラリのインストール、インポートを行います。

# ライブラリのインストール
!pip install diffusers==0.2.4 transformers scipy ftfy

# インポート
from diffusers import StableDiffusionPipeline
import matplotlib.pyplot as plt

モデル設定

次に、コピーしておいたアクセストークンを利用して、Hugging Faceから学習済みモデルをダウンロードします。

# 学習済みモデルのダウンロード
access_token = 'ここにアクセストークンをペースト'
model = StableDiffusionPipeline.from_pretrained('CompVis/stable-diffusion-v1-4', use_auth_token=access_token)
model.to('cuda')  # GPUを利用

画像生成

それでは、画像生成を行っていきます。

Stable Diffusionを含むテクストから画像を生成するAIは、どんな画像を出力させたいかをprompt(プロンプト)と呼ばれる文字列で指示します。

まず、リポジトリにサンプルとして挙げられているプロンプトで画像を生成してみます。

# プロンプトの設定
prompt = 'a photograph of an astronaut riding a horse'

# 画像の生成
image = model(prompt)['sample'][0]
image.save('test.png')

出力結果はこちらです。

Stable Diffusionの解説でよく見るイメージの画像が生成できました。

プロンプトによって、生成される画像のクオリティに大きな差が出るため、「良い」プロンプトについて様々な実験がなされていますが、現時点ではこちらで紹介されている以下のフォーマットが有用なようです。

全体のフォーマット, 主題, 主題の補足, 作者, 全体の補足, フレーバー

こちらのフォーマットを参考にさせていただき、さらにいくつか生成してみます。

"Detailing oil painting of an astronaut riding a horse, perfect lighting, golden hour, by REMBRANDT"

"High quality concept art of an astronaut riding a horse, cinematic lighting, atmospheric, highly detailed, in the style of craig mullins"

"Detailing painting of an astronaut riding a horse, by Hokusai"

なお、Lexicaというサイトでは、キーワードからStable Diffusionによって生成された画像を検索することができ、さらにその画像生成に使われたプロンプトを確認することができます。なかなか狙った画像が生成できない場合は、いくつか見てみるとよいかもしれません。

まとめ

本記事では、限られたパターンを生成しただけですが、Stable Diffusionは膨大なテーマのイメージをハイクオリティに生成することができる非常に発展性のある技術です。

これからの動向にもぜひ注目してみてください。

参考文献

High-Resolution Image Synthesis with Latent Diffusion Models

魔術として理解するお絵描きAI講座