「3D 形状完成のための生成モデル」の論文を参照してください。
リポジトリには、3D 形状を完成させるための生成モデルからのトレーニングとサンプリングのためのコードが含まれています。このリポジトリに実装されているモデルは、論文「DiffComplete: Diffusion-based Generative 3D Shape Completion」で提案されている拡散モデルに基づいています。
クレジット:
ベースは改善された拡散から取得されます。
PatchComplete から取得した評価部分。
事前トレーニングされたモデルはこのリンクからダウンロードできます。
virtualenv -p python3.8 venv
source venv/bin/activate
export PYTHONPATH= " ${PYTHONPATH} : ${pwd} "
pip install -r requirements.txt
注:コードを実行するにはCUDAが必要です (評価部分のため)。
形状完成スクリプト用のデータセットを生成するには、 dataset_hole.py
を使用します。論文内と同じモデルを使用するには、 --filter_path
オプションを使用して、特定のデータセットに使用するモデルのリストを含むファイルへのパスを指定します。ファイルは ./datasets/txt ディレクトリにあります。
利用可能な引数はすべて、 python ./dataset_hole.py --help
を実行すると見つかります。
データソース:
形状完成データセットを生成するには、次のコマンドを実行します。
cd dataset_processing
オブジャバース家具
python ./dataset_hole.py --output datasets/objaverse-furniture --tag_names chair lamp bathtub chandelier bench bed table sofa toilet
対向車両
python ./dataset_hole.py --output datasets/objaverse-vehicles --category_names cars-vehicles --tag_names car truck bus airplane
目に見える動物
python ./dataset_hole.py --output datasets/objaverse-animals --category_names animals-pets --tag_names cat dog
シェイプネット
python ./dataset_hole.py --dataset shapenet --source SHAPENET_DIR_PATH --output datasets/shapenet
モデルネット40
python ./dataset_hole.py --dataset modelnet --source MODELNET40_DIR_PATH --output datasets/modelnet40
トレーニングに使用される超解像度データセットは、トレーニングおよび検証データセットに対して形状完成モデルを実行して予測形状を取得することによって作成され、それが超解像度モデルの入力として使用されます。
モデルをトレーニングするには、スクリプトtrain.py
が使用されます。利用可能な引数はすべて、 python ./train.py --help
実行すると見つかります。
BaseCompleteモデルをトレーニングするには、次のコマンドを実行します。
python ./scripts/train.py --batch_size 32
--data_path " ./datasets/objaverse-furniture/32/ "
--train_file_path " ../datasets/objaverse-furniture/train.txt "
--val_file_path " ../datasets/objaverse-furniture/val.txt "
--dataset_name complete
ROI マスクを使用してトレーニングするには、 --use_roi = True
オプションを追加します。
低解像度処理モデルをトレーニングするには、次のコマンドを実行します。
python ./scripts/train.py --batch_size 32
... # data options
--in_scale_factor 1
--dataset_name complete_32_64
スーパーモデルをトレーニングするには、次のコマンドを実行します。
python ./scripts/train.py --batch_size 32
--data_path " ./datasets/objaverse-furniture-sr/ "
--val_data_path " ./datasets/objaverse-furniture-sr-val/ "
--super_res True
--dataset_name sr
メッシュ モデルから 1 つの形状をサンプリングするには、次のコマンドを実行します。
python ./scripts/sample.py --model_path MODEL_PATH
--sample_path SAMPLE_PATH # Condition
--input_mesh True
--condition_size 32 # Expected condition size
--output_size 32 # Expected output size
または .npy ファイルを入力として使用します。
python ./scripts/sample.py --model_path MODEL_PATH
--sample_path SAMPLE_PATH # Condition
--input_mesh False
--output_size 32 # Expected output size
データセット全体を評価するには、次のコマンドを実行します。
python ./scripts/evaluate_dataset.py
--data_path " ./datasets/objaverse-furniture/32 "
--file_path " ./datasets/objaverse-furniture/test.txt "
--model_path MODEL_PATH
TESTデータセットの評価:
メトリック | BaseComplete | BaseComplete + ROI マスク |
---|---|---|
CD | 3.53 | 2.86 |
IoU | 81.62 | 84.77 |
L1 | 0.0264 | 0.0187 |
注: CD と IoU は 100 でスケールされます。CD と L1 には低い値の方が適しており、IoU には高い値の方が適しています。
状態 | 予測 | グラウンドトゥルース |
---|---|---|