今回は2022年8月に公開された、高性能画像生成モデルである「Stable Diffusion」を実装する方法を紹介します。

第1回目は「txt2img」により、任意のキーワードから様々な画像を生成して遊んでみましょう。

Google colabを使用して簡単に実装することができますので、ぜひ最後までご覧ください。

今回の目標

・Stable Diffusionとは

・Stable Diffusionの導入方法

・Stable Diffusionの実装(txt2img)

Stable Diffusionとは

Stable Diffusionは拡散モデルによる画像生成モデルで、スタートアップ企業であるStability AIが2022年8月に「Stable Diffusion」と、それを使用したサービス「DreamStudio」のβ版をリリースしました。

Stable Diffusionは、SNSなどで話題になっている「Midjourney」と同様で、テキストから画像を生成することができます。

無料で公開されており、商用利用も可能なライセンスの下でリリースされているため、様々なシーンでの活用が期待されます。

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

参考URL:https://huggingface.co/blog/stable_diffusion

Stable Diffusionの導入

Hugging Faceの登録とNewTokenの発行

Hugging Faceのアカウント作成

初めにHuggingFaceのアカウントを作成します。

※Hugging Faceとは米国のHugging Face社が提供している、自然言語処理に特化したディープラーニングのフレームワークです。
ソースコードは全てGitHub上で公開されており、誰でも無料で使うことができます。

HuggingFaceにアクセスし、画面右上のSignUpよりアカウントを作成することができます。

登録したメールアドレスに認証メールが届くので、メールに記載されたリンクにアクセスすれば、アカウント登録は完了です。

STEP
1

Access Repositoryの承諾

こちらのCompVis/stable-diffusion-v1-4にアクセスし記載の内容を確認の上、「Access Repository」をクリックすることで権限を得ることができます。

この時点で、モデルの作者にメールアドレスとユーザー名が共有されることになりますので注意してください。

モデルの使用にあたっては、意図的に違法または有害な出力やコンテンツを作成・共有することが禁止されています。

CreativeML OpenRAIL Licenseに準拠した上で、再配布や商用利用のルールなどについての記載に同意する必要があります。

STEP
2

Access Tokensの発行

画面右上のアカウントのアイコンから[Settings]->[Access Tokens]に移動しNewTokenを発行します。

後ほど使用しますので、メモしておきましょう。

STEP
3

Google colabの準備

ここからは、Google colab環境で進めていきます。

まずはGPUを使用できるように設定をします。

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

まずはgoogleドライブをマウントします。

次に今回作成した画像を保存するフォルダを作成します。

フォルダ名は変えても問題ありありません。

from google.colab import drive 
drive.mount('/content/drive')

#保存フォルダを作成する
 !mkdir -p '/content/drive/My Drive/Stable Diffusion_main/'
%cd '/content/drive/My Drive/Stable Diffusion_main/'

以上で導入が完了しました。

Stable Diffusionの実装(txt2img)

ここからはStable Diffusionによる「txt2img」を実装していきます。

なお、「img2img」はこちらの記事で紹介しています。

画像生成・超解像・画像修復・アニメーション

Stable Diffusion(画像生成) 画像生成として話題のStable Diffusionを紹介しています。 Super Resolution(超解像) 最新の実用的な超解像を紹介します。 画像や動画を…

まずは必要なライブリをインストールします。

!pip install diffusers==0.2.4 transformers scipy ftfy

次にモデルをダウンロードしましょう。

ここで先程取得した、Access Tokensが必要となります。

from diffusers import StableDiffusionPipeline
import matplotlib.pyplot as plt

# ここに先程取得したAccess Tokensを貼り付ける
access_tokens="ここにAccess Tokensを貼り付け" 
 
# モデルを読み込む
model = StableDiffusionPipeline.from_pretrained("CompVis/stable-diffusion-v1-4", use_auth_token=access_tokens)
model.to("cuda")

画像生成

まずは生成したい画像のキーワードを英語で指定します。

prompt ='Samurai walking in a Japanese castle with cherry blossoms in full bloom '

次に今回生成する画像の保管先のフォルダを作成します。

ここでは「outputs」というフォルダ名にしました。

!mkdir outputs

先程設定したキーワードをテキストファイルとして出力します。

txt_path = 'outputs/prompt.txt'
with open(txt_path,mode='w') as f:
  f.write(prompt)

最後に生成する画像の枚数を設定して、実行します。

ここでは100枚の画像を生成してみることにします。

# 生成する画像の枚数
num = 100

for i in range(num):
  # モデルにpromptを入力し画像生成
  image = model(prompt)["sample"][0]
  # 保存
  image.save(f"outputs/test_{i:04}.png")

以上をまとめると以下のようになります。

あとはひたらす、キーワードを変えて画像を生成してみましょう。

prompt ='Samurai walking in a Japanese castle with cherry blossoms in full bloom'
!mkdir outputs
num = 100

txt_path = 'outputs/prompt.txt'
with open(txt_path,mode='w') as f:
  f.write(prompt)

for i in range(num):
  # モデルにpromptを入力し画像生成
  image = model(prompt)["sample"][0]
  # 保存
  image.save(f"outputs/test_{i:04}.png")

生成した画像の紹介

いくつかの例を紹介します。

A family of white seals walking in an old town in Japan

Samurai walking in a Japanese castle with cherry blossoms in full bloom

A asian couple of high school students walking on a country road at sunset

A asian couple of high school students walking on the beach at sunset

A boy and girl are dating in the classroom by japanese animation

まとめ

最後までご覧いただきありがとうございました。

今回は2022年8月に公開された、高性能画像生成モデルである「Stable Diffusion」を実装する方法を紹介しました。

「txt2img」により、任意のキーワードから様々な画像を生成することができました。

なお、作成した画像をより高解像度にする方法も別の記事で紹介しています。ぜひご覧ください。

画像生成・超解像・画像修復・アニメーション

Stable Diffusion(画像生成) 画像生成として話題のStable Diffusionを紹介しています。 Super Resolution(超解像) 最新の実用的な超解像を紹介します。 画像や動画を…