IGNF / myria3d

Myria3D: Aerial Lidar HD Semantic Segmentation with Deep Learning
https://ignf.github.io/myria3d/
BSD 3-Clause "New" or "Revised" License
169 stars 23 forks source link

Primary config directory not found #31

Closed Bibiisneaks closed 1 year ago

Bibiisneaks commented 2 years ago

Bonjour, après avoir build le dockerfile je rencontre une erreur au moment du run :

Primary config directory not found. Check that the config directory '/CICD_github_assets/parametres_etape1/.hydra' exists and readable

Et effectivement, je ne vois nulle part dans les configs (dockerfile / .yml etc…) le folder /CICD_github_assets/

Suis-je passé à côté d'une étape ?

Merci

CharlesGaydon commented 2 years ago

Bonjour, je serais ravi de vous aider à faire tourner l'outil, qui est encore tout nouvellement open sourcé :) D'après ce que je comprends, vous avez souhaité lancé la commande obtenue directement dans le Dockerfile (permalink). Cette commande est un simple exemple, dont les chemins correspondent à un serveur privé auquel vous n'avez pas accès. Il faut donc les remplacer par des chemins sur votre machine, où vous aurez à placer les éléments suivants :

  • A source cloud point in LAS format on which to infer classes and probabilites.
  • A checkpoint of a trained lightning module implementing model logic (class myria3d.models.model.Model)
  • A minimal yaml configuration specifying parameters. We use hydra to manage configurations, and this yaml results from the model training. The datamodule and model parameters groups must match dataset characteristics and model training settings. The predict parameters group specifies path to models and data as well as batch size (N=50 works well, the larger the faster) and use of gpu (optionnal). For hints on what to modify, see the experiment/predict.yaml file.

Ces éléments sont listés dans cette page de la documentation : Performing inference on new data Le plus simple pour vous serait de télécharger les fichiers les plus à jour dans notre production à l'IGN, qui sont accessible sur cette Production Release:

image

Si vous utilisez Docker avec l'image appellée elle même "myria3d", vous pouvez vous baser sur la commande suivante de notre workflow d'intégration continue, ce qui donnerait (en ayant crée un dossier /inputs/ et /outputs/ sur votre machine, et téléchargé les fichiers dans /inputs/)

    docker run -v /inputs/:/inputs/ -v /outputs/:/outputs/ --ipc=host myria3d \
    python -m myria3d.predict \
    --config-path /inputs/
    --config-name predict_config_V2.3.0.yaml \
    predict.src_las=/inputs/792000_6272000_subset_buildings.las \
    predict.output_dir=/outputs/ \
    predict.ckpt_path=/inputs/RandLaNet_Buildings_B2V0.5_epoch_033.ckpt \
    datamodule.batch_size=25 \
    hydra.run.dir=/outputs/

Concernant le LAS d'entrée, vous pouvez utiliser un LAS du projet Lidar HD, ou bien celui de test qui est situé dans ce dossier. Pour inspecter les résultats d'inférence, ouvrir CloudCompare et chercher le canal PredictedClassification. Les canaux de probabilitiés pour différentes classes peuvent tous être sauvegardés avec le paramètre predict.probas_to_save="all".

Bibiisneaks commented 2 years ago

Merci! Après avoir suivi vos indications et gérer quelques erreurs supplémentaires, j'ai finalement réussi à utiliser le script avec le fichier .las fourni en test dans le repository. En revanche, lorsque j'essaye d'utiliser un des fichiers open source de l'IGN, j'obtiens la stack trace suivante (indiquant une erreur de clé manquante dans les données :

Error executing job with overrides: ['predict.src_las=/myria3d/myria3d/inputs/Semis_2021_0436_6470_LA93_IGN69.laz', 'predict.output_dir=/myria3d/myria3d/outputs/', 'predict.ckpt_path=/myria3d/myria3d/inputs/proto151_V0.0_epoch_056_Myri
a3DV2.3.0.ckpt', 'datamodule.batch_size=25']
Traceback (most recent call last):
  File "/myria3d/myria3d/predict.py", line 106, in main
    predict(config)
  File "/myria3d/myria3d/utils/utils.py", line 158, in timed
    result = method(*args, **kwargs)
  File "/myria3d/myria3d/predict.py", line 59, in predict
    for batch in tqdm(datamodule.predict_dataloader()):
  File "/opt/conda/envs/myria3d/lib/python3.9/site-packages/tqdm/std.py", line 1195, in __iter__
    for obj in iterable:
  File "/opt/conda/envs/myria3d/lib/python3.9/site-packages/torch/utils/data/dataloader.py", line 521, in __next__
    data = self._next_data()
  File "/opt/conda/envs/myria3d/lib/python3.9/site-packages/torch/utils/data/dataloader.py", line 1203, in _next_data
    return self._process_data(data)
  File "/opt/conda/envs/myria3d/lib/python3.9/site-packages/torch/utils/data/dataloader.py", line 1229, in _process_data
    data.reraise()
  File "/opt/conda/envs/myria3d/lib/python3.9/site-packages/torch/_utils.py", line 434, in reraise
    raise exception
ValueError: Caught ValueError in DataLoader worker process 0.
Original Traceback (most recent call last):
  File "/opt/conda/envs/myria3d/lib/python3.9/site-packages/pylas/point/record.py", line 304, in __getitem__
    composed_dim, sub_field = self.sub_fields_dict[item]
KeyError: 'red'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/conda/envs/myria3d/lib/python3.9/site-packages/torch/utils/data/_utils/worker.py", line 287, in _worker_loop
    data = fetcher.fetch(index)
  File "/opt/conda/envs/myria3d/lib/python3.9/site-packages/torch/utils/data/_utils/fetch.py", line 32, in fetch
    data.append(next(self.dataset_iter))
  File "/myria3d/myria3d/data/datamodule.py", line 232, in yield_transformed_subtile_data
    tile_data = self.loading_function(filepath)
  File "/myria3d/myria3d/data/loading.py", line 232, in load_las
    [
  File "/myria3d/myria3d/data/loading.py", line 233, in <listcomp>
    las[x_name]
  File "/opt/conda/envs/myria3d/lib/python3.9/site-packages/pylas/lasdatas/base.py", line 187, in __getitem__
    return self.points_data[item]
  File "/opt/conda/envs/myria3d/lib/python3.9/site-packages/pylas/point/record.py", line 309, in __getitem__
    return self.array[item]
ValueError: no field of name red

Cela est sûrement du au format des données Lidar qui ne sont pas les mêmes, et les champs rgb ne sont pas présents dans les données téléchargeables sur le site de l'IGN, et donc ces données ne sembles pas compatibles avec le projet myria3d

CharlesGaydon commented 2 years ago

Effectivement ça semble être le soucis. Sur la page du projet Lidar HD, sont téléchargeables 1) des données brutes (non colorisées donc, pour l'instant), et 2) "des échantillons de données classifiées". Ce sont ces dernières qui sont colorisées et peuvent permettre de tester l'outil ! Il semble que la plupart des liens soient non fonctionnels (je vais en prévenir le GéoPortail) mais le suivant semble fonctionner : image

CharlesGaydon commented 2 years ago

@Bibiisneaks Bonjour, avez-vous pu résoudre votre problème ?

CharlesGaydon commented 1 year ago

Fermé car inactif. N'hésitez pas à rouvrir si besoin.