2 votes

Etendre un modèle pré-entrainé Keras aux images avec des canaux ou bandes supplémentaires.

Je voulais simplement clarifier quelques informations sur un post précédent qui traite de la façon dont un modèle pré-entraîné Keras comme VGG ou InceptionV3 peut être étendu à des images de tailles différentes. Mon problème est que j'ai des images satellites qui viennent en 8 bandes. Ainsi, une image pourrait être 650x650x8 au lieu des images habituelles à 3 bandes RGB. Je voulais savoir si je pouvais utiliser un modèle pré-entraîné Keras sur des images avec 8 bandes au lieu de 3 bandes.

Il y a un post original qui traite quelque chose de similaire à cela. Le post de référence concernait l'application d'un modèle pré-entraîné Keras VGG sur une image de taille différente. Ainsi, VGG a été entraîné sur 224x224x3 et l'utilisateur voulait utiliser ce modèle sur une image de 160x320x3.

Voici le post original : Changer la forme du tenseur d'entrée pour l'application VGG16

Voici le code du post original :

from keras.models import Model
from keras.layers import Dense,Flatten
from keras.applications import vgg16
from keras import backend as K

model = vgg16.VGG16(weights='imagenet', include_top=False, input_shape=(160,320,3))
model.summary(line_length=150)

flatten = Flatten()
new_layer2 = Dense(10, activation='softmax', name='my_dense_2')

inp2 = model.input
out2 = new_layer2(flatten(model.output))

model2 = Model(inp2, out2)
model2.summary(line_length=150)

Donc si je devais substituer la 6ème ligne par quelque chose comme :

model = vgg16.VGG16(weights='imagenet', include_top=False, input_shape=(650,650,8))

Est-ce que ça fonctionnerait, ou est-ce que le modèle pré-entraîné n'accepterait pas une augmentation du nombre de canaux comme il accepterait un changement de hauteur ou de largeur de l'image ?

De plus, je devrais effectuer une formation supplémentaire sur le modèle avec les canaux supplémentaires. Mais je ne suis pas clair sur la manière dont le modèle pré-entraîné implémente cette extension. Est-ce que les poids pour les nœuds ajoutés sont simplement définis à 0 ou à des poids initialisés quelconques ? J'essaie de mesurer combien de formation supplémentaire je devrais faire.

Merci pour tout conseil ou suggestion.

1voto

sdcbr Points 4370

Depuis la documentation de Keras :

input_shape: tuple de forme optionnelle, à spécifier uniquement si include_top est False (sinon la forme d'entrée doit être (224, 224, 3) (avec le format de données 'channels_last') ou (3, 224, 224) (avec le format de données 'channels_first'). Il devrait y avoir exactement 3 canaux d'entrée, et la largeur et la hauteur ne doivent pas être inférieures à 48. Par exemple, (200, 200, 3) serait une valeur valide.

Vous ne pourrez pas utiliser cette implémentation VGG pour des images multispectrales. Comme vous l'avez déjà mentionné, cela introduirait des poids supplémentaires au modèle qui n'ont pas été pré-entraînés.

Les réseaux neuronaux pour les images multispectrales sont un sujet de recherche très actif, mais je crains qu'il y ait peu de solutions prêtes à l'emploi telles que les réseaux pré-entraînés sur imagenet. Vous pourriez essayer une technique de réduction de dimensionnalité comme l'ACP pour compresser vos images en trois canaux. Ou entraîner une architecture personnalisée qui prend des images à huit canaux en entrée.

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