ジャコ Lab

プログラミング関連のメモ帳的ブログです

一度にたくさんの画像を生成してみる

zako-lab929.hatenablog.com

前回の記事(上記) では stabilityai/stable-diffusion-2-1 ではなく、
Meina/MeinaMix_V11 というモデルを使用してみて、
今までのオバケは何だったんだ?というくらい、とてもクオリティの高い画像が生成されました。

しかし、 クオリティの高い画像 を引き当てるまで何度も実行が必要になります。
この記事では、一気に複数の画像を生成してみようと思います。

事前準備

zako-lab929.hatenablog.com

とりあえず、前回の記事で利用した以下のコードは準備しておきます

!pip install --upgrade diffusers[torch] transformers
from diffusers import StableDiffusionPipeline
import torch

pipe = StableDiffusionPipeline.from_pretrained(
    "Meina/MeinaMix_V11",
    torch_dtype=torch.float16,
).to("cuda")
# とりあえず Model card に記載されていた通り Civitai の例を参考にしてみました
prompt = "1girl, japanese clothes, ponytail ,white hair, purple eyes, magic circle, blue fire, blue flames, wallpaper, landscape, blood, blood splatter, depth of field, night, light particles, light rays, sidelighting, thighs, fate \(series\), genshin impact, ****, open jacket, skirt, thighhighs, cloud"
negative_prompt = "(worst quality:1.6, low quality:1.6), (zombie, sketch, interlocked fingers, comic)"

generator = torch.Generator()
generator.seed()
print(f"Seed: {generator.initial_seed()}")

image = pipe(
    prompt,
    negative_prompt=negative_prompt,
    generator=generator,
    width=768, height=512,
).images[0]
image

生成した画像をファイルとして保存する準備

画像は生成したら Google Colab のインスタンス上に保存するためにファイル名を決めたりしないといけません。
そこでまずは事前準備のプログラムを書きます。

import os
from datetime import datetime
from zoneinfo import ZoneInfo

# ディレクトリを作成する (存在していてもエラーにはしない)
os.makedirs('outputs', exist_ok=True)

# Asia/Tokyo タイムゾーンの現在時刻を YYYYMMDDhhmmss 形式で得る
now = datetime.now(tz=ZoneInfo("Asia/Tokyo"));
formattedNow = now.strftime("%Y%m%d%H%M%S")

パイプラインの部分を変更して実行する

プロンプトは適当に変えてみます

-   prompt = "1girl, japanese clothes, ponytail ,white hair, purple eyes, magic circle, blue fire, blue flames, wallpaper, landscape, blood, blood splatter, depth of field, night, light particles, light rays, sidelighting, thighs, fate \(series\), genshin impact, ****, open jacket, skirt, thighhighs, cloud"
+   prompt = "1girl, school uniform, ponytail, silver hair, wallpaper, landscape, depth of field, night, light particles, light rays, sidelighting, ****, open jacket, skirt"
    negative_prompt = "(worst quality:1.6, low quality:1.6), (zombie, sketch, interlocked fingers, comic)"

    generator = torch.Generator()
+   for idx in range(10):
        generator.seed()
        print(f"Seed: {generator.initial_seed()}")

        image = pipe(
            prompt,
            negative_prompt=negative_prompt,
            generator=generator,
            width=768, height=512,
        ).images[0]
-       image

        # ファイル名にシード値等を付けてわかりやすくします
        image.save(f"outputs/{formattedNow}_{idx}_{generator.initial_seed()}.png")

実行結果

こんな感じにたくさん出力されます

すべてダウンロードしてみた

まとめ

生成された画像を image.save() することで、
インスタンス上に保存され、一度にたくさん見ることができるようになりました。

ただ、、、ディレクトリレベルでダウンロードってできないんですね。。。