Division de grands ensembles de données – documentation OpenDroneMap 0.6 – Avis Drones, test et guide d’achat

À partir de la version ODM 0.6.0 vous pouvez diviser de très grands ensembles de données en blocs gérables (appelés sous-modèles), exécuter le pipeline sur chaque bloc, puis produire des DEM fusionnés, des orthophotographies et des nuages ​​de points. Le processus est appelé «fusion par division».

Pourquoi pourriez-vous utiliser le pipeline de fusion fractionnée? Si vous avez un très grand nombre d'images dans votre jeu de données, la fusion fractionnée aidera à rendre le traitement plus facile à gérer sur une grande machine (cela nécessitera moins de mémoire). Si vous avez de nombreuses machines toutes connectées au même réseau, vous pouvez également traiter les sous-modèles en parallèle, permettant ainsi une mise à l'échelle horizontale et un traitement plus rapide de milliers d'images.

La fusion fractionnée fonctionne dans WebODM dès sa sortie tant que les nœuds de traitement prennent en charge la fusion fractionnée, en activant --split option lors de la création d'une nouvelle tâche.

Calibrer les images

L'étalonnage de l'image est recommandé (mais pas obligatoire) pour les grands ensembles de données car la propagation d'erreur due à la distorsion de l'image pourrait provoquer un effet de bol sur les modèles. Les instructions de calibrage se trouvent dans Calibrer les images.

image de l'effet de distorsion de l'objectif sur le bowling des données

Effet de bowling sur un nuage de points sur plus de 13 000+ images collectées par la Banque mondiale en Tanzanie sur le bassin de Msimbasi sujet aux inondations, Dar es Salaam, Tanzanie.

Split-Merge local

Diviser un ensemble de données en sous-modèles plus faciles à gérer et traiter séquentiellement tous les sous-modèles sur la même machine est facile! Utilisez simplement --split et --split-overlap pour décider du nombre moyen d'images par sous-modèles et du chevauchement (en mètres) entre les sous-modèles respectivement

docker run -ti --rm -v /my/project:/datasets/code opendronemap/odm --project-path /datasets --split 400 --split-overlap 100

Si vous savez déjà comment vous souhaitez diviser l'ensemble de données, vous pouvez fournir ces informations et elles seront utilisées à la place de l'algorithme de clustering.

Le regroupement peut être fourni en ajoutant un fichier nommé image_groups.txt dans le dossier principal de l'ensemble de données. Le fichier doit avoir une ligne par image. Chaque ligne doit avoir deux mots: d'abord le nom de l'image et ensuite le nom du groupe auquel elle appartient. Par exemple:

01.jpg A
02.jpg A
03.jpg B
04.jpg B
05.jpg C

créera 3 sous-modèles. Assurez-vous de passer --split-overlap 0 si vous fournissez manuellement un image_groups.txt fichier.

Split-Merge distribué

ODM peut également distribuer automatiquement le traitement de chaque sous-modèle à plusieurs machines via des nœuds NodeODM, orchestrés via ClusterODM.

image de l'effet de distorsion de l'objectif sur le bowling des données

Prise en main de Split-Merge distribué

La première étape consiste à démarrer ClusterODM

docker run -ti -p 3001:3000 -p 8080:8080 opendronemap/clusterodm

Ensuite, sur chaque machine que vous souhaitez utiliser pour le traitement, lancez une instance NodeODM via

docker run -ti -p 3000:3000 opendronemap/nodeodm

Connectez-vous via telnet à ClusterODM et ajoutez les adresses IP / le port des machines exécutant NodeODM

$ telnet  8080
Connected to .
Escape character is '^)'.
(...)
# node add  3000
# node add  3000
(...)
# node list
1) :3000 (online) (0/2) 
2) :3000 (online) (0/2) 

Assurez-vous que vous utilisez la version 1.5.1 ou supérieur de l'API NodeODM.

À ce stade, utilisez simplement le --sm-cluster option pour activer la fusion fractionnée distribuée

docker run -ti --rm -v /my/project:/datasets/code opendronemap/odm --project-path /datasets --split 800 --split-overlap 120 --sm-cluster http://cluster-odm-ip>:3001

Comprendre le cluster

Lorsqu'il est connecté via telnet, il est possible d'interroger ce qui se passe sur le cluster. Par exemple, nous pouvons utiliser la commande HELP pour trouver les commandes disponibles

# HELP
NODE ADD   (token) - Add new node
NODE DEL  - Remove a node
NODE INFO  - View node info
NODE LIST - List nodes
NODE LOCK  - Stop forwarding tasks to this node
NODE UNLOCK  - Resume forwarding tasks to this node
NODE UPDATE - Update all nodes info
NODE BEST  - Show best node for the number of images
ROUTE INFO  - Find route information for task
ROUTE LIST (node number) - List routes
TASK LIST (node number) - List tasks
TASK INFO  - View task info
TASK OUTPUT  (lines) - View task output
TASK CANCEL  - Cancel task
TASK REMOVE  - Remove task
ASR VIEWCMD  - View command used to create a machine
!! - Repeat last command

Si, par exemple, l'instance NodeODM n'était pas active au démarrage de ClusterODM, nous pourrions répertorier les nœuds et voir quelque chose comme suit

# NODE LIST
1) localhost:3000 (offline) (0/2) version 1.5.3> (L)

Pour résoudre ce problème, nous pouvons démarrer notre nœud local (s'il n'est pas déjà démarré), puis effectuer une NODE UPDATE

# NODE UPDATE
OK
# NODE LIST
1) localhost:3000 (online) (0/2) version 1.5.3> (L)

Accès aux journaux

Lorsqu'un processus est en cours d'exécution, il est également possible de répertorier les tâches et d'afficher la sortie de la tâche

# TASK LIST
# TASK OUTPUT  (lines)

Autoscaling ClusterODM

ClusterODM comprend également l'option de mise à l'échelle automatique sur plusieurs plates-formes, y compris, à ce jour, Amazon et Digital Ocean. Cela permet aux utilisateurs de réduire les coûts associés aux instances permanentes et de pouvoir adapter le traitement en fonction de la demande.

Pour configurer la mise à l'échelle automatique, vous devez:

  • Avoir une version fonctionnelle de NodeJS installée, puis installer ClusterODM
git clone https://github.com/OpenDroneMap/ClusterODM
cd ClusterODM
npm install
  • Assurez-vous que docker-machine est installé.
  • Configurez un compartiment compatible S3 pour stocker les résultats.
  • Créez un fichier de configuration pour DigitalOcean ou Amazon Web Services.

Vous pouvez ensuite lancer ClusterODM avec

node index.js --asr configuration.json

Vous devriez voir quelque chose de similaire aux messages suivants dans la console

info: ASR: DigitalOceanAsrProvider
info: Can write to S3
info: Found docker-machine executable

Vous devez toujours avoir au moins un nœud NodeODM statique attaché à ClusterODM, même si vous prévoyez d'utiliser l'autoscaler pour tout le traitement. Si vous configurez la mise à l'échelle automatique, vous ne pouvez pas avoir zéro nœud et vous fier à 100% à l'autoscaler. Vous devez attacher un nœud NodeODM pour agir en tant que «nœud de référence» sinon ClusterODM ne saura pas comment gérer certaines requêtes (pour le transfert de l'interface utilisateur, pour valider les options avant de lancer une instance, etc.). À cette fin, vous devez ajouter un nœud NodeODM «factice» et le verrouiller

telnet localhost 8080
> NODE ADD localhost 3001
> NODE LOCK 1
> NODE LIST
1) localhost:3001 (online) (0/2) version 1.5.1> (L)

De cette façon, toutes les tâches seront automatiquement transmises à l'autoscaler.

Limites

Les maillages texturés 3D ne sont actuellement pas fusionnés dans le cadre du workflow (seuls les nuages ​​de points, les DEM et les orthophotographies le sont).

Les GCP sont entièrement pris en charge, cependant, il doit y avoir au moins 3 points GCP sur chaque sous-modèle pour que le géoréférencement ait lieu. Si un sous-modèle contient moins de 3 GCP, une combinaison des données GCP + EXIF ​​restantes sera utilisée à la place (ce qui sera moins précis). Nous vous recommandons d'utiliser le image_groups.txt pour contrôler avec précision la répartition des sous-modèles lors de l'utilisation des GCP.

Remerciements

D'énormes accessoires pour Pau et les gens de Mapillary pour leurs contributions incroyables à OpenDroneMap via leur code OpenSfM, qui est un composant clé du pipeline de fusion-scission. Nous sommes impatients de repousser les limites d'OpenDroneMap et de voir la taille d'un ensemble de données que nous pouvons traiter.

Aidez à éditer ces documents!

Nous serions ravis de connaître votre avis

      Laisser un commentaire