2 votes

Formation sur les défauts de segmentation Deeplab avec Cityscapes

Je suis en train de suivre les étapes pour exécuter deeplab l'entraînement de l'épine dorsale exception_65 sur l'ensemble de données Cityscapes mais malheureusement je rencontre un problème de segmentation. Je ne peux pas reproduire l'erreur. Par exemple, l'entraînement sur le jeu de données PASCAL fonctionne bien. J'ai vérifié les chemins et plusieurs versions et combinaisons de tensorflow et de pilotes, etc. Même si j'exécute le train.py script sans support GPU, j'obtiens le même défaut de segmentation. J'ai fait les mêmes étapes sur un autre PC et ça a marché. Quelqu'un sait-il quel est le problème ?

Mon installation :

  • Ubuntu 18.04
  • NVIDIA RTX 2080 avec le pilote version 430.65 (installé avec le fichier .run)
  • CUDA 10.0 (installé avec le fichier .run)
  • cudnn 7.6.5
  • Python 3.6
  • tensorflow 1.15

En courant :

python3 "${WORK_DIR}"/train.py \
  --logtostderr \
  --training_number_of_steps=${NUM_ITERATIONS} \
  --train_split="train_fine" \
  --model_variant="xception_65" \
  --atrous_rates=6 \
  --atrous_rates=12 \
  --atrous_rates=18 \
  --output_stride=16 \
  --decoder_output_stride=4 \
  --train_crop_size="769,769" \
  --train_batch_size=1 \
  --fine_tune_batch_norm=False \
  --dataset="cityscapes" \
  --tf_initial_checkpoint="${INIT_FOLDER}/deeplabv3_cityscapes_train/model.ckpt" \
  --train_logdir="${TRAIN_LOGDIR}" \
  --dataset_dir="${CITYSCAPES_DATASET}" 

J'obtiens le résultat suivant :

I1119 16:52:49.856512 139832269989696 learning.py:768] Starting Queues.
Fatal Python error: Segmentation fault

Thread 0x00007f2cd086b700 (most recent call first):
  File "/home/kuschnig/anaconda3/envs/conda-tf/lib/python3.7/threading.py", line 296 in wait
  File "/home/kuschnig/anaconda3/envs/conda-tf/lib/python3.7/queue.py", line 170 in get
  File "/home/kuschnig/anaconda3/envs/conda-tf/lib/python3.7/site-packages/tensorflow_core/python/summary/writer/event_file_writer.py", line 159 in run
  File "/home/kuschnig/anaconda3/envs/conda-tf/lib/python3.7/threading.py", line 926 in _bootstrap_inner
  File "/home/kuschnig/anaconda3/envs/conda-tf/lib/python3.7/threading.py", line 890 in _bootstrap

Thread 0x00007f2d3cc7e740 (most recent call first):
  File "/home/kuschnig/anaconda3/envs/conda-tf/lib/python3.7/site-packages/tensorflow_core/python/client/session.py", line 1443 in _call_tf_sessionrun
  File "/home/kuschnig/anaconda3/envs/conda-tf/lib/python3.7/site-packages/tensorflow_core/python/client/session.py", line 1350 in _run_fn
  File "/home/kuschnig/anaconda3/envs/conda-tf/lib/python3.7/site-packages/tensorflow_core/python/client/session.py", line 1365 in _do_call
  File "/home/kuschnig/anaconda3/envs/conda-tf/lib/python3.7/site-packages/tensorflow_core/python/client/session.py", line 1359 in _do_run
  File "/home/kuschnig/anaconda3/envs/conda-tf/lib/python3.7/site-packages/tensorflow_core/python/client/session.py", line 1180 in _run
  File "/home/kuschnig/anaconda3/envs/conda-tf/lib/python3.7/site-packages/tensorflow_core/python/client/session.py", line 956 in run
  File "/home/kuschnig/anaconda3/envs/conda-tf/lib/python3.7/site-packages/tensorflow_core/contrib/slim/python/slim/learning.py", line 490 in train_step
  File "/home/kuschnig/anaconda3/envs/conda-tf/lib/python3.7/site-packages/tensorflow_core/contrib/slim/python/slim/learning.py", line 775 in train
  File "/home/kuschnig/tensorflow/models/research/deeplab/train.py", line 466 in main
  File "/home/kuschnig/anaconda3/envs/conda-tf/lib/python3.7/site-packages/absl/app.py", line 250 in _run_main
  File "/home/kuschnig/anaconda3/envs/conda-tf/lib/python3.7/site-packages/absl/app.py", line 299 in run
  File "/home/kuschnig/anaconda3/envs/conda-tf/lib/python3.7/site-packages/tensorflow_core/python/platform/app.py", line 40 in run
  File "/home/kuschnig/tensorflow/models/research/deeplab/train.py", line 472 in <module>
Segmentation fault (core dumped)

La trace arrière avec gdb montre : Sortie GDB

2voto

Achille Points 21

J'ai eu le même problème que celui décrit. J'ai réussi à le résoudre en faisant deux choses :

  1. Assurez-vous que le nom de votre tfrecord (pour moi ils sont nommés train-00000-of-00010.tfrecord ) sont les mêmes que --train_split="train" .
  2. Changement dans data_generator.py , autour des lignes 72 splits_to_sizes={'train_fine': 2975 par splits_to_sizes={'train': 2975 .

Le truc, c'est d'avoir le même nom (pour moi, c'est train ) dans votre .sh qui lance la formation, dans votre data_generator.py et dans votre tfrecord dossier.

0voto

kuschi Points 21

Je ne sais toujours pas ce qui cause le défaut de segmentation, mais la solution pour moi a été de spécifier un nouveau jeu de données pour les paysages urbains dans data_generator.py

0voto

Van Teo Le Points 30

Mon problème ressemble au vôtre, et j'ai réalisé que --dataset_dir est censé pointer vers le répertoire contenant les données tfrecord pour cityscape, et non le répertoire cityscape lui-même.

Le code pour récupérer les données dans le data_generator.

def _get_all_files(self):
    """Gets all the files to read data from.

    Returns:
      A list of input files.
    """
    file_pattern = _FILE_PATTERN
    file_pattern = os.path.join(self.dataset_dir,
                                file_pattern % self.split_name)
    return tf.gfile.Glob(file_pattern)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X