>_ DevTrendsfr

Langue

Accueil

Langages

Sections

Frontend Backend Mobile DevOps AI / ML GameDev Blockchain Embarqué Sécurité
Python

Comment transformer des photos de pièces en maillages 3D propres avec textures, sans désordre ni trous

Si vous avez essayé de reconstruire des intérieurs avec une photogrammétrie classique ou via NeRF et Gaussian Splatting, vous connaissez leurs points faibles. La photogrammétrie échoue régulièrement sur les murs blancs et les tables brillantes, produisant des trous dans le maillage. Les Gaussiens offrent une belle image dans la vue, mais extraire un maillage polygonal correct avec des matériaux PBR pour Unreal Engine ou Blender reste douloureusement difficile.

Des chercheurs de l'Université technique de Munich (TUM) et Huawei ont publié GenRecon, un projet qui essaie de résoudre le problème différemment. Ils ont combiné des modèles 3D génératifs avec une reconstruction de scène.

GenRecon Teaser

L'idée

Au lieu de construire la géométrie à partir de zéro en se basant sur la correspondance de pixels, les auteurs ont utilisé le modèle génératif TRELLIS de Microsoft.2. Alone, TRELLIS peut générer des objets 3D isolés de haute qualité à partir d'images. Mais vous ne pouvez pas l'appliquer directement à une pièce entière : la résolution et le contexte ne sont pas suffisants.

GenRecon divise l'espace de la pièce en blocs spatiaux chevauchants (cubes). Pour chaque bloc, le réseau projette les caractéristiques des images de la caméra directement dans l'espace 3D et les introduit dans un pipeline de diffusion génératif.

Le modèle sait à quoi ressemblent généralement les chaises, les canapés, les murs et les armoires. Donc, dans les endroits où les photos montrent des reflets ou des angles manquants, le générateur reconstruit soigneusement la géométrie et les matériaux corrects. Dans les tests des auteurs, la précision géométrique s'est améliorée de 16% par rapport aux méthodes standard.

Comment fonctionne le pipeline

Le processus de génération est divisé en trois étapes :

  1. Structure clairsemée (SS). Le modèle détermine la structure grossière globale et l'occupation des voxels dans l'espace des blocs.
  2. Forme SLat. Le générateur affine la géométrie de la surface lisse grâce à des représentations latentes (Structured Latents).
  3. Texture SLat. Les textures PBR sont appliquées à la géométrie, en tenant compte de l'éclairage et des photos originales.

Après cela, tous les blocs sont assemblés et un script séparé « bake » le résultat dans un seul fichier scene.glb avec les cartes de texture appropriées. Le maillage est immédiatement prêt à être importé dans n'importe quel moteur de jeu ou éditeur 3D.

Ce dont vous avez besoin pour l'exécuter

La compilation est exigeante. Vous aurez besoin d'une version récente de PyTorch, de CUDA 12.x et d'un GPU avec architecture Ampere ou plus récent (RTX 3090, 4090, A100), car Flash-Attention et un tas d'extensions CUDA personnalisées fonctionnent en coulisses.

Clonez le dépôt avec les sous-modules :

git clone -b main https://github.com/kasothaphie/GenRecon.git --recursive
cd GenRecon

Pour la configuration de l'environnement, les développeurs ont fourni un script setup.sh. Avant d'exécuter, définissez les chemins vers CUDA et l'architecture de la puce :

export CUDA_HOME=/usr/local/cuda
export TORCH_CUDA_ARCH_LIST="8.9" # укажите свою архитектуру, например 8.9 для RTX 4090
. ./setup.sh --new-env --basic --flash-attn --nvdiffrast --nvdiffrec --cumesh --o-voxel --flexgemm

Si le script trébuche sur la compilation de flash-attn, les auteurs suggèrent d'installer une wheel binaire pré-construite depuis les versions Dao-AILab pour votre combinaison Python et PyTorch.

Les poids pré-entraînés pour les trois étapes sont téléchargés directement :

wget https://kaldir.vc.cit.tum.de/genrecon/sparse_structure.pt
wget https://kaldir.vc.cit.tum.de/genrecon/shape_slat.pt
wget https://kaldir.vc.cit.tum.de/genrecon/texture_slat.pt

Reconstruction de scène

Si vous voulez traiter de la vidéo iPhone ou caméra, vous devez d'abord calculer les poses de la caméra via COLMAP. Une fois les poses prêtes, lancez l'inférence :

python reconstruct_scene.py \
  --mode Iphone \
  --path "${WORK_ROOT}" \
  --output_path "${OUT_DIR}" \
  --ss_ckpt "sparse_structure.pt" \
  --shape_ckpt "shape_slat.pt" \
  --tex_ckpt "texture_slat.pt" \
  --num_imgs_per_scene 999 \
  --chunk_size_factor 1.08 \
  --stat_std_ratio 3.0 \
  --radius_nb_points 7 \
  --radius_m 0.2 \
  --pipeline_config configs/pipelines/texture.json \
  --proj_batch_voxels 2048

Le script enregistre les tenseurs de blocs intermédiaires. Pour les assembler en un .glb final, appelez le convertisseur :

python chunked_to_glb.py \
    --inputs "${OUT_DIR}/to_glb_inputs.pt" \
    --chunk_inputs "${OUT_DIR}/chunk_inputs.pt" \
    --output_dir "${OUT_DIR}"

Le code inclut également des profils prêts à l'emploi pour le benchmark ScanNet++ si vous souhaitez reproduire les mesures scientifiques de l'article.

Points à noter

La base de code GenRecon est un dépôt académique avec tout ce que cela implique. Il n'y a pas d'interface graphique élégante ni d'interface web pratique ici — tous les boutons sont tournés via des arguments de console et des fichiers de configuration JSON.

La préparation de vos propres données pour le fine-tuning nécessite le pré-rendu et la conversion des scènes en représentation O-Voxel. Vous ne pourrez pas exécuter l'entraînement sur du matériel faible ou des GPU avec 8-12 Go de VRAM ; l'inférence nécessitera également une quantité considérable de mémoire vidéo en raison de la grille de voxels dense.

Qui trouvera cela utile

Le projet mérite d'être consulté pour les généralistes 3D, les développeurs de jeux et les chercheurs en vision par ordinateur. Si vous êtes fatigué de nettoyer manuellement des scans de pièces bruités et de re-baker les dépliages UV, l'approche de GenRecon par génération via des blocs prêts à l'emploi ressemble à l'un des moyens les plus pratiques d'obtenir un maillage d'intérieur éditable.

Projets similaires