J'essayais d'utiliser ma modification de l'exemple de code dans la documentation de Keras qui montre comment configurer image_datagen.flow_from_directory() dans le cas où les masques d'image sont utilisés à la place de étiquettes (pour la segmentation d'image, où nous prévoyons une classe pour chaque pixel). Par ailleurs, j'ai défini featurewise_center = True pour tenter de soustraire la moyenne de chaque canal de couleur de toutes les images d'entraînement des canaux de couleur de chaque image, de sorte que sur l'ensemble du jeu d'apprentissage, chaque moyenne de canal de couleur soit 0. Je m'attends à ce que ce ne soit pas le moyen d'accomplir cela.Keras pour la segmentation sémantique, erreur flow_from_directory()
Quoi qu'il en soit, voici mon code qui a généré l'erreur:
image_datagen = ImageDataGenerator(featurewise_center = True)
mask_datagen = ImageDataGenerator()
image_generator = image_datagen.flow_from_directory(
'/home/icg/Martin/train_data_graz/images_rect_r640x360',
class_mode = None,
batch_size = 1,
seed = 123)
mask_generator = mask_datagen.flow_from_directory(
'/home/icg/Martin/train_data_graz/labels_rect_r640x360',
class_mode = None,
batch_size = 1,
seed = 123)
# combine generators into one which yields image and masks
train_generator = zip(image_generator, mask_generator)
model.fit_generator(
train_generator,
steps_per_epoch = 1000,
epochs = 100)
Et voici le message d'erreur:
Found 0 images belonging to 0 classes.
Found 0 images belonging to 0 classes.
Traceback (most recent call last):
File "FCN_VGG16.py", line 178, in <module>
train_generator = zip(image_generator, mask_generator)
File "/home/icg/rafa/local/lib/python2.7/site-packages/keras/preprocessing/image.py", line 1026, in next
index_array, current_index, current_batch_size = next(self.index_generator)
File "/home/icg/rafa/local/lib/python2.7/site-packages/keras/preprocessing/image.py", line 720, in _flow_index
current_index = (self.batch_index * batch_size) % n
ZeroDivisionError: integer division or modulo by zero
Pour une raison n = 0. Toutes les idées pour lesquelles cela pourrait se produire?
Je comprends que processus, la façon dont on fait habituellement la classification. Cependant, avec la segmentation sémantique, on a un certain nombre de classes dont TOUS peuvent apparaître dans n'importe quelle image. Ce n'est donc pas aussi simple que d'avoir un dossier pour les chats et un autre pour les chiens. Il faut classer chaque pixel comme appartenant à l'une ou l'autre classe. Pour ce faire, on utilise des masques à la place des étiquettes. Pour chaque image de l'ensemble d'entraînement, on a un masque qui spécifie à quelle catégorie appartient chaque pixel - si c'est un pixel qui fait partie d'une voiture, ou d'un chat, ou quelles que soient les catégories que l'on classe. –
Je vois. Mais encore - vous devez placer toutes vos images dans un sous-répertoire du répertoire que vous dirigez votre 'flow_from_directory'. Cela s'applique également à 'class_mode = None'. Avez-vous essayé cela? – petezurich
Aha, ça a fait l'affaire. J'avais placé le chemin vers le dossier contenant les images elles-mêmes, plutôt que le chemin vers le dossier contenant un DOSSIER contenant les images. Merci! :-) –