このリポジトリには、論文「InsertDiffusion: Identity Preserving Visualization of Objects through a Training-Free Diffusion Architecture」の公式実装が含まれています。
この実装では、次の 2 つの異なる実行モードがサポートされています。
さらに、この実装では、既存の画像または生成された画像を色付けするオプションが提供されます。すでにカラー化された画像を使用しない場合、これによりリアリズムが大幅に向上します。
さらに、新しい環境を最初から作成することも (背景置換モード)、既存のイメージを使用して適合させることもできます。
すべての機能はmain.py
CLI から利用でき、独自のプロジェクトに統合することもできます。 CLI またはコードを使用するには、トーチ、ピロー、パンダ、トランスフォーマー、ディフューザーを備えた環境が必要です。
新しく作成した背景に画像を挿入するには、次のコマンドを実行します。
python main.py --image "" --background_prompt ""
たとえば、次のようになります。
python main.py --image " ./test_images/bikes/166.png " --background_prompt " a bicycle centered in frame in munich, 8k, red gemini, 50mm, f2.8, cinematic "
プロンプトを直接提供する代わりに、必要な情報を提供することで自動プロンプト機能を使用できます。自転車の場合は、目的の場所、自転車のインデックス、データシートへのパスを指定する必要があります。車の場合は、希望する新しい場所、自動車メーカー、車種を入力する必要があります。製品の場合は、新しい場所と製品タイプのみが必要です。
その他のオプションと特定のバックグラウンドへの挿入については、以下の完全な CLI ドキュメントを参照してください。
CLI を使用する代わりに、この Python 関数を使用してプロシージャをコードに統合できます (ここでも、すべての依存関係がインストールされていることを確認し、utils モジュールをプロジェクトにコピーしてください)。
from utils import get_mask_from_image , sd_inpainting , sd_img2img , paste_image
def insert_diffusion ( image : Image , mask_threshold : int , prompt : str , negative_prompt : str , img2img_model : str , inpainting_model : str , img2img_strength : float , inpainting_steps : int , inpainting_guidance : float , img2img_guidance : float , background_image : Image = None , composition_strength : float = 1 ) -> Image :
mask = get_mask_from_image ( image , mask_threshold )
if background_image is not None :
image = paste_image ( image , background_image )
inpainted = sd_inpainting ( inpainting_model , image , mask , prompt , negative_prompt , inpainting_guidance , inpainting_steps , inpainting_strength = composition_strength )
result = sd_img2img ( img2img_model , inpainted , prompt , negative_prompt , img2img_strength , img2img_guidance )
return result
点群から Biked 画像を生成し、それらを背景に挿入する追加のメソッドを実装しました。しかし、この方法はうまく機能しないため、私たちの研究の中心ではありません。点群からの生成はIoan-Daniel Craciunによって実装され、 Jiajae Fanによって実装およびトレーニングされた DDPM/DDIM に基づいています。
点群からイメージを作成するには、CLI 呼び出しから--image
引数を削除します。ポイント モードでは、 --datasheet_path
を介してデータシート パスを指定する必要があります。したがって、最小限の CLI コマンドは次のようになります。
python main.py --point --datasheet_path "" --background_prompt ""
ポイント モードで自動プロンプトを使用することもできます。
点群からのバイクの生成をプロジェクトに統合するには、utils フォルダーをコピーし、次の関数を使用します。
from utils import get_mask_and_background
from utils import inpaint as bike_inpainting
def bike_diffusion ( parameter_csv_path : str , device : torch . device , ckpt_id : str = '29000' , mask_dilation : int = 5 , mask_fill_holes : bool = True , bike_idx : int = 0 , wheel_design_type : int = 0 , width : int = 256 , height : int = 256 ):
assert wheel_design_type == 0 or wheel_design_type == 1
mask , background = get_mask_and_background ( parameter_csv_path , bike_idx , wheel_design_type , width , height )
bike_img = bike_inpainting ( background , mask , device , 50 , ckpt_id , mask_dilation , mask_fill_holes )
return bike_img . convert ( 'RGB' )
この関数によって返された画像は、色付けまたは挿入に使用する準備ができています。
色の付いていないイメージを使用している場合は、前の CLI 呼び出しの 1 つに--colorize
を追加します。さらに、 --colorization_prompt
を介して色付けプロンプトを提供するか、 --color
を介して色を提供することで自動プロンプトを使用する必要があります。
CLI 呼び出しの例は次のとおりです。
python main.py --image " ./test_images/bike_outline/168.png " --colorize --datasheet_path " ./csv/df_parameters_final.csv " --place " beach at sunset " --color " purple " --bike_idx 5 "
あるいは、カラー化をプロジェクトに統合するには、utils モジュールをコピーして以下を使用します。
from utils import sd_colorization
def colorization ( image : Image , colorization_model : str , upscaling_model : str , colorization_prompt : str , colorization_negative_prompt : str , fill_holes : bool , dilation : int , strength : float , prompt_guidance : float ):
colorized = sd_colorization ( colorization_model , upscaling_model , image , colorization_prompt , negative_prompt = colorization_negative_prompt , fill_holes = fill_holes , dilation_iterations = dilation , colorization_strength = strength , prompt_guidance = prompt_guidance )
return colorized
注: CLI はまだ作成中のため、変更される可能性があります。
注: 該当する場合、デフォルト値は実験で決定されたパラメータを表します。ただし、特定の使用例によっては、異なる値が最適になる場合があります。
口論 | タイプ | 説明 |
---|---|---|
- 画像 | 弦 | 開始元の画像へのパス。 --points とは相互に排他的です |
--ポイント | ポイントが使用される場合、アルゴリズムは点群モードで実行され、最初に点群からバイクのアウトラインを生成します。 --image とは相互に排他的です。 | |
--mask_threshold | 整数 | 修復用、白い背景と色付きの前景を識別するためのしきい値 |
--background_prompt | 弦 | バックグラウンド生成のプロンプト |
--negative_prompt | 弦 | バックグラウンド生成の否定プロンプト |
--background_image | 弦 | 開始点として使用される背景画像への文字列。 --composition 強度が 1 より小さい値に設定されている場合にのみ関係します。 |
--組成強度 | フロート | 開始点の背景画像をどの程度変更するかを決定します。 --background_image が設定されている場合のみ使用されます。範囲は 0 ~ 1 |
--auto_bike_prompt | 自転車用のテンプレートを使用して設定プロンプトが自動的に作成される場合は、--place、--datasheet_path、および --bike_idx を設定する必要があります | |
--auto_car_prompt | 車のテンプレートを使用して設定プロンプトが自動的に作成される場合は、--place、--car_manufacturer、および --car_type を設定する必要があります | |
--auto_product | 設定されたプロンプトが製品のテンプレートを使用して自動的に作成される場合は、--place および --product_type を設定する必要があります | |
- 場所 | 弦 | オブジェクトが挿入される場所の説明。自動プロンプト テンプレートのいずれかが使用されている場合にのみ使用されます。 |
- 色 | 弦 | 自動プロンプトを使用している場合、自転車の色は何色ですか |
--datasheet_path | 弦 | 自転車に自動プロンプトを使用している場合、自転車タイプを検索するためのデータシートへのパス |
--bike_idx | 整数 | 自転車に自動プロンプトを使用している場合は、自転車タイプを検索するためにデータシートのインデックスを作成します |
--car_manufacturer | 弦 | 車に自動プロンプトを使用している場合は、車のメーカー (BMW など) |
--car_type | 弦 | 車に自動プロンプトを使用する場合、車のタイプ (SUV や X5 など) |
--製品タイプ | 弦 | 製品に自動プロンプトを使用する場合、製品のタイプ (ランプなど) |
--inpainting_model | 弦 | 背景生成にどのモデルを使用するか (ハグフェイス ID) |
--img2img_model | 弦 | 再拡散ステップにどのモデルを使用するか (ハグフェイス ID) |
--img2img_strength | フロート | 再拡散で元の画像のどれだけのノイズが発生するか |
--inpainting_steps | 整数 | 修復のために実行する拡散ステップの数 |
--inpainting_guidance | フロート | 修復にどの程度分類子を使用しないガイダンスを適用するか |
--img2img_guidance | フロート | 再拡散で分類子を使用しないガイダンスをどの程度適用するか |
--output_folder | 弦 | 出力画像を保存するフォルダーへのパス |
--色付け | 修復する前に画像をカラー化するかどうか | |
--colorization_model | 弦 | カラー化にどのモデルを使用するか (ハグフェイス ID) |
--upscaling_model | 弦 | アップスケーリングに使用するモデル、カラー化に必要なモデル (ハグフェイス ID) |
--colorization_prompt | 弦 | 色付けのプロンプト。datasheet_path と色が指定されている必要はありません。 |
--colorization_negative_prompt | 弦 | 色付けに対する否定的なプロンプト |
--do_not_fill_holes | カラー化マスクの穴埋めを切り替えます。カラー化の場合にのみ関係します。 | |
--拡張 | 整数 | カラー化のためにマスクをどの程度拡張するか。カラー化の場合にのみ関係します。 |
--colorization_strength | フロート | カラー化に適用する拡散の量。カラー化の場合にのみ関係します。 |
--colorization_prompt_guidance | フロート | カラー化中に分類子を使用しないガイダンスをどの程度適用するか。カラー化時にのみ関連します。 |
- 規模 | フロート | バイクをどの程度ダウンスケールまたはアップスケールするか。値が大きいほど、バイクがフレーム内で占有するスペースが大きくなります。デフォルトは 1 です。 |
--fraction_down | フロート | バイク (の中心) の相対 y 位置。値が大きいほど、バイクは画像の下端に近くなります。デフォルトは 0.5 (中心) |
--fraction_right | フロート | バイク (の中心) の相対 X 位置。値が大きいほど、バイクは画像の右端に近くなります。デフォルトは 0.5 (中心) |
--ckpt_id | 弦 | 点群からバイクのアウトラインを作成するために使用するチェックポイントの ID。ポイント モードでのみ関連します。 |
--bike_mask_dilation | 整数 | 点群から生成されたマスクをどの程度拡張するか。点モードでのみ関連します。 |
--do_not_fill_bike_holes | バイクマスクに穴埋めを適用するかどうか。ポイントモードでのみ関係します。 | |
--wheel_design | 整数 | バイクのアウトラインの生成にどのホイールのデザインを使用するか。現在は 0 と 1 のみが実装されており、ポイント モードでのみ関連します。 |
追加のスクリプトinteractive.py
、Human-in-the-Loop 方式で画像を対話的に生成するための実装を提供します。つまり、各ステップで 5 つのオプションが並行して生成され、ユーザーは最適なオプションを選択するように求められます。次に、選択した画像のみが次のステップで使用されます。
追加の CLI 引数はスクリプトでは受け入れられず、ユーザーはすべての決定を行うように求められます。
対話モードで実行するには、次のコマンドを実行します。
python interactive.py
使用した評価コードまたは論文は./evaluation
にあります。定量的メトリクスは、次の CLI コマンドを使用して計算されたことに注意してください。
python evaluate.py --exp_name "" --gen_file_path "" --ref_file_path "" --masks_path ""
人間による評価メトリクスと推論統計は、提供されたノートブックを使用して計算されました。
私たちの研究が役に立ち、あなたの研究やプロジェクトに使用したい場合は、次のように論文を引用してください。
@misc { 2407.10592 ,
Author = { Phillip Mueller and Jannik Wiese and Ioan Craciun and Lars Mikelsons } ,
Title = { InsertDiffusion: Identity Preserving Visualization of Objects through a Training-Free Diffusion Architecture } ,
Year = { 2024 } ,
Eprint = { arXiv:2407.10592 } ,
}