>_ DevTrendsnl

Taal

Home

Talen

Secties

Frontend Backend Mobiel DevOps AI / ML GameDev Blockchain Embedded Beveiliging
Python

Kamerfoto's Omzetten in Strakke 3D-meshes met Textures, Zonder Rommel of Gaten

Als je hebt geprobeerd interieurs te reconstrueren met klassieke fotogrammetrie of via NeRF en Gaussian Splatting, ken je hun zwakke punten. Fotogrammetrie faalt regelmatig op witte muren en glanzende tafels, waardoor gaten in het mesh ontstaan. Gaussian Splatting geeft een mooi viewport-beeld, maar het extraheren van een goed polygonen mesh met PBR-materialen voor Unreal Engine of Blender is nog steeds verschrikkelijk moeilijk.

Onderzoekers van de Technische Universiteit München (TUM) en Huawei hebben GenRecon uitgebracht, een project dat het probleem op een andere manier probeert op te lossen. Ze hebben generatieve 3D-objectmodellen gecombineerd met scènereconstructie.

GenRecon Teaser

Het Idee

In plaats van geometrie helemaal opnieuw op te bouwen op basis van pixelmatching, hebben de auteurs Microsoft's generatieve model TRELLIS gebruikt.2 Op zichzelf kan TRELLIS hoogwaardige geïsoleerde 3D-objecten uit afbeeldingen genereren. Maar je kunt het niet direct toepassen op een hele kamer: de resolutie en context zijn niet voldoende.

GenRecon verdeelt de kamerruimte in overlappende ruimtelijke chunks (kubussen). Voor elke chunk projecteert het netwerk functies van camera-afbeeldingen direct in 3D-ruimte en voert ze in een generatief diffusie-pipeline.

Het model weet hoe stoelen, banken, muren en kasten er meestal uitzien. Dus op plaatsen waar foto's glinstering of ontbrekende hoeken tonen, reconstrueert de generator zorgvuldig correcte geometrie en materialen. In de tests van de auteurs verbeterde de geometrische nauwkeurigheid met 16% vergeleken met standaardmethoden.

Hoe de Pipeline Werkt

Het generatieproces is opgesplitst in drie fasen:

  1. Sparse Structure (SS). Het model bepaalt de algemene grove structuur en voxel-bezetting in de chunk-ruimte.
  2. Shape SLat. De generator verfijnt gladde oppervlaktegeometrie via latente representaties (Structured Latents).
  3. Texture SLat. PBR-textures worden toegepast op de geometrie, rekening houdend met belichting en originele foto's.

Daarna worden alle chunks aan elkaar genaaid en bakent een apart script het resultaat in een enkel scene.glb-bestand met correcte texture maps. Het mesh is direct klaar voor import in elke game-engine of 3D-editor.

Wat Je Nodig Hebt om Het Te Draaien

De build is veeleisend. Je hebt een recente versie van PyTorch, CUDA 12.x en een GPU met Ampere-architectuur of nieuwer (RTX 3090, 4090, A100) nodig, aangezien Flash-Attention en een heleboel aangepaste CUDA-extensies op de achtergrond draaien.

Kloon de repository met submodules:

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

Voor de omgevingsconfiguratie hebben de ontwikkelaars een setup.sh-script geleverd. Voordat je draait, stel je de paden naar CUDA en chip-architectuur in:

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

Als het script struikelt bij het compileren van flash-attn, suggereren de auteurs om een voorgebouwde binary wheel te installeren van Dao-AILab releases voor je Python- en PyTorch-combinatie.

Voorgetrainde gewichten voor alle drie de fasen worden direct gedownload:

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

Scènereconstructie

Als je iPhone- of camera-video wilt verwerken, moet je eerst camerastances berekenen via COLMAP. Zodra de stances klaar zijn, draai je de inferentie:

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

Het script slaat tussenliggende chunk-tensors op. Om ze samen te voegen tot een definitief .glb, roep je de converter aan:

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

De code bevat ook kant-en-klare profielen voor de ScanNet++ benchmark als je de wetenschappelijke metingen uit het paper wilt reproduceren.

Zaken Om Op Te Letten

De GenRecon-codebase is een academische repository met alles wat daarbij komt kijken. Er is geen fancy GUI of handige webinterface—alle knoppen worden omgedraaid via console-argumenten en JSON-configs.

Voor het voorbereiden van je eigen data voor fine-tuning is pre-rendering en converteren van scènes naar O- Voxel-representatie vereist. Je kunt training niet draaien op zwakke hardware of GPU's met 8-12 GB VRAM; inferentie vereist ook een flinke hoeveelheid videogeheugen vanwege het dichte voxel-grid.

Wie Het Nuttig Zal Vinden

Het project is de moeite waard om te bekijken voor 3D-generalisten, game-ontwikkelaars en computer vision-onderzoekers. Als je het beu bent om rommelige kamer-scans handmatig op te ruimen en UV-unwraps opnieuw te bakken, ziet GenRecon's aanpak van generatie via kant-en-klare chunks eruit als een van de meest praktische manieren om een bewerkbaar interieur-mesh te krijgen.

Gerelateerde projecten