Esta es la implementación oficial del artículo CommonScenes: Generación de escenas interiores 3D de sentido común con difusión de gráficos de escenas . Basado en el modelo de difusión, proponemos un método para generar una escena 3D completa a partir de gráficos de escena, abarcando su diseño y geometrías 3D de manera integral.
Sitio web | arxiv
Guangyao Zhai *, Evin Pınar Örnek *, Shun-Cheng Wu, Yan Di, Federico Tombari, Nassir Navab y Benjamin Busam. (*Contribución igual.)
NeuroIPS 2023
Descarga el código y ve a la carpeta.
clon de git https://github.com/ymxlzgy/commonscenescd escenas comunes
Lo hemos probado en Ubuntu 20.04 con Python 3.8, PyTorch 1.11.0, CUDA 11.3 y Pytorch3D.
conda crear -n commonscenes python=3.8conda activar commonscenespip instalar -r requisitos.txt pip instalar einops omegaconf tensorboardx open3d
Para instalar CLIP, siga este repositorio de OpenAI CLIP:
pip instalar ftfy regex tqdmpip instalar git+https://github.com/openai/CLIP.git
Configure el cálculo adicional de distancia de chaflán para su evaluación:
cd ./extensiónpython setup.py instalar
Descargue el conjunto de datos 3D-FRONT de su sitio oficial.
Preprocesar el conjunto de datos siguiendo ATISS.
Descargar 3D-FUTURO-SDF. Esto lo procesamos nosotros mismos en las mallas 3D-FUTURE usando herramientas en SDFusion.
Siga esta página para descargar SG-FRONT y acceder a más información.
Cree una carpeta llamada FRONT
y copie todos los archivos en ella.
La estructura debería ser similar a esta:
FRONT |--3D-FRONT |--3D-FRONT_preprocessed (by ATISS) |--threed_front.pkl (by ATISS) |--3D-FRONT-texture |--3D-FUTURE-model |--3D-FUTURE-scene |--3D-FUTURE-SDF |--All SG-FRONT files (.json and .txt)
Esencial: descargue el modelo VQ-VAE previamente entrenado desde aquí a la carpeta scripts/checkpoint
.
Opcional: proporcionamos dos modelos entrenados de CommonScenes disponibles aquí.
Para entrenar los modelos, ejecute:
cd scripts python train_3dfront.py --exp /media/ymxlzgy/Data/graphto3d_models/balancing/all --room_type livingroom --dataset /path/to/FRONT --residual True --network_type v2_full --with_SDF True --with_CLIP True --batchSize 4 --workers 4 --loadmodel False --nepoch 10000 --large False
--room_type
: habitaciones para entrenar, por ejemplo, sala, comedor, dormitorio y todo. Entrenamos a todas las salas juntas en la implementación.
--network_type
: la red que se va a entrenar. v1_box
es Graph-to-Box, v1_full
es Graph-to-3D (versión DeepSDF), v2_box
es la rama de diseño de CommonScenes y v2_full
es CommonScenes. (Nota: si desea entrenar v1_full
, también debe descargar mallas y códigos reconstruidos adicionales por DeepSDF desde aquí, y también copiarlos a FRONT
).
--with_SDF
: establecido en True
si entrena v2_full.
--with_CLIP
: establecido en True
si entrena v2_box o v2_full, y no se usa en otros casos.
--batch_size
: el tamaño del lote para el entrenamiento de la rama de diseño. ( Nota: el de la rama de forma está en v2_full.yaml
y v2_full_concat.yaml
. El significado de cada tamaño de lote se puede encontrar en el Material complementario G.1).
--large
: el valor predeterminado es False
, True
significa categorías más concretas.
Aquí proporcionamos tres ejemplos: Graph-to-3D (versión DeepSDF), Graph-to-Box, CommonScenes. La GPU recomendada es una única A100 para CommonScenes, aunque la 3090 también puede entrenar la red con un tamaño de lote menor en la rama de forma.
Para evaluar los modelos ejecute:
cd scripts python eval_3dfront.py --exp /media/ymxlzgy/Data/graphto3d_models/balancing/all --epoch 180 --visualize False --evaluate_diversity False --num_samples 5 --gen_shape False --no_stool True
--exp
: donde guardas los modelos.
--gen_shape
: establezca True
si desea que funcione la rama de forma basada en difusión.
--evaluate_diversity
: establezca True
si desea calcular la diversidad. Esto lleva un tiempo, por lo que está deshabilitado de forma predeterminada.
--num_samples
: el número de rondas de experimento, cuando se evalúa la diversidad.
Esta métrica tiene como objetivo evaluar la fidelidad a nivel de escena. Para evaluar FID/KID, primero debe descargar imágenes renderizadas gt de arriba hacia abajo para métodos de recuperación e imágenes renderizadas sdf para métodos generativos, o recopilar representaciones modificando y ejecutando collect_gt_sdf_images.py
. Tenga en cuenta que la bandera without_lamp
está configurada en True
en nuestro experimento.
Asegúrese de descargar todos los archivos y preprocesar el 3D-FRONT. Las representaciones de las escenas generadas se pueden obtener dentro de eval_3dfront.py
.
Después de obtener imágenes reales y representaciones de escenas generadas, ejecute compute_fid_scores_3dfront.py
.
Esta métrica tiene como objetivo evaluar la fidelidad a nivel de objeto. Siga la implementación en PointFlow. Para evaluar esto, necesita almacenar objeto por objeto en las escenas generadas, lo que se puede hacer en eval_3dfront.py
.
Después de obtener las mallas de objetos, ejecute compute_mmd_cov_1nn.py
para obtener los resultados.
Si encuentra útil este trabajo en su investigación, cite
@inproceedings{ zhai2023commonscenes, title={CommonScenes: Generating Commonsense 3D Indoor Scenes with Scene Graph Diffusion}, author={Zhai, Guangyao and {"O}rnek, Evin P{i}nar and Wu, Shun-Cheng and Di, Yan and Tombari, Federico and Navab, Nassir and Busam, Benjamin}, booktitle={Thirty-seventh Conference on Neural Information Processing Systems}, year={2023}, url={https://openreview.net/forum?id=1SF2tiopYJ} }
Este repositorio está basado en Graph-to-3D y SDFusion. Agradecemos a los autores por hacer que su código esté disponible.
Estudiantes cansados terminaron el oleoducto en días ocupados...