web-dev-qa-db-fra.com

CRITICAL: tensorflow: la catégorie n'a pas d'images - validation

J'essaie de recycler le modèle Inception v3 en tensorflow pour mes propres catégories personnalisées. J'ai téléchargé des données et les ai formatées dans des répertoires. Lorsque j’exécute, le script python crée des goulots d’étranglement pour les images, puis lorsqu’il s’exécute, lors de la première étape de la formation (étape 0), une erreur critique survient. Il tente de moduler par 0. Il apparaît dans la fonction get_image_path lors du calcul le mod_index, qui est index% len (category_list) donc la category_list doit être 0 non?

Pourquoi cela se produit-il et comment puis-je le prévenir?

EDIT: Voici le code exact que je vois à l'intérieur de docker

2016-07-04 01:27:52.005912: Step 0: Train accuracy = 40.0%
2016-07-04 01:27:52.006025: Step 0: Cross entropy = 1.109777
CRITICAL:tensorflow:Category has no images - validation.
Traceback (most recent call last):
  File "tensorflow/examples/image_retraining/retrain.py", line 824, in <module>
    tf.app.run()
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/platform/app.py", line 30, in run
    sys.exit(main(sys.argv))
  File "tensorflow/examples/image_retraining/retrain.py", line 794, in main
    bottleneck_tensor))
  File "tensorflow/examples/image_retraining/retrain.py", line 484, in get_random_cached_bottlenecks
    bottleneck_tensor)
  File "tensorflow/examples/image_retraining/retrain.py", line 392, in get_or_create_bottleneck
    bottleneck_dir, category)
  File "tensorflow/examples/image_retraining/retrain.py", line 281, in get_bottleneck_path
    category) + '.txt'
  File "tensorflow/examples/image_retraining/retrain.py", line 257, in get_image_path
    mod_index = index % len(category_list)
ZeroDivisionError: integer division or modulo by zero
14
loganrussell48

J'ai modifié retrain.py pour qu'il y ait au moins une image en validation (ligne 201 *)

if len(validation_images) == 0:
   validation_images.append(base_name)
Elif percentage_hash < validation_percentage:

(*) Le numéro de ligne peut changer dans les prochaines versions. Regardez les commentaires.

10
Mateu

Réparer:

Le problème se produit lorsque vous avez moins de nombre d'images dans l'un de vos sous-dossiers.

J'ai rencontré le même problème lorsque le nombre total d'images dans une catégorie donnée était inférieur à 30, essayez d'augmenter le nombre d'images pour résoudre le problème.

Raison:

Tensorflow tente de créer 3 catégories d'images (Train, Test et Validation) et place les images sous celle-ci en fonction d'une valeur de probabilité (calculée à l'aide du hachage du nom de l'étiquette). 

Une image est placée dans le dossier de catégorie uniquement si la valeur de probabilité est inférieure à la taille de la catégorie (Train, Test ou validation). 

Maintenant, si le nombre d'images à l'intérieur d'une étiquette est inférieur (disons 25), la taille de validation est calculée à 10 (valeur par défaut) et la valeur de probabilité est généralement supérieure à 10; aucune image n'est donc placée dans l'ensemble de validation.

Plus tard, lorsque tous les goulots d’étranglement sont créés et que tf essaie de calculer l’exactitude de la validation, un message de journal fatal est tout d’abord écrit: 

CRITICAL: tensorflow: La catégorie n'a pas d'images - validation.

et continue ensuite à exécuter le code et se bloque alors qu'il tente de diviser par la taille de la liste de validation (qui est 0).

19
Ashwin Patti

J'ai eu le même problème lors de l'exécution de retrain.py et lorsque j'ai défini l'argument --model_dir de manière incorrecte et que le répertoire de démarrage a été créé dans le répertoire flower_photos.

Veuillez vérifier s'il y a des répertoires dans le répertoire flower_photos sans aucune image.

6
Praveen
  1. Cela se produit si vous avez trop d'images. Comme suggéré par Ashwin, avoir au moins 30 images.

  2. Les noms de votre dossier sont également importants. D'une manière ou d'une autre votre nom de dossier ne peut pas avoir un trait de soulignement (_)

par exemple. Ces noms n'ont pas fonctionné : dettol_bottle, dettol_soap, dove_soap, lifebuoy_bottle

Ces noms ont travaillé : dettolbottle, dettolsoap, dovesoap, lifebuoybottle

4
Pranav Mahajan

J'essayais de m'entraîner avec mes propres images (des images de chiens au lieu de fleurs) et j'ai rencontré le même problème.

J'ai identifié que le problème pour moi était que mes noms de dossiers (noms de catégories) n'étaient pas présents dans le fichier imagenet_synset_to_human_label_map.txt qui est chargé dans les données de début que nous modifions. 

En changeant le nom de mon dossier d’image de bichon en caniche, cela a commencé à fonctionner, puisque caniche est dans la carte initiale et que bichon ne l’est pas.

2
hypermiler

Pour moi, c'était un "-" dans les noms de mes dossiers. Au moment où je l'ai corrigé, l'erreur a disparu.

1
Anup Badhe

Cette erreur est partie pour moi après avoir ajouté> 50 images à chaque catégorie.

1
jem

Pour moi, cette erreur a été provoquée par le fait que des dossiers dans le répertoire de formation ne contenaient aucune image. Je suivais le même tutoriel "Poètes" et finissais par mettre des répertoires avec des sous-répertoires dans le répertoire image. Une fois que j'ai supprimé ceux-ci et placé uniquement des répertoires contenant des images (pas de sous-répertoires), l'erreur ne s'est plus produite et j'ai réussi à former mon modèle.

1
CanAmHack

Comme Ashwin Patti a répondu, il est possible que le répertoire divisé pour la validation ne comporte aucune image en raison d'un manque d'images dans le répertoire des étiquettes d'origine.

Cette explication est corroborée par l’avertissement lorsque vous essayez de recycler des étiquettes comportant moins de 20 images:

AVERTISSEMENT: le dossier contient moins de 20 images, ce qui peut entraîner des problèmes.

1
Reuben L.

J'aimerais aussi ajouter ma propre expérience:

Ne pas avoir d'espaces Pour moi, cela a fonctionné lorsque tout le nom d'un dossier était composé de caractères z à z, sans espaces, ni symboles, ni rien.

Par exemple, "Je suis un dossier" est faux. Cependant, "imAFolder" fonctionnerait.

0
Josh

Comme Matthieu l'a dit dans ses commentaires, la solution proposée:

# make sure none of the list is empty, otherwise it will raise an error
# when validating / testing
if validation_percentage > 0 and not validation_images:
    validation_images.append(training_images.pop())
if testing_percentage > 0 and not testing_images:
    testing_images.append(training_images.pop())

wotks pour moi.

Je me demande ce que signifie vraiment le message "CRITICAL: tensorflow: La catégorie n’a pas d’image - validation". Est-ce lié à l'erreur qui a été corrigée ou cela peut-il signifier une perte de précision? Je veux dire, si on utilisait peu d'images, les résultats ne seraient pas ceux attendus?

0
Denis