ウェブサイト検索

ストーリー拡散


導入

拡散モデリングの最も人気のある最近のアプリケーションの 1 つは StoryDiffusion です。このプロジェクトは、視覚的な物語を促進するためにキャラクターやスタイルの特徴を保存しながら、拡散モデルのテキストから画像への生成を連続的に連鎖させる際に、ユーザーがより詳細に制御できるようにすることを目的としています。この方法は非常に多用途でプラグアンドプレイであるため、PhotoMaker と組み合わせて最終出力の忠実度をさらに高めることができます。

StoryDiffusion は 3 週間前のオープンソース リリース以来、GitHub ですでに 4900 個を超えるスターを獲得しており、このプロジェクトは他の技術やモデルとのさらなる適応に大きな期待を示しています。このチュートリアルでは、強力な NVIDIA A100 GPU で StoryDiffusion を実行して、新しいコミックを迅速に生成する方法を説明します。コードデモ自体に入る前に、基礎となるテクノロジーの簡単な概要から始めます。

前提条件

  • システム要件: 効率的な処理のための GPU (NVIDIA A100 または H100 など) を搭載したマシン。
  • 依存関係: Python (>=3.8)、PyTorch、および関連ライブラリ (Hugging Face Transformers、Diffusers など) をインストールします。
  • 入力準備: 目的の画像を説明する明確なテキスト プロンプト。

StoryDiffusion はどのように機能しますか?

(ソース)

StoryDiffusion は本質的に、共有機能を備えた接続された画像を作成するためのパイプラインです。これは、論文著者の新しい注意メカニズムである一貫した自己注意を、接続された一連のプロンプト全体に巧みに適用することで実現されています。彼らの「一貫したセルフアテンション」メソッドは、画像のバッチ全体でセルフアテンションを実行し、異なる画像の特徴間の相互作用を促進します。このタイプのインタラクションにより、生成プロセス中にモデルのキャラクター、顔、服装の収束が促進されます。 " (ソース)。

このメカニズムがコードでどのように機能するかを示す論文の例を以下に示します。

def ConsistentSelfAttention(images_features, sampling_rate, tile_size):
"""
images_tokens: [B, C, N]
sampling_rate: Float (0-1)
tile_size: Int
"""
  output = zeros(B, N, C), count = zeros(B, N, C), W = tile_size
  for t in range(0, N - tile_size + 1):
  # Use tile to override out of GPU memory
    tile_features = images_tokens[t:t + W, :, :]
    reshape_featrue = tile_feature.reshape(1, W*N, C).repeat(W, 1, 1)
    sampled_tokens = RandSample(reshape_featrue, rate=sampling_rate, dim=1)
    # Concat the tokens from other images with the original tokens
    token_KV = concat([sampled_tokens, tile_features], dim=1)
    token_Q = tile_features
    # perform attention calculation:
    X_q, X_k, X_v = Linear_q(token_Q), Linear_k(token_KV),Linear_v(token_KV)
    output[t:t+w, :, :] += Attention(X_q, X_k, X_v)
    count[t:t+w, :, :] += 1
output = output/count
return output

実際には、これにより、生成された出力全体にわたって画像の粗い特徴から細かい特徴までを保持するトレーニング不要の方法論が可能になります。これにより、元のテキスト プロンプトを忠実に保ちながら、一連の出力画像をそのバッチの一般的な特徴に準拠させることができます。

彼らは、彼らの技術だけで、実際に IP-Adapter や Photo Maker などの SOTA 画像一貫性技術よりも優れたパフォーマンスを発揮することを発見しました。さらに、トレーニング不要の方法論により、ユーザーは Photo Maker などの追加テクニックを使用して、合成画像をさらに詳細に制御することもできます。Photo Maker は、リアルな人間の被写体を対象としたデモで使用可能なパイプラインを作成するための重要な部分です。 。

ストーリー拡散デモ

マシンが実行されたら、ターミナル ウィンドウを開いて、次のコード スニペットを貼り付けます。これにより、すべてのセットアップが行われ、モデルのデモが起動します。

git-lfs clone https://huggingface.co/spaces/YupengZhou/StoryDiffusion
cd StoryDiffusion
pip install -r requirements.txt
python app.py --share

パブリック Gradio URL をクリックしてアプリケーションに進みます。新しいウィンドウで開きます。

ここから、ストーリーの生成を開始できます。デモの上部と右側に説明が記載されており、下部には使用できる追加の例が示されています。世代を正しく理解するために、これらを注意深く読んでください。

まず、モデルを選択する必要があります。これらは、ユーザーに Unstable Diffusion と RealVision 4.0 を提供します。人間のリアリズムが望ましい結果である場合は RealVision を使用し、その他のほとんどすべての状況では Unstable Diffusion を使用することをお勧めします。

参照画像を使用する場合は、[参照画像を使用する] ボタンを切り替えて、ここで参照画像を送信できます。これによりモーダルがリロードされ、画像をアップロードできるようになります。出力に使用したい被写体の特徴が明確に描写されているさまざまな画像をアップロードします。 10 ~ 20 枚の顔写真/ポートレート画像と、さまざまな角度と被写体からの距離でさらに 10 ~ 20 枚の写真を推奨します。これにより、モデルはさまざまな位置で被写体を最大限に理解できるようになります。次に、キャラクターのテキスト説明を追加する必要があります。参照画像を含めた場合は、Photo Maker がより適切に機能できるように IMG を追加する必要があります。

次に、テキストの説明を入力します。このため、実際に「ストーリー」を書き出すのではなく、代わりに、漫画の各フレームで被写体が何をしているかを説明する方が効果的です。たとえば、次のように使用できます。

A mad scientist mixes chemicals in his lab
a mad scientist is thrown back from an explosion of purple gas
a mad scientist with glowing eyes screams in pain
a mad scientist with glowing eyes and superpowers fires lasers from his eyes

スタイル テンプレートの場合、これは最終出力に大きく影響します。特定の目的のスタイルがドロップダウンにリストされていない限り、「スタイルなし」を使用することをお勧めします。

最後に、ハイパーパラメータの調整に移ります。すべてをデフォルト設定のままにすることをお勧めします。 3 つの例外は、サイズ寸法、ガイダンス スケール、スタイルの強さです。コミックの目的の形状に合わせて出力サイズ (高さと幅) を調整することが必要な場合があります。ガイダンス スケールの調整は、テキスト プロンプトが出力を制御する強さに影響するため、ガイダンス スケールを上げるとテキストの忠実度が高まりますが、アーティファクトやその他の安定拡散の癖が発生する危険性もあります。最後に、スタイルの強さは、参照画像の強さの重要性に影響します。

これらをすべてまとめると、次の画像のようになります。プロンプトの説明にもう少し趣向を加えていることに注意してください。

最後に

全体として、このモデルの機能には非常に感銘を受けています。実際にユーザーからストーリーを受け取り、実行可能なコミックに変えるまでには長い道のりがありますが、このパイプラインは目に見える前進を示しています。私たちは、この新しい技術のさらに有用な応用となるはずなので、Consistent Self-Attendee を使用したテキストからビデオへのコードを今後数か月以内にリリースできることを楽しみにしています。