スポンサーリンク
画像生成AIの最近の話題は動画に移っているので、静止画についてはあまり聞こえてこなくなった。
昨年Stable Diffusion 3.5が出て使ってみたが、FLUX.1と比べると満足できるものではなく、当面はFLUX.1かなと思っている。
そこに新たなライバルが登場。nVidia製のGPUを搭載していないと使えないが、生成が非常に高速なSanaだ。
画像生成AIについてのまとめはこちら。
画像生成AIで新しいものはないかと探していて見つけた。
生成された画像が載っているが、まあまあ高画質だ。しかしこういうのってプロ中のプロがプロンプトを操って作っているのかもしれない。
話半分くらいで試してみるか。
ちなみに画像生成時間の比較が書かれている。このグラフは4K x 4K解像度の画像を作る際の時間(秒)の比較だ。
一番上のFLUX-devが1023秒、次のSanaの標準が469秒と一気に半分以下の時間だ。さらに改良を重ねて、一番下のSanaは9.6秒となっている。106倍のスピードだ。
期待を持てそうな記述だ。早速インストールしてみよう。
いつもの次作PC8代目、Jisaku8を使う。DeskMini X600はGPUを搭載していないので使えない。
Jisaku8はおととし夏に作ったもので、そのスペックはRyzen 5700X、32GBメモリ、RTX3060 12GB搭載のいたって平凡なものだ。
できた画像や生成の様子を動画にまとめている。動画で説明していない情報はこの下に書いてある。
いつものように、Pythonの仮想環境を作る。SSDのFドライブに作っていく。FドライブにはPython 仮想環境を置く「\python」フォルダがある。
f:
cd \python
python3 -m venv sana
cd sana\Scripts
.\activate
Pythonの準備ができたら、ワークディレクトリを作る。FドライブにはAI関連の「\ai」フォルダがある。
cd \ai
mkdir sana
cd sana
さてここからダウンロードをしていく。
pip install git+https://github.com/huggingface/diffusers
pip install torch==2.3.1 --index-url https://download.pytorch.org/whl/cu121
pip3 install transformers accelerate
pip install "numpy<2"
何回か完了できず、torchやnumpyの解決のため検索を行い、上記のようになった。pythonやCUDAのバージョンによっては記述を変える必要があるかもしれない。
まずはWEBにあった、以下のプロンプトを実行してみる。PythonのコードはREADME.mdに載っているもののまま。
'a cyberpunk cat with a neon sign that says "Sana"'
実行するとほどなく終わる。
速いが決して質が悪くない。この辺りはDiffusionの改良を行っているせいかと思われるが、GPU専用としているあたりに早さの秘訣があるのかな。
サンプルを改造して、いろいろ作ってみる。
import torch
from diffusers import SanaPAGPipeline
import datetime
pipe = SanaPAGPipeline.from_pretrained(
"Efficient-Large-Model/Sana_1600M_1024px_BF16_diffusers",
variant="bf16",
torch_dtype=torch.bfloat16,
pag_applied_layers="transformer_blocks.8",
)
pipe.to("cuda")
pipe.text_encoder.to(torch.bfloat16)
pipe.vae.to(torch.bfloat16)
text_array = [
"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",
"Crossing street in Shibuya, Tokyo with many people",
" Shinkansen is arriving at the station",
"Tokyo sightseeing spot, best10",
"anmal holding a sign that says IrvineのもっとPC自作日記",
"A cat holding a sign that says Irvine's PC DIY diary",
"A panda holding a sign that says Irvine's PC DIY diary",
"Mr. Trump holding a sign that says Irvine's PC DIY diary",
"Mr. Puchin holding a sign that says Irvine's PC DIY diary",
"Mr. Ishiba holding a sign that says Irvine's PC DIY diary",
]
for text in text_array :
image = pipe(
prompt=text,
guidance_scale=5.0,
pag_scale=2.0,
num_inference_steps=20,
generator=torch.Generator(device="cuda").manual_seed(42),
)[0]
image[0].show()
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[0].save(filename + ".png")
結果、作られたものの一部を紹介。プロンプトはソースコード内にある。
FLUX.1は画質はいいのだが、生成に時間がかかる。他のことをしながら裏で動かして大量に画像を作って、後で良しあしを選別したりするが、もともとGPUメモリ16GBは欲しいものなのでしょうがないのかな。
生成時間の比較を今回はやっていないが、Sanaでは1枚当たり1分かからないのでどんどん作られる。ComfyUIと組み合わせると使い勝手がよくなると思うが、今のところFLUX.1専用にしているので設定を変えたくない。このため、Sanaは上記ソースコードを改良して生成している。
では生成した画像を比較しよう。主観もあるので好みでどっちがいいということもあると思うが、どちらもいい、と自分は思っている。
両方とも高画質なものを生成している。
生成したプロンプトは動画の中で紹介している。
Sanaは高画質で速くていうことないのだが、一つだけ問題がある。
先のソースコードで以下の個所がある。カッコ内は乱数だ。
manual_seed(42),
この42を適当に換えると同じプロンプトでも異なる画像を生成できる。これはどの生成AIでも同じだ。
改良したプログラムでこの乱数を適当に換えられるようにして同じプロンプトで複数枚の画像を生成したのだが、同じ画像が何枚もできていることが分かった。
乱数が同じためなのか、異なっているかまでは調べていない。前者なら乱数を重複しないようにすれば異なる画像になると思うが、それにしても同じ画像が多い。
FLUX.1ではこういうことはなかったので、もしかしたらSanaはベースにする蓄積した情報が少なくて、生成できるバリエーションが狭いのかもしれない。つまり描かれる人物のパターンが数人しかなくて、何度も生成していると同じ人が何度も作られるということかもしれない。
もしそうであれば、仕事を早く終えるという点ではSanaは優秀なのだが、他とは違う、個性的な画像を作ろうとすると限界が早く見えるのかもしれない。
とはいえ、FLUX.1とは異なる画像を作ってくれるので、併用すれば役立ちそうだ。
RTX3060 12GBでも1枚当たり20秒もかからず生成してくれる高速なSanaの動画バージョンを期待したい。
PR