Stable Diffusion

Stable Diffusion とは?

Stable Diffusionとは、テキストを入力するとそれに沿った画像を生成してくれるAIモデルです。

ミュンヘン大学のCompVisグループが開発しました。

深層生成ニューラルネットワークの一種で、潜在拡散モデルと呼ばれる手法を使っています。

Stable Diffusionを使う方法

Stable Diffusionを使うには、2つの方法があります。

  • Web版を使う
    1. 公式サイトにアクセス
    2. 画像の描写を英語で入力
    3. 「Generate image」をクリック
      • 4枚の画像が生成される
  • Colaboratoryを使う
    • GoogleのオンラインツールであるColaboratory
      • Stable Diffusion用のノートブックを開く
      • コマンドで画像を指定する
      • 画像が生成される

Colaboratoryを使う具体的な方法

Colaboratoryを使うには、以下の手順を実行してください。

  1. Googleアカウントにログインする
  2. [Stable_Diffusion.ipynb]を検索して、Stable Diffusion用のノートブックを開く
  3. Stable Diffusion用のノートブックを自分のGoogleドライブにコピーする
  4. メニューから「ランタイム」→「ランタイムのタイプを変更」を選択し、「GPU」を選んで保存する
  5. インストール&参照をOKにする
    • 生成された画像が表示される手前までの4つのコードを実行すればOK
  6. 「+コード」をクリックして、新しいコマンド入力欄を表示させる。
    • あるいは、サンプルコードのプロンプトを書き換える
  7. 画像の描写を英語で入力し、Shift+Enterキーで実行する。
    • 例えば、コードの prompt = "" に「a cat wearing a hat」と入力
      • 帽子をかぶった猫の画像が生成される

具体的なコードのサンプルは以下の通りです。

prompt = "a cat wearing a red hat"
image = pipe(prompt).images[0]  # image here is in [PIL format](https://pillow.readthedocs.io/en/stable/)

# Now to display an image you can either save it such as:
image.save(f"astronaut_rides_horse.png")

# or if you're in a google colab you can directly display it with 
image

このコードを実行すると1枚の絵が表示されます。

下記のコードで、少し時間がかかりますが 3×4で12枚の絵が表示されます。

num_cols = 3
num_rows = 4

prompt = ["a cat wearing a red hat"] * num_cols

all_images = []
for i in range(num_rows):
  images = pipe(prompt).images
  all_images.extend(images)

grid = image_grid(all_images, rows=num_rows, cols=num_cols)
grid

出力結果がこれです。

ちなみに、この記事のアイキャッチ画像は以下のコードで生成して、3行の中の下の2行だけを使いました。

num_cols = 3
num_rows = 3

prompt = ["a photograph of a brown tabby cat astronaut riding a horse"] * num_cols

all_images = []
for i in range(num_rows):
  images = pipe(prompt).images
  all_images.extend(images)

grid = image_grid(all_images, rows=num_rows, cols=num_cols)
grid

コードが読める方は色々と画像の出力方法をカスタマイズしてみると楽しいですね。

以上です。Stable Diffusionで楽しんでくださいね。😊


AIに興味があれば、この記事もご参照ください。

タイトルとURLをコピーしました