paint-brush
独自の A.I. を作成する潜在拡散による画像生成@lanolinoil
3,845 測定値
3,845 測定値

独自の A.I. を作成する潜在拡散による画像生成

Lanolinoil9m2022/08/16
Read on Terminal Reader
Read this story w/o Javascript

長すぎる; 読むには

独自の text to image プロンプトを CUDA、大量のディスク容量、および非常に大量のメモリで実行します。これを最後まで機能させるには、CUDA 対応カードを備えた Linux システムが必要です。潜在拡散で可能な画像生成技術は 2 つあります。セットアップする txt-2img と txt2-img モデルの両方をインストールして確認します。 RAD モデルは、画像のデータベースを使用し、構成可能な参照にそれをデニスおよびアップスケールします。これは、一般的な目的としてはあまり良くないが、特定のトレーニングセットで使用できることを意味しているようです.

Companies Mentioned

Mention Thumbnail
Mention Thumbnail
featured image - 独自の A.I. を作成する潜在拡散による画像生成
Lanolinoil HackerNoon profile picture

DALL-E自作

この投稿では、独自の AI 画像ジェネレーターを実行してセットアップする方法を見ていきます。これを最後まで機能させるには、CUDA 対応カードを備えた Linux システムが必要です。基本的な txt-2img スクリプトが Windows で動作するようになりました。残念ながら、7 月にリリースされた検索拡張拡散モデルでは、openimages データセットのインデックスを作成するためにscannが必要です。これは Linux でのみ利用できます。 WSLは私にとってはうまくいきました。


犬ライオン - rdm モデル

犬ライオン - rdm モデル

犬ライオン - rdm モデル

犬ライオン - rdm モデル

必要なものを大まかに以下に示します。

  • Linux (WSL は問題ありません)
  • 11.3 CUDA グラフィックス
  • = 32GB の RAM

  • 50GB のディスク容量 (openimage なしで ~30GB)
  • 3xxx シリーズのカード (ここでは推測です。これはすべて 3090 FE で行われています)

潜在拡散

AI サブレディットをブラウジングしているときに、潜在拡散レポをランダムに見つけました。いくつかの投稿で言及されていましたが、それが何であるかわからなかったので、グーグルで調べました。


私はコンピューター科学者でも数学者でもありませんし、ここで何が起こっているのかを本当に理解するために必要とされるものでもありません。新しい RAD モデルに関する論文は理解できて興味深いものですが、それ以上の調査はまだ行っていません。

画像-20220807154208076

テキストから画像への変換 vs. RAD

潜在拡散で可能な 2 つの画像生成技術があります。両方をインストールして見ていきます。


最初にセットアップする txt2-img モデルは、オンラインの他の画像生成ツールで慣れているものだと思います。これにより、超低解像度の画像クリップが適切なプロンプト マッチであると判断され、ノイズが除去されてアップスケールされます。


RAD モデルは、構成可能な画像のデータベースを参照として使用し、慣れ親しんだ方法で拡散を行います。これは、汎用ジェネレーターとしてはあまり良くないことを意味しているようですが、実行可能に作成できる特定のトレーニング セットで使用できます。私は将来これを試してみます。


RAD は、かなり印象的な 768X768 の画像も生成します。

ビーチで巨大なマスクメロン

ビーチで巨大なマスクメロン


インストール手順

テキストから画像へ

  • CUDA 11.3がインストールされていて、 condaがシェルで動作することを確認してください。ここでコンダを入手できます

  • Pytorch を今すぐ (再) インストールして、後で依存関係の地獄に陥らないようにします。私はpipでこれを行いましたが、conda も機能する可能性があります。

  • 空き容量の多いドライブにレポをクローンします

  • レポジトリにcdして、次を実行します。

     conda env create -f environment.yaml conda activate ldm

    これにより、初期環境がセットアップされます。後で Pytorch でエラーが発生し、再インストールする必要がある場合は、environment.yaml に戻り、正しいパッケージ バージョンを使用して再インストールします。

  • モデルをダウンロードすると、トーチの依存関係がすべて正しく設定されている限り、準備完了です。

 mkdir -p models/ldm/text2img-large/ wget -O models/ldm/text2img-large/model.ckpt https://ommer-lab.com/files/latent-diffusion/nitro/txt2img-f8-large/model.ckpt

次を使用して画像をサンプリングできるはずです。

 python scripts/txt2img.py --prompt "my cool image"

README で設定できるオプションを確認してください。


この bash スクリプトを使用すると、シェルからすべてを簡単に実行できます。これを~/.bashrcファイルに含めて、シェルを再度開くことができます。必要に応じて 3 つのパスを変更してください。 PLMS については後で説明します。


 function txt2img() { if [ $# -eq 0 ]; then echo "Usage: diffuse '[prompt]' [--plms]" exit 1 fi cd /mnt/c/diffusion/latent-diffusion; conda activate ldm; if [ $2 = '--plms' ]; then python scripts/txt2img.py --prompt $1 --outdir '/mnt/g/My Drive/AI Image Tests/text2img' --plms --n_iter 4 --ddim_eta 0.0 else python scripts/txt2img.py --prompt $1 --outdir '/mnt/g/My Drive/AI Image Tests/text2img' --n_iter 4 --ddim_eta 0.0 fi }


画像はデフォルトで 512X512 です。 This Jupiter Notebookを使用して画像を拡大すると、かなり良い結果が得られます。

トラブルシューティング

  • コマンドの実行中に CUDA メモリ エラーが発生した場合は、バッチ サイズを小さくしてみてください。 htopを使用して、メモリ使用量のトラブルシューティング/表示を行います。
  • WSL を使用している場合は、すべての RAM が Linux で使用できることを確認してください。
  • torch 関連のエラーが発生した場合は、おそらく Pytorch を再インストールする必要があります。これにより、パッケージで他の問題が発生する可能性があります。 environment.yaml を確認し、 pipおよび/またはcondaを使用して正しいパッケージ バージョンを手動でインストールします (私は両方を実行しましたが、どちらがすべてを機能させたかはわかりません)。

画像-20220807155754576

画像-20220807155807229


RDM

RDM の詳細については、こちらを参照してください。前に述べたように、それは基本的に、画像のデータベースとクリップの説明を既存の拡散プロセスと組み合わせたものです。この部分は、実行に時間がかかります。


このモデルは、特に openimages トレーニングを使用する場合、実際のものを再現するのに最適であり、(まだ) あまり良くないように見え、拡散モデルから慣れ親しんだ奇妙な画像を作成することに注意してください。


  • Text-to-Image モデルを最初に機能させる

  • 新しいパッケージをインストールし、トレーニング モデルをダウンロードします。

     pip install transformers==4.19.2 scann kornia==0.6.4 torchmetrics==0.6.0 pip install git+https://github.com/arogozhnikov/einops.git mkdir -p models/rdm/rdm768x768/ wget -O models/rdm/rdm768x768/model.ckpt https://ommer-lab.com/files/rdm/model.ckpt
  • これまでのところすべてが機能していることをテストします

    python scripts/knn2img.py --prompt "I'm a computer"
  • すべてがうまくいけば、シェルに成功のテキストが表示されるはずです。ここで、すべての画像インデックス/モデルをダウンロードする必要があります。 openimages zip は 11GB です。 ArtBench データはかなり小さいです。

     mkdir -p data/rdm/retrieval_databases wget -O data/rdm/retrieval_databases/artbench.zip https://ommer-lab.com/files/rdm/artbench_databases.zip wget -O data/rdm/retrieval_databases/openimages.zip https://ommer-lab.com/files/rdm/openimages_database.zip unzip data/rdm/retrieval_databases/artbench.zip -d data/rdm/retrieval_databases/ unzip data/rdm/retrieval_databases/openimages.zip -d data/rdm/retrieval_databases/ mkdir -p data/rdm/searchers wget -O data/rdm/searchers/artbench.zip https://ommer-lab.com/files/rdm/artbench_searchers.zip unzip data/rdm/searchers/artbench.zip -d data/rdm/searchers


これで Artbench モデルを使用する準備が整いました (私の限られたテストではかなりうまく機能します) が、実際に必要なのは大規模な openimages モデルを参照として使用することです。データをダウンロードしましたが、インデックスを作成する必要があります。


Artbench データベースをテストする場合は、実行します。

 python scripts/knn2img.py --prompt "A blue pig" --use_neighbors --knn 20 

画像-20220807155912575

画像-20220807155927854


Openimages インデックス

スーパー コンピューターを持っていない限り、Python マルチプロセッシングのひどいメモリ管理 (私が知る限り) により、レポからスクリプトで解凍した 4 つのファイルを使用してインデックスを作成することができなくなります。私が試した他のすべてのプロセスは、メモリが不足していました。


幸いなことに、必要なのはファイルを連結することだけです。必要に応じて、古いパーツ ファイルを後で削除できます。また、パーツ ファイルを openimages フォルダーから移動する必要があります。

 cd data/rdm/retrieval_databases/openimages/ cat 2000000x768_part1.npz 2000000x768_part2.npz 2000000x768_part3.npz 2000000x768_part4.npz > 2000000x768.npz mv 2000000x768_* ~/temp cd ../../../../

これでトレーニング スクリプトを実行しても、メモリ不足になることはありません。これは、トレーニング スクリプトのマルチ ファイル機能に問題があると思います。

 python scripts/train_searcher.py
  • GPU メモリが不足しないように、 scripts/knn2img.pyのバッチ サイズを変更する必要があります。 1 に下げる必要があるかもしれませんが、3090 では 2 に設定できました。

  • scripts/knn2img.pyをエディターで開く

  • 243 行目に移動するか、「n_samples」を見つけます

  • デフォルト値を 1 または 2 に変更して保存します

  • コマンドラインパラメーターを使用してこれを行うこともできますが、私にはうまくいかないので、デフォルト値を変更したいと思いました.将来リポジトリを更新すると、これは上書きされる可能性があることに注意してください。


これで、openimages データベースを使用して RDM イメージを生成できます。

 python scripts/knn2img.py --prompt "A blue pig" --database openimages --use_neighbors --knn 20


これを便利に実行するための~/.bashrcスクリプトを次に示します。ここでも、必要に応じて 3 つのパスを変更してください。

 function diffuse() { if [ $# -eq 0 ]; then echo "Usage: diffuse '[prompt]' [--plms]" exit 1 fi cd /mnt/c/diffusion/latent-diffusion; conda activate ldm; if [ $2 = '--plms' ]; then python scripts/knn2img.py --database openimages --prompt $1 --use_neighbors --outdir '/mnt/g/My Drive/AI Image Tests/RDM' --knn 20 --plms else python scripts/knn2img.py --database openimages --prompt $1 --use_neighbors --outdir '/mnt/g/My Drive/AI Image Tests/RDM' --knn 20 fi }

スピードアップ

ファイル (この場合はprompts.txt ) を作成し、次のように–from-fileパラメーターを使用してスクリプトを指定することにより、バッチでプロンプトを実行することもできます。

 python scripts/knn2img.py --database openimages --from-file ./prompts.txt --use_neighbors --outdir '/mnt/g/My Drive/AI Image Tests/RDM' --knn 20

サンプルprompts.txt

 prompt 1 prompt 2 prompt 3


モデルは一度しかロードされないため、多くのクエリを実行している場合、これにより多くの時間を節約できます。テキストから画像へのモデルには、このオプションがありません。

砂漠のスポーツカー

砂漠のスポーツカー

砂漠のスポーツカー


初期テスト、および PLMS

以下は、PLMS をオンおよびオフにした両方のモデルの初期結果です。 PLMS は物事をより速く実行するはずです。今のところ、速度の増加を測定することはしませんが、画質/結果を主観的に見ていきます.

私のシステムでは、RDM モデルは一度に 2 枚の写真しか作成しないため、そのモデルのグリッドの代わりに両方の写真を含めました。

今後はほぼ確実に、より具体的なテストを行う予定であり、これらのモデルは今後の比較記事に含まれる予定です。


丘の上の木の家、風景写真

テキストから画像へ

プラムなし

プラム付き

画像-20220807150052836

画像-20220807153545252


RDM

プラムなし

プラム付き

画像-20220807145854952

画像-20220807145920778

画像-20220807145911367

画像-20220807145931866


紫色の一時停止の標識


テキストから画像へ

プラムなし

プラム付き

画像-20220807154729984

画像-20220807153711466

RDM

プラムなし

プラム付き

画像-20220807150500598

画像-20220807153000850

画像-20220807151421393

画像-20220807153013778


キツネの巣窟、デジタル アート

テキストから画像へ

プラムなし

プラム付き

画像-20220807155228088

画像-20220807155634227


RDM

プラムなし

プラム付き

画像-20220807151441359

画像-20220807152859265

画像-20220807152235267

画像-20220807152911615


ビッグゲームでの勝利、受賞歴のある写真

テキストから画像へ

プラムなし

プラム付き

画像-20220807160007336

画像-20220807160228471

RDM

プラムなし

プラム付き

画像-20220807151456027

画像-20220807152928304

画像-20220807152216729

画像-20220807152940229


砂丘を走るスポーツカー

テキストから画像へ

プラムなし

プラム付き

画像-20220807160557241

画像-20220807160838768

RDM

プラムなし

プラム付き

画像-20220807151401781

画像-20220807152825508

画像-20220807152200386

画像-20220807152839511


独自の画像ジェネレーターを呼び出す

クレジットや毎月の制限はありません。純粋な AI 画像を自分で生成するだけです。いくつかのチューニング設定を見つけて、独自の画像トレーニング データベースを作成したら、これについてはまた話します。


うまくいけば、いくつかのチューニングと新しいリリース/モデルで、これが DALL-E の WOW ファクターに近づくでしょう。

赤いマントのパンダ


ここにも掲載されています。