Guide utilisateur

Chapitre 9 — Backends SfM

Mode expert avec le sélecteur Camera Alignment dans l'inspecteur (Apple Photogrammetry / Native (Beta))
Mode expert avec le sélecteur Camera Alignment dans l'inspecteur (Apple Photogrammetry / Native (Beta))
Inspecteur avec Native (Beta) actif — sélecteur Camera Alignment, deuxième option sélectionnée, tous les autres paramètres de configuration d'entraînement inchangés
Inspecteur avec Native (Beta) actif — sélecteur Camera Alignment, deuxième option sélectionnée, tous les autres paramètres de configuration d'entraînement inchangés

Le sélecteur Camera Alignment dans l'inspecteur est un segmented control avec deux options — Apple Photogrammetry (par défaut pour les builds App Store, pleinement conforme au sandbox) et Native (Beta) (le backend propre de RadianceKit, pipeline FAST+BRIEF+GLOMAP, développé en phase 3.8/3.9, état 2026-05). Native (Beta) est validé uniquement en orbite et plus rapide qu'Apple Photogrammetry à partir de 1 000 images, mais n'atteint pas encore le quality gate §5 de la phase 3 (finalLoss ≤ 0.0115) — d'où le tag Beta. Des résultats SfM externes provenant de Metashape, COLMAP ou d'un autre logiciel de photogrammétrie peuvent en outre être importés via le menu File (Q3 format texte COLMAP, Q6 Workspace Import) — le sélecteur ne change pas, mais les poses importées remplacent le résultat SfM.

SfM signifie Structure from Motion. À partir d'un ensemble de photos qui se chevauchent, le logiciel reconstruit pour chaque image la position et la direction de vue de la caméra dans un système de coordonnées 3D commun. Au passage, un nuage de points 3D grossier est généré, qui initialise l'entraînement par Gaussian Splatting. Le résultat SfM est l'entrée du véritable entraînement et détermine de façon décisive la qualité d'image finale.

RadianceKit propose cinq chemins SfM : deux backends intégrés à l'application (Q1 Apple Photogrammetry, Q4/Q5 Native), deux chemins d'import depuis des outils externes (Q3 format texte COLMAP, Q6 Workspace Import binaire), ainsi que Q2 COLMAP binaire, disponible uniquement dans les builds développeur hors App Store. Lequel est le bon dépend du type de scène (orbite autour d'un objet, intérieur, vol de drone) et du fait qu'un logiciel externe fournisse déjà une reconstruction.

Q1 — Apple Photogrammetry

Expert View → Inspecteur → Configuration d'entraînement → sélecteur Camera Alignment, entrée « Apple Photogrammetry ».

TECHNIQUE

Encapsule le framework Photogrammetry intégré d'Apple, développé à l'origine pour Object Capture. Apple extrait en interne les features avec un pipeline propriétaire (les étapes ne sont pas documentées publiquement), les vérifie via du matching multi-vues et résout le bundle adjustment sur le Neural Engine + GPU Apple Silicon. Le backend est entièrement conforme à l'App Store (pas de binaire externe, Sandbox=true, on-device), mais ne fournit que les poses caméra et un nuage de points grossier — aucune métrique de diagnostic comme la longueur des tracks ou l'erreur de reprojection. Mise à l'échelle, selon la recommandation d'Apple, jusqu'à quelques centaines d'images. Au-delà de ~500 images dans des vols de drone linéaires ou de grandes scènes outdoor, des crashes reproductibles ou des abandons silencieux de caméras individuelles ont été observés.

Q3 — Format texte COLMAP (Metashape / ETH3D)

Menu « File → Import COLMAP / Metashape Workspace… » (Cmd+⇧+I) OU glisser-déposer d'un dossier contenant sparse/0/cameras.txt.

TECHNIQUE

Lit l'export texte standard de COLMAP — trois fichiers texte cameras.txt, images.txt, points3D.txt dans le sous-dossier sparse/0/ — et convertit vers le modèle de résultat SfM interne. Même définition de format que l'export binaire COLMAP, seulement en ASCII au lieu de binaire. Exporté par Agisoft Metashape, RealityCapture, PolyCam et le benchmark ETH3D exactement dans cette disposition. Le parseur partage la détection de modèle caméra avec le parseur binaire (tous les modèles courants : SIMPLE_PINHOLE, PINHOLE, OPENCV, OPENCV_FISHEYE, FULL_OPENCV). Robuste face aux lignes de commentaire et aux lignes vides. Mise à l'échelle dans les tests jusqu'à ~1 400 caméras (ETH3D Tunnel) sans problème.

Q4 — SfM natif (incrémental)

Expert View → Inspecteur → Configuration d'entraînement → sélecteur Camera Alignment, entrée « Native (Beta) ». L'incrémental est le mode par défaut de ce backend — il n'y a pas de sélecteur de mapper séparé dans l'inspecteur. En CLI, le mode peut être défini explicitement avec –native-sfm ou –sfm-mapper incremental.

TECHNIQUE

Implémentation propre, accélérée par GPU, de tout le pipeline SfM : features FAST+BRIEF OU SuperPoint+LightGlue via CoreML (avec –coreml-features), suivi d'un matching KNN Hamming, matrice fondamentale RANSAC, construction de tracks, sélection de la paire initiale, two-view bootstrap (F→E plus DLT), mapper incrémental glouton avec enregistrement PnP et triangulation multi-vues, et bundle adjustment final via Levenberg-Marquardt réduit par Schur avec perte de Huber et jacobiennes analytiques par résolution Cholesky. Entièrement conforme à l'App Store : pas de binaire externe, Sandbox=true. Avec le détecteur de collapse R2 livré en phase 3.10 : si l'application enregistre moins de 60 % des images d'entrée ou si le taux de points-par-caméra tombe sous 13, on bascule automatiquement vers le mapper global (Q5). Empiriquement propre sur les scènes orbit/turntable ; sur des mouvements plus généraux (vol de drone, intérieurs à géométrie complexe), le taux de succès est plus faible — le détecteur intercepte cependant ces cas. Mise à l'échelle fiable jusqu'à ~200 caméras, au-delà avec un temps d'exécution nettement plus long.

Q5 — SfM natif (global)

Appelé automatiquement quand le mapper incrémental (Q4) déclenche le détecteur de collapse (moins de 60 % des images d'entrée enregistrées ou taux de points-par-caméra sous 13). Forçable manuellement uniquement via la CLI –sfm-mapper global. Dans l'inspecteur, la méthode globale n'est pas accessible via un sélecteur séparé — l'application décide elle-même quand basculer.

TECHNIQUE

Variante globale du pipeline natif. D'abord extraction de features + matching comme en Q4, puis estimation de pose relative pour toutes les paires vérifiées, suivie d'un rotation averaging (synchronise toutes les rotations caméra dans le système de coordonnées monde) et d'un translation averaging (basé sur LSQR avec une formulation sparse matrix-free pour éviter un overflow entier sur de grands ensembles de caméras). Mise à l'échelle jusqu'à ~5 000 caméras en principe, en pratique dégradée en qualité au-delà de quelques centaines de caméras — la mesure du gate d'acceptation phase 3.8 §5 sur K-1351 a donné un finalLoss de 0.07 au lieu des 0.0115 visés. Traité comme un « tier de fallback » : entre en jeu quand le mapper incrémental dégénère, mais n'est pas lui-même vérifié à nouveau en qualité.

Q6 — Import Workspace Metashape / COLMAP texte (Phase Q7)

Menu File → « Import COLMAP / Metashape Workspace… » (Cmd+⇧+I). Glisser-déposer d'un dossier contenant sparse/0/cameras.{bin,txt} et images/.

TECHNIQUE

Détecte automatiquement si un dossier choisi via glisser-déposer ou panneau d'ouverture correspond à l'une des trois dispositions de workspace COLMAP (sparse/0/, sparse/ ou racine) et si la reconstruction est binaire (cameras.bin) ou texte (cameras.txt). Le chemin binaire utilise le parseur binaire COLMAP, le chemin texte le loader ETH3D — les deux produisent le même modèle de résultat SfM et le reste du pipeline (import des images, démarrage de l'entraînement MCMC) est agnostique à la source. Les images sont ouvertes via le système de bookmarks security-scoped du sandbox de l'app, de sorte que l'import fonctionne aussi dans la version App Store. Spécifiquement conçu pour le cas « export Metashape sans recalculer la reconstruction ». La détection mentionnée dans l'entrée de menu File avertit dans le journal de l'app si le dossier choisi n'est pas un workspace reconnaissable.

Quel backend dans quelle situation ?

ScénarioBackend recommandé
Scan d'objet, 50–200 photosQ1 Apple Photogrammetry
Grand outdoor / drone / >500 imagesQ6 Workspace Import (calculer dans Metashape ou COLMAP, puis importer)
Export Metashape/RealityCapture disponibleQ6 Import (pas de SfM nécessaire)
Set texte COLMAP ETH3D / académiqueQ3 import texte COLMAP
Strictement conforme App Store + scène en orbiteQ4 Native incrémental
Q4 échoueQ5 Native global (automatique)
Données du benchmark ETH3DQ3 (autotest précalculé)

Comparaison rapide

BackendApp StoreSandboxBinaire externeUsage idéalMax ~cams
Q1 Apple PGObjet en orbite~300
Q2 COLMAP binaire❌ (build dév uniquement)colmap/glomapOutdoor large~5 000
Q3 import texte COLMAPBancs de test~1 500
Q4 Native incrémentalObjet en orbite~200
Q5 Native globalFallback Q4~1 351
Q6 Workspace ImportRéutilisation Metashapeselon source