これの大幅なアップグレードである Dream Factory を立ち上げたことに注意してください。 (オプションの) GUI、真の同時マルチ GPU サポート、完全な EXIF メタデータ サポートを備えた統合ギャラリー、およびその他の多くの新機能が備わっています。
安定した拡散に重点を置くために VQGAN と Disco Diffusion のサポートを削除しました。そのため、VQGAN や Disco Diffusion が必要な場合は、今のところこれを使用する必要があります。それ以外の場合は、Dream Factory に移行することをお勧めします。このリポジトリでバグ修正のパッチを適用し続けるつもりですが、今後新しい機能を追加することはおそらくありません。
AI によって生成されたアートワークの大規模なバッチをローカルで作成を自動化します。ユーザーが選択した主題、スタイル/アーティストなどを組み合わせた大規模なプロンプト キューを自動化する機能を備えた GPU を稼働させて、AI によって生成されたアートワークを 24 時間年中無休で出力します。利用可能なモデルの詳細については、サンプル写真の後に記載されています。
このプロセスで作成した画像の例をいくつか示します (厳選して鮮明化したものです):
私はこのプロジェクトで使用されるモデルの作成やトレーニングを行っておらず、元のコーディングにも関与していないことに注意してください。オリジナルの colab バージョンをローカルで実行できるように変更し、自動化のサポートを追加しただけです。現在サポートされているモデルとその元の実装へのリンク:
Nvidia GPU、できれば十分な量の VRAM が必要です。モデルと設定にもよりますが、512x512 の出力画像には 12GB の VRAM で十分であり、384x384 には 8GB で十分です (8GB が妥当な最小値であると考えてください)。 1024x1024 の画像を生成するには、約 24GB 以上の VRAM が必要です。小さなイメージを生成し、ESRGAN またはその他のパッケージを介してアップスケーリングすると、非常に良好な結果が得られます。
AMD GPU で実行できるはずですが、ROCm バージョンの Pytorch をインストールするには Linux を使用する必要があります。私は Linux マシンに投入できる AMD GPU を持っていないので、これを自分でテストしていません。
これらの手順は、Nvidia 3080 Ti GPU (12GB VRAM) を搭載した Windows 10 デスクトップ、および古い Nvidia Tesla M40 GPU (24GB VRAM) を搭載した Ubuntu Server 20.04.3 システムでテストされました。
[1] Anaconda をインストールし、ルート ターミナルを開き、新しい環境を作成 (そしてアクティブ化) します。
conda create --name ai-art python=3.9
conda activate ai-art
[2] Pytorch をインストールします。
conda install pytorch torchvision torchaudio cudatoolkit=11.3 -c pytorch
ここにあるオンライン ツールを使用して、Pytorch インストールをカスタマイズできることに注意してください。
[3]他の必要な Python パッケージをインストールします。
conda install -c anaconda git urllib3
pip install transformers keyboard pillow ftfy regex tqdm omegaconf pytorch-lightning IPython kornia imageio imageio-ffmpeg einops torch_optimizer
[4]このリポジトリのクローンを作成し、そのディレクトリに切り替えます。
git clone https://github.com/rbbrdckybk/ai-art-generator
cd ai-art-generator
Linux ユーザーは、clone コマンドで URL を一重引用符で囲む必要がある場合があることに注意してください。
[5]追加の必要なリポジトリのクローンを作成します。
git clone https://github.com/openai/CLIP
git clone https://github.com/CompVis/taming-transformers
[6]デフォルトの VQGAN 事前トレーニング済みモデル チェックポイント ファイルをダウンロードします。
mkdir checkpoints
curl -L -o checkpoints/vqgan_imagenet_f16_16384.yaml -C - "https://heibox.uni-heidelberg.de/d/a7530b09fed84f80a887/files/?p=%2Fconfigs%2Fmodel.yaml&dl=1"
curl -L -o checkpoints/vqgan_imagenet_f16_16384.ckpt -C - "https://heibox.uni-heidelberg.de/d/a7530b09fed84f80a887/files/?p=%2Fckpts%2Flast.ckpt&dl=1"
Linux ユーザーは、curl コマンドの二重引用符を一重引用符に置き換える必要があることに注意してください。
[7] (オプション) 追加の事前トレーニング済みモデルをダウンロードします。
追加のモデルは必要ありませんが、より多くのオプションが提供されます。利用可能な事前トレーニング済みモデルのリストは次のとおりです。
たとえば、FFHQ モデル (顔でトレーニングされた) も必要な場合:
curl -L -o checkpoints/ffhq.yaml -C - "https://app.koofr.net/content/links/0fc005bf-3dca-4079-9d40-cdf38d42cd7a/files/get/2021-04-23T18-19-01-project.yaml?path=%2F2021-04-23T18-19-01_ffhq_transformer%2Fconfigs%2F2021-04-23T18-19-01-project.yaml&force"
curl -L -o checkpoints/ffhq.ckpt -C - "https://app.koofr.net/content/links/0fc005bf-3dca-4079-9d40-cdf38d42cd7a/files/get/last.ckpt?path=%2F2021-04-23T18-19-01_ffhq_transformer%2Fcheckpoints%2Flast.ckpt"
[8] (オプション) VQGAN+CLIP をテストします。
python vqgan.py -s 128 128 -i 200 -p "a red apple" -o output/output.png
出力ディレクトリにoutput.pngが作成されているはずです。これはリンゴに似ているはずです。
[9] CLIP ガイド付き拡散用のパッケージをインストールします (VQGAN+CLIP のみに興味がある場合は、ここから最後まですべてをスキップできます)。
pip install ipywidgets omegaconf torch-fidelity einops wandb opencv-python matplotlib lpips datetime timm
conda install pandas
[10] CLIP ガイド付き拡散用のクローン リポジトリ:
git clone https://github.com/crowsonkb/guided-diffusion
git clone https://github.com/assafshocher/ResizeRight
git clone https://github.com/CompVis/latent-diffusion
[11] CLIP ガイドによる拡散に必要なモデルをダウンロードします。
mkdir contentmodels
curl -L -o content/models/256x256_diffusion_uncond.pt -C - "https://openaipublic.blob.core.windows.net/diffusion/jul-2021/256x256_diffusion_uncond.pt"
curl -L -o content/models/512x512_diffusion_uncond_finetune_008100.pt -C - "http://batbot.tv/ai/models/guided-diffusion/512x512_diffusion_uncond_finetune_008100.pt"
curl -L -o content/models/secondary_model_imagenet_2.pth -C - "https://ipfs.pollinations.ai/ipfs/bafybeibaawhhk7fhyhvmm7x24zwwkeuocuizbqbcg5nqx64jq42j75rdiy/secondary_model_imagenet_2.pth"
mkdir contentmodelssuperres
curl -L -o content/models/superres/project.yaml -C - "https://heibox.uni-heidelberg.de/f/31a76b13ea27482981b4/?dl=1"
curl -L -o content/models/superres/last.ckpt -C - "https://heibox.uni-heidelberg.de/f/578df07c8fc04ffbadf3/?dl=1"
Linux ユーザーは、curl コマンドの二重引用符を一重引用符に置き換え、 mkdir のバックスラッシュをスラッシュに置き換える必要があることに注意してください。
[12] (オプション) CLIP 誘導拡散をテストします。
python diffusion.py -s 128 128 -i 200 -p "a red apple" -o output.png
出力ディレクトリにoutput.pngが作成されているはずです。これはリンゴに似ているはずです。
[13] Stable Diffusion リポジトリのクローンを作成します (SD に興味がない場合は、ここから最後まですべてスキップできます):
git clone https://github.com/rbbrdckybk/stable-diffusion
[14] Stable Diffusion に必要な追加の依存関係をインストールします。
pip install diffusers
[15] Stable Diffusion の事前トレーニング済みチェックポイント ファイルをダウンロードします。
mkdir stable-diffusionmodelsldmstable-diffusion-v1
curl -L -o stable-diffusion/models/ldm/stable-diffusion-v1/model.ckpt -C - "https://huggingface.co/CompVis/stable-diffusion-v-1-4-original/resolve/main/sd-v1-4.ckpt"
curl コマンドがチェックポイントをダウンロードしない場合、チェックポイントはログインの背後でゲートされます。ここで登録する必要があります (電子メールと名前のみが必要です)。その後、ここでチェックポイント ファイルをダウンロードできます。
ダウンロード後、.ckpt ファイルを上で作成したディレクトリに配置し、 model.ckptという名前を付ける必要があります。
[16] (オプション) 安定した拡散のテスト:
SD をテストする最も簡単な方法は、!PROCESS =steadydiffと 1 つのサブジェクトを含む単純なプロンプト ファイルを作成することです。詳細については、 example-prompts.txtと次のセクションを参照してください。最初にtest.txtという単純なプロンプト ファイルを作成すると仮定すると、次のコマンドを実行してテストできます。
python make_art.py test.txt
成功した場合、画像は出力ディレクトリに保存されます (日付とプロンプト ファイルに応じて名前が付けられたサブディレクトリに編成されます)。
[17] ESRGAN/GFPGAN のセットアップ (画像をアップスケールする予定がない場合は、これと他のすべてをスキップできます):
git clone https://github.com/xinntao/Real-ESRGAN
pip install basicsr facexlib gfpgan
cd Real-ESRGAN
curl -L -o experiments/pretrained_models/RealESRGAN_x4plus.pth -C - "https://github.com/xinntao/Real-ESRGAN/releases/download/v0.1.0/RealESRGAN_x4plus.pth"
python setup.py develop
cd ..
これで完了です。
実行中に GPU VRAM 不足以外のエラーが発生し、しばらくインストールを更新していない場合は、次のようなより重要なパッケージのいくつかを更新してみてください。
pip install transformers -U
基本的に、画像の生成に使用する主題とスタイルを含むテキスト ファイルを作成するだけです。プロンプト ファイルに 5 つの主題と 20 のスタイルがある場合、合計 100 の出力イメージが作成されます (主題ごとに 20 のスタイル イメージ)。
example-prompts.txtを見て、プロンプト ファイルがどのように見えるかを確認してください。現時点では、[件名] と [スタイル] 領域以外は無視してかまいません。 「#」で始まる行はコメントなので無視され、「!」で始まる行は無視されます。は設定ディレクティブであり、次のセクションで説明します。ここでは、サンプルの件名とスタイルを、使用したいものに変更するだけです。
example-prompts.txtに必要な情報を入力したら、次のコマンドを実行するだけです。
python make_art.py example-prompts.txt
ハードウェアと設定に応じて、各イメージの作成には数秒から数時間 (古いハードウェアの場合) かかります。 Stable Diffusion を実行できる場合は、速度と画質の両方で最高の結果を得るために、これを強くお勧めします。
出力イメージは、デフォルトでは、 output/[現在の日付]-[プロンプトファイル名]/ディレクトリに作成されます。出力ディレクトリには、画像の作成に使用された主題とスタイルに応じて名前が付けられた各画像の JPG ファイルが含まれます。たとえば、被写体の 1 つとして「バイクに乗った猿」があり、スタイルとして「ピカソ作」がある場合、出力画像は、output/[現在の日付]-[プロンプト ファイル名]/a として作成されます。 -monkey-on-a-motorcycle-by-picasso.jpg (ファイル名は使用するプロセスによって多少異なります)。
CTRL+SHIFT+P を押すと、いつでも実行を一時停止できます (一時停止は、現在のイメージのレンダリングが終了すると有効になります)。一時停止を解除するには、 CTRL+SHIFT+P をもう一度押します。これをプライマリ コンピューターで実行していて、しばらくの間他の目的で GPU を使用する必要がある場合に便利です。プロンプト ファイルを変更した場合は、 CTRL+SHIFT+Rを押して再ロードすることもできます (現在のワーク キューは破棄され、プロンプト ファイルの内容から新しいワーク キューが構築されます)。キーボード入力は Windows でのみ機能することに注意してください。
各画像の作成に使用された設定は、デフォルトで各出力 JPG ファイルにメタデータとして保存されます。メタデータ情報を読み取るには、EXIF ユーティリティを使用するか、Windows エクスプローラーで画像ファイルを右クリックして [プロパティ] を選択し、[詳細] ペインをクリックします。 「コメント」フィールドには、イメージの作成に使用されるコマンドが保持されます。
プロンプト ファイルにディレクティブを含めて、それに続くすべてのプロンプトの設定を変更できます。これらの設定ディレクティブは、プロンプト ファイルの [件名] 領域内の独自の行に次の形式で配置することで指定します。
![変更する設定] = [新しい値]
[変更する設定]の場合、有効なディレクティブは次のとおりです。
いくつかの例:
!PROCESS = vqgan
これにより、現在の AI 画像生成プロセスが設定されます。有効なオプションは、VQGAN+CLIP の場合はvqgan 、CLIP ガイド付き拡散 (Disco Diffusion) の場合はdiffusion 、または安定した拡散の場合はsteadydiffです。
!CUDA_DEVICE = 0
これにより、GPU 0 が強制的に使用されます (デフォルト)。複数の GPU がある場合に便利です。一意の GPU ID を指定する独自のプロンプト ファイルを持つ複数のインスタンスを実行できます。
!WIDTH = 384
!HEIGHT = 384
これにより、出力画像サイズが 384x384 に設定されます。出力サイズが大きくなると、より多くの GPU VRAM が必要になります。安定拡散の場合、これらの値は 64 の倍数である必要があることに注意してください。
!TRANSFORMER = ffhq
これにより、VQGAN はデフォルト (vqgan_imagenet_f16_16384) の代わりに FFHQ トランスフォーマー (面に多少優れています) を使用するように指示されます。上記のセットアップ手順のステップ 7 に従って、ffhq トランスフォーマーと他のいくつかのトランスフォーマーへのリンクを入手できます。
ここで指定するものはすべて、チェックポイント ディレクトリに .ckpt および .yaml ファイルとして存在する必要があります。
!INPUT_IMAGE = samples/face-input.jpg
これにより、デフォルトのランダム ノイズの代わりに、samples/face-input.jpg (または指定した任意の画像) が開始画像として使用されます。良好な結果を得るには、入力画像は出力画像と同じアスペクト比である必要があります。安定拡散とともに使用する場合、出力画像サイズは入力画像と同じになることに注意してください (高さ/幅の設定は無視されます)。
!SEED = 42
これにより、入力シード値として、乱数 (デフォルト) の代わりに 42 が使用されます。再現性の向上に役立ちます。他のすべてのパラメーターが同一の場合、同じシード値を使用すると、複数の実行にわたって同一のイメージが生成されます。何も設定しないか、ランダムな値を使用するようにリセットするには -1 に設定します。
!INPUT_IMAGE =
これらの値を何も設定しないと、デフォルトに戻ります。したがって、この例では開始イメージは使用されません。
!STEPS = 50
安定拡散を使用する場合のステップ数 (反復と同様) を 50 (デフォルト) に設定します。値を大きくすると時間がかかり、画質が向上する可能性があります。 100 を超える値では、それより低い値と比べて顕著な違いが生じることはほとんどありません。
!SCALE = 7.5
安定拡散を使用する場合のガイダンス スケールを 7.5 (デフォルト) に設定します。値を大きくすると (ある程度、25 を超えると結果がおかしくなる可能性があります)、出力がプロンプトに忠実になります。
!SAMPLES = 1
安定拡散を使用する場合のサンプリング回数を 1 (デフォルト) に設定します。 1 を超える値を指定すると、プロンプトごとに複数の出力イメージが作成され、イメージあたりの時間がわずかに節約されます。これを増やすのに必要な GPU VRAM のコストはかかりません。
!STRENGTH = 0.75
開始イメージの影響を 0.75 (デフォルト) に設定します。入力画像で安定拡散を使用する場合にのみ関係します。有効な値は 0 ~ 1 で、1 は入力イメージの完全な破壊に対応し、0 は開始イメージを完全にそのまま残すことに対応します。 0.25 ~ 0.75 の値では、興味深い結果が得られる傾向があります。
!SD_LOW_MEMORY = no
Stable Diffusion を使用する場合、GPU メモリ要件がはるかに低いフォークされたリポジトリを使用しますか (はい/いいえ)?これを[はい]に設定すると、SD のメモリ最適化バージョンの使用に切り替わり、はるかに少ない GPU メモリで高解像度の画像を作成できるようになります (512x512 の画像に必要な VRAM は約 4GB のみです)。その代わりに、デフォルトの公式リポジトリに比べて推論が大幅に遅くなります。比較のために: RTX 3060 では、デフォルト設定の 512x512 画像の作成には約 12 秒かかります。 !SD_LOW_MEMORY = yesの場合、同じ画像には 1 分以上かかります。 8GB 未満の GPU VRAM を使用している場合、またはアップスケーリングする前に大きなイメージを作成して実験したい場合を除き、これをオフのままにすることをお勧めします。
!USE_UPSCALE = no
Stable Diffusion で作成された画像を自動的にアップスケールしますか (はい/いいえ)? ESRGAN/GFPGAN を使用します (以下の追加設定を参照)。
!UPSCALE_AMOUNT = 2
!USE_UPSCALE = yesの場合にスケールする量。デフォルトは 2.0x です。値を大きくすると、より多くの VRAM と時間が必要になります。
!UPSCALE_FACE_ENH = no
アップスケーリング時に GFPGAN (デフォルトの ESRGAN ではない) を使用するかどうか。 GFPGAN は顔に対して最良の結果を提供しますが、顔以外の被写体に対して使用するとわずかに悪い結果が得られる可能性があります。
!UPSCALE_KEEP_ORG = no
アップスケーリング時に元の未変更の画像を保持しますか (はい/いいえ)? no (デフォルト) に設定すると、元の画像が削除されます。 [はい] に設定すると、元の画像は画像出力フォルダーの/originalサブディレクトリに保存されます。
!REPEAT = no
プロンプト ファイル内のすべてのジョブが終了したら、ファイルの先頭から再開しますか (はい/いいえ)?デフォルトは no で、すべてのジョブが完了すると実行が終了します。
TODO: 設定例を終了し、使用上のヒント/例を追加し、random_art.py を文書化します。