Consulte el artículo MODELOS GENERATIVOS PARA COMPLETAR FORMAS 3D.
El repositorio contiene código para entrenamiento y muestreo de un modelo generativo para completar formas 3D. El modelo implementado en este repositorio se basa en el modelo de difusión propuesto en el artículo DiffComplete: Diffusion-based Generative 3D Shape Completion.
Créditos :
base tomada de difusión mejorada.
parte de evaluación tomada de PatchComplete.
Los modelos previamente entrenados se pueden descargar desde este enlace.
virtualenv -p python3.8 venv
source venv/bin/activate
export PYTHONPATH= " ${PYTHONPATH} : ${pwd} "
pip install -r requirements.txt
Nota: Se requiere CUDA para ejecutar el código (debido a la parte de evaluación).
Para generar el conjunto de datos para completar la forma, se utiliza el script dataset_hole.py
. Para utilizar el mismo modelo que en el documento, utilice la opción --filter_path
para especificar la ruta al archivo con la lista de modelos que se utilizarán para un conjunto de datos determinado. Los archivos se encuentran en el directorio ./datasets/txt.
Todos los argumentos disponibles se pueden encontrar ejecutando python ./dataset_hole.py --help
.
Fuentes de datos:
Para generar un conjunto de datos de finalización de forma, ejecute el siguiente comando:
cd dataset_processing
Muebles Objaverse
python ./dataset_hole.py --output datasets/objaverse-furniture --tag_names chair lamp bathtub chandelier bench bed table sofa toilet
Vehículos objaversos
python ./dataset_hole.py --output datasets/objaverse-vehicles --category_names cars-vehicles --tag_names car truck bus airplane
Animales objaversos
python ./dataset_hole.py --output datasets/objaverse-animals --category_names animals-pets --tag_names cat dog
ShapeNet
python ./dataset_hole.py --dataset shapenet --source SHAPENET_DIR_PATH --output datasets/shapenet
ModeloNet40
python ./dataset_hole.py --dataset modelnet --source MODELNET40_DIR_PATH --output datasets/modelnet40
El conjunto de datos de súper resolución utilizado para el entrenamiento se creó ejecutando el modelo de finalización de formas sobre el conjunto de datos de entrenamiento y validación para obtener las formas predichas, que se usaron como entrada para el modelo de súper resolución.
Para entrenar el modelo se utiliza el script train.py
. Todos los argumentos disponibles se pueden encontrar ejecutando python ./train.py --help
.
Para entrenar el modelo BaseComplete ejecute el siguiente comando:
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
para entrenar con máscara ROI agregue la opción --use_roi = True
.
Para entrenar el modelo de procesamiento de baja resolución, ejecute el siguiente comando:
python ./scripts/train.py --batch_size 32
... # data options
--in_scale_factor 1
--dataset_name complete_32_64
Para entrenar el modelo superes ejecute el siguiente comando:
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
Para muestrear una forma del modelo de malla, ejecute el siguiente comando:
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
o usando el archivo .npy como entrada:
python ./scripts/sample.py --model_path MODEL_PATH
--sample_path SAMPLE_PATH # Condition
--input_mesh False
--output_size 32 # Expected output size
Para evaluar todo el conjunto de datos, ejecute el siguiente comando:
python ./scripts/evaluate_dataset.py
--data_path " ./datasets/objaverse-furniture/32 "
--file_path " ./datasets/objaverse-furniture/test.txt "
--model_path MODEL_PATH
Evaluación en el conjunto de datos TEST :
Métrico | Base completa | BaseCompleta + máscara ROI |
---|---|---|
CD | 3.53 | 2,86 |
pagaré | 81,62 | 84,77 |
L1 | 0.0264 | 0.0187 |
Nota: CD y IoU están escalados en 100. Los valores más bajos son mejores para CD y L1, mientras que los valores más altos son mejores para IoU.
Condición | Predicción | Verdad fundamental |
---|---|---|