見出し画像

Deep Daze の使い方

以下の記事を参考にして書いてます。

lucidrains/deep-daze: Simple command line tool for text to image generation using OpenAI's CLIP and Siren (Implicit neural representation network)

1. Deep Daze

Deep Daze」は、OpenAIの「CLIP」と「Siren」を使用した、テキストから画像をの生成するシンプルなコマンドラインツールです。このテクニックを発見したのは(そして素晴らしい名前を思いついたこと)、Ryan Murdockの功績によるものです。

オリジナルのノートブック
簡略化されたノートブック

これには、NvidiaGPUが必要です。

2. インストール

$ pip install deep-daze

3. 使用例

$ imagine "a house in the forest"

十分なメモリがある場合は、--deeperフラグを追加することで品質を向上させることができます。

$ imagine "shattered plates on the ground" --deeper


・mist over green hills(緑の丘の上の霧)

画像3

・shattered plates on the grass(草の上の粉々になったプレート)

画像4

・cosmic love and attention(宇宙の愛とアテンション)

画像5

・a time traveler in the crowd(群衆の中のタイムトラベラー)

画像6

・life during the plague(ペスト中の生活)

画像8

・meditative peace in a sunlit forest(太陽に照らされた森の瞑想の平和)

画像7

4. 高度な使用例

真の深層学習の方法では、層が多いほど良い結果が得られます。 デフォルトは16ですが、リソースに応じて32に増やすことができます。

$ imagine "stranger in strange lands" --num-layers 32

5. パラメータ

【概要】
imagine TEXT <flags>

【引数】
TEXT
   (必須) 視覚化したい77文字未満のフレーズ。

【フラグ】
--learning_rate=LEARNING_RATE
   Default: 1e-05
   ニューラルネットの学習率。
--num_layers=NUM_LAYERS
   Default: 16
   サイレンニューラルネットで使用する隠れ層の数。
--batch_size=BATCH_SIZE
   Default: 4
   損失を計算する前にサイレンに渡す生成された画像の数。これを減らすと、メモリと精度が低下する可能性がある。
--gradient_accumulate_every=GRADIENT_ACCUMULATE_EVERY
   Default: 4
   各反復のnサンプルの加重損失を計算する。これを増やすと、バッチサイズを小さくして精度を上げることができる。
--epochs=EPOCHS
   Default: 20
   実行するエポックの数。
--iterations=ITERATIONS
   Default: 1050
   特定のエポックで損失を計算して逆伝播する回数。
--save_every=SAVE_EVERY
   Default: 100
   反復がこの数の倍数になるたびに画像を生成。
--image_width=IMAGE_WIDTH
   Default: 512
   画像の望ましい解像度。
--deeper=DEEPER
   Default: False
   32個の隠れ層を持つSirenニューラルネットを使用。
--overwrite=OVERWRITE
   Default: False
   同じ名前の既存の生成された画像を上書きするかどうか。
--save_progress=SAVE_PROGRESS
   Default: False
   Sirenの訓練が完了する前に生成された画像を保存するかどうか。
--seed=SEED
   Type: Optional[]
   Default: None
   決定論的実行に使用されるシード。
--open_folder=OPEN_FOLDER
   Default: True
   生成された画像を表示するフォルダを開くかどうか。
--save_date_time=SAVE_DATE_TIME
   Default: False
   タイムスタンプを前に付けてファイルを保存。 e.g. `%y%m%d-%H%M%S-my_phrase_here`
--start_image_path=START_IMAGE_PATH
   Default: None
   ジェネレータは、テキスト入力に向けて操作される前に、最初に開始画像で学習される。
--start_image_train_iters=START_IMAGE_TRAIN_ITERS
   Default: 50
   開始画像の初期学習のステップ数。
--theta_initial=THETA_INITIAL
   Default: 30.0
   色空間の頻度を表すハイパーパラメータ。 ネットワークの最初の層にのみ適用される。
--theta_hidden=THETA_INITIAL
   Default: 30.0
   色空間の頻度を表すハイパーパラメータ。 ネットワークの非表示レイヤーにのみ適用される。

6. Priming

Mario Klingemannによって最初に考案され共有された手法であり、テキストに向けて操作される前に、開始画像でジェネレーターネットワークをプライミングすることができます。

使用する画像へのパスと、オプションで初期学習ステップの数を指定するだけです。

$ imagine 'a clear night sky filled with stars' --start-image-path ./cloudy-night-sky.jpg

・Priming開始画像

画像1

・プロンプト「A pizza with green peppers」で学習

画像2

7. Python

Pythonで「Deep Daze」を利用するには、「deep_daze.Imagine」を使います。

from deep_daze import Imagine

imagine = Imagine(
    text = 'cosmic love and attention',
    num_layers = 24,
)
imagine()

・4回の反復ごとの進行状況の保存
画像をinsert_text_here.00001.png、insert_text_here.00002.png(total_iterations%save_every)の形式で保存します。

imagine = Imagine(
    text=text,
    save_every=4,
    save_progress=True
)

・各画像への現在のタイムスタンプの付加
タイムスタンプとシーケンス番号の両方を使用してファイルを作成します。

e.g. 210129-043928_328751_insert_text_here.00001.png, 210129-043928_512351_insert_text_here.00002.png, ...

imagine = Imagine(
    text=text,
    save_every=4,
    save_progress=True,
    save_date_time=True,
)

・GPUメモリ使用量多め
少なくとも16GBのVRANが使用可能な場合は、ある程度の余裕を持ってこれらの設定を実行できるはずです。

imagine = Imagine(
    text=text,
    num_layers=42,
    batch_size=64,
    gradient_accumulate_every=1,
)

・GPUメモリ使用量普通

imagine = Imagine(
    text=text,
    num_layers=24,
    batch_size=16,
    gradient_accumulate_every=2
)

・GPUメモリ使用量少なめ(4GB未満)
8GB VRAM未満のカードでこれを実行したい場合は、image_widthを下げることができます。

imagine = Imagine(
    text=text,
    image_width=256,
    num_layers=16,
    batch_size=1,
    gradient_accumulate_every=16 # Increase gradient_accumulate_every to correct for loss in low batch sizes
)

8. Deep Dazeのこれから

これは単なるティーザーです。 自然言語で、画像や音声など、何でも自由に生成できるようになります。 Holodeckは私たちの生涯のうちに現実のものになりつつあります。

この技術の推進に関心がある場合は、「DALL-E for Pytorch」または「DALL-E for Mesh Tensorflow」の作業に参加してください。

9. 代替案

BigSleep : CLIPとBigGANのジェネレーター



この記事が気に入ったらサポートをしてみませんか?