見出し画像

AI による画像作成を試してみた

注意: 2023年 4月から、Google Colab に ↓ のような変更が加えられています。この記事の内容にも影響しているので、参考にしてください。


今年夏ぐらいから、Stable Diffusion などの AI による画像作成(いわゆる、画像作成 AI)が話題になっています。
以下 URL では、学習済みモデルを利用して、Google Colab(Google Colaboratory)で体験してみる例が紹介されていたので、実際に試してみました。

体験するにも二種類

とは言え、Google Colab で Stable Diffusion を体験する手順として、以下の 二種類があり、上記 URL は前者の手順が説明されています。

  • Hugging Face のモデルカードから手動でダウンロードする
    → 学習済みモデルを、自身の Google ドライブに配置する

  • Hugging Face の Diffusers ライブラリを使う
    → 学習済みモデルは、ネットワーク上に公開されているものを利用する

前者の方がいろいろと自分なりのカスタマイズができたり、細かな理解ができるのかもしれませんが、簡単に体験してみるために後者の手順で進めることにしました。

簡単な手順で Stable Diffusion を体験

後者の手順は、以下 URL で説明されています。既に Google Colab を利用したことのある人であれば、説明されている手順に沿って操作していけば、難なく画像作成までたどり着けるでしょう。

(1) ランタイムの設定を確認

GPU が有効になっているかを、以下のコードで確認します。

!nvidia-smi

(2) 必要なライブラリのインストール

実行のために必要なライブラリをインストール。

!pip install diffusers transformers ftfy accelerate

この処理は、クラウド側にランタイムが作成される度に行わなければなりません。一度作成したら、操作している間はランタイムが維持されるので、画像作成の度に行わなければならないものではありません。

(3) 画像作成

プロンプトと呼ばれる AI への画像作成指示を指定して、プログラムを実行すると、待っていると画像が生成されます。

import datetime
import torch
from torch import autocast
from diffusers import StableDiffusionPipeline

YOUR_TOKEN = "自分の Hugging Faceアクセストークン を入力"
#model_id = "CompVis/stable-diffusion-v1-4"
model_id = "runwayml/stable-diffusion-v1-5"
device = "cuda"

# プロンプト
prompt = "Mt. Fuji in the style of Picasso"

# パイプラインの作成
pipe = StableDiffusionPipeline.from_pretrained(model_id, use_auth_token=YOUR_TOKEN)
pipe = pipe.to(device)

# パイプラインの実行
generator = torch.Generator(device).manual_seed(42) # seedを前回と同じ42にする
with autocast(device):
    image = pipe(prompt, guidance_scale=7.5, generator=generator).images[0]  

# 生成した画像の保存
dt_now = datetime.datetime.now(datetime.timezone(datetime.timedelta(hours=9)))
dtStr = dt_now.strftime('%Y%m%d-%H%M%S')
fileName = dtStr + " " + prompt + ".png"
print(fileName)
image.save(fileName)

上記のプログラムは、

  1. 使用する Stable Diffusion のライブラリを、v1−4 から v1−5 に変更

  2. 生成した画像のファイル名を実行した日時とプロンプトから生成

という変更を行ってあります。YOUR_TOKEN には、上記 URL を参考にして、自身の取得したトークンを設定してください。

描画した画像(Mt. Fuji in the style of Picasso)

プロンプトを変更してプログラムを実行すれば、プロンプトに応じた画像が作成されます。

切断されると…

しばらく操作しないと、下図のような表示になります。このような表示になったら、上記の (2) からやり直します。

ランタイムが切断された状態

作例

「青空文庫」から芥川龍之介の「羅生門」の冒頭の一説をプロンプトとして、画像を作成してみました。

ある日の暮方の事である。一人の下人が、羅生門の下で雨やみを待っていた。

「門」や「下人」といったキーワードはどこに行ったのだろう?という感じです。

門はどこ?

It was late one day. A servant was waiting for the rain to stop under the Rashomon Gate.

DeepL で英語に翻訳したものをプロンプトと指定してみました。英語に翻訳しただけで、随分と雰囲気が変わりました。

「門」には違いないかも?

やはり、プロンプトは日本語で指定するよりも、英語で指定した方がいいようですね。

感想

今回紹介したリンク先の手順に沿って手順したら、Web ブラウザ上の操作だけで、AI による画像作成が比較的簡単に行えました。 ※今回の記事では行わなかった方の手順だと、もう少し手間が増えると思います。

プログラム中のプロンプト部分を変更するだけで、作成する画像を変更できましたが、

  • プロンプトは日本語よりも英語で指定した方がいいみたい。

  • この辺りのプロンプトを指定するテクニックがあるようで、パラメータなどをうまく指定しなければならないようで奥深い。

という感じ。
これも一つの道具であり、うまく使うためにはテクニックが必要です。AI と言えど、ちゃんと指示してあげなければ結果を出してはくれません。

この記事では、「文字(プロンプト)」から画像を生成していますが、ベースとなる「画像」と「文字(プロンプト)」から画像を生成する例も、以下の記事で試してみました。あわせてご覧ください。

この記事が気に入ったらサポートをしてみませんか?