スポンサーリンク
画像生成AIの代表格の一つ、Stable DIffusion 3がリリースされたので早速使ってみた。以前のように人間の写真を生成すると腕が3本あるとかそういうことが多かったのだが、今回は少なくなった。進化したな。
画像生成AIについてのまとめはこちら。
昨年出ていたものはStable Diffusion XLだった。それまでのStable Diffusionと一部互換性がないという話があった。
どういう画像を生成できるのか、またどのくらいの時間で生成できるのかを試してみた。Ryzen 5700XとRTX3060で実行してみた。
詳細は下のリンクからどうぞ。
プロンプトもよくわからない状況で使ってみたら、奇妙な画像ばかり作られてげんなりした。
その後いろいろな画像生成AIが出たり、Stable Diffusionのフロントエンドをするソフトウェアが出たりでプロンプトの文字が少なくてもまともな画像ができるようになった。
そんな中でStabe Diffusion3が出たという話を聞いたので早速試してみた。
最初のころはかなりてこずったが、最近はすんなりと使えている。
いつものようにpython の仮想環境を作り、pipで追加パッケージをインストールするだけだ。
環境はF:\python\sd3にpythonの仮想環境をインストールし、F:\ai\sd3に実行時に作られるファイルを置く。
詳細なところはHugingFaceに載っているのだろうが、自分が読んでもわからないところがあったので、一部試行錯誤している。
毎度おなじみだ。pythonをインストールしていない人はWindowsストアからインストールしよう。
cd \python
python3 -m venv sd3
cd sd3\Scripts
activate
いつものようにtramsfermerやtorchをインストールする。torchはdGPU対応版を指定する。いつもと違うのは、最初のコマンドだ。これは先のHungingFaceに書かれている。
pip install --upgrade diffusers
pip install transformers
pip install Image
pip install torch -f https://download.pytorch.org/whl/torch_stable.html
HuggingFaceに書かれている猫の写真から生成するプログラムを実行した。しかし動かない。
HuggingFaceを改めて読むと、先に認証しないといけないようだ。
HuggingFaceでトークンを作成して、先ほどの画面で読み込ませないといけないようだ。
まずは開いて、トークンに必要な情報を入力する。
赤線のあるName,Email,Organization or Affiliationを入力する。CountryにはJapanだ。下のAgree and access repositryをクリックして完了だ。
続いてトークン作成ページに行き必要な情報を記入する。トークン名はSD3だ。
そしてトークン作成画面にてトークンを作成する。忘れずにトークンをテキストファイルなどに記録しておこう。
続いてさきほどのコンソールからかきコマンドを入力して、トークンを貼り付ける。
huggingface-cli login
これでレポジトリからの訓練済みデータのダウンロードができるようになったはず。
猫の画像から生成するサンプルがあるのでこれを使ってみる。
生成した画像を保存できるように、後半を改造している。
import torch
from diffusers import StableDiffusion3Img2ImgPipeline
from diffusers.utils import load_image
import datetime
pipe = StableDiffusion3Img2ImgPipeline.from_pretrained(
"stabilityai/stable-diffusion-3-medium-diffusers", torch_dtype=torch.float16
).to("cuda")
init_image = load_image("https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/cat.png")
prompt = "cat wizard, gandalf, lord of the rings, detailed, fantasy, cute, adorable, Pixar, Disney, 8k"
image = pipe(prompt, image=init_image).images[0]
image
filename = str(dt_now.year)+month[-2:] + day[-2:] + hour[-2:] + min[-2:] + sec[-2:]
image.save(filename + ".png")
しかし、エラーになった。
ValueError: Cannot instantiate this tokenizer from a slow version. If it's based on sentencepiece, make sure you have sentencepiece installed.
ググるとtransformersのインストールをちょっと変える必要がありそうだ。
pip install transformers[sentencepiece]
これでエラーにならず実行できるようになった。
数回やったがいろいろな写真が作られた。
では、プロンプトからの生成を試してみよう。
長いダウンロード時間を終えて、数分で1枚画像ができた。
こちらもサンプルからソースコードを作成した。
import torch
from diffusers import StableDiffusion3Img2ImgPipeline
from diffusers.utils import load_image
import datetime
pipe = StableDiffusion3Img2ImgPipeline.from_pretrained(
"stabilityai/stable-diffusion-3-medium-diffusers", torch_dtype=torch.float16
).to("cuda")
init_image = load_image("https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/cat.png")
Parray = [
"A cat holding a sign that says hello world",
"A dog holding a sign that says hello world",
"A mouse holding a sign that says hello world",
"A horse holding a sign that says hello world",
"A cow holding a sign that says hello world",
"A dinasor holding a sign that says hello world",
"Tokyo, Shibuya, crossing, many people",
"Shinkansen",
"Tokyo sightseeing spot, best10",
"anmal holding a sign that says IrvineのもっとPC自作日記",
]
Loop = 3
for prompt in Parray :
for loop in range(Loop):
image = pipe(prompt, image=init_image).images[0]
dt_now = datetime.datetime.now()
month = "00"+str(dt_now.month)
day = "00" + str(dt_now.day)
hour = "00" + str(dt_now.hour)
min = "00" + str(dt_now.minute)
sec = "00" + str(dt_now.second)
filename = str(dt_now.year)+month[-2:] + day[-2:] + hour[-2:] + min[-2:] + sec[-2:]
image.save(filename + ".png")
1枚3分前後でできている。
できた画像はこちら。プロンプトは上のソースコードを参照。まずはHello Worldの看板を持つ動物たち。
東京渋谷の交差点で作成。
新幹線で作成。新幹線はありそうだけど、ホームの形状がちょっと違う。最近はホームドアが多いし、黄色のブツブツしている線が太すぎ。
東京の観光、10選。どこの寺?
作成時間の詳細などは動画も参照。
Stable Diffusion XLのときのように手がたくさんある人間が作られることは少なくなった。でもなくなってはいない。
またちょっと試してみるか。
なお、UIはComfyUI が推奨とのこと。前から来ている名前ではあるが使ったことがないので試してみるかな。
それからpipで下のコマンドを入れ忘れているようだ。入れて実行していないが何度も警告が出ていたのでインストールすべきだろう。
pip3 install accelerate
PR