web-dev-qa-db-fra.com

Quelle est la bonne façon de changer l'ordre des canaux d'image entre les canaux en premier et les derniers?

Je ne peux pas pour la vie de comprendre comment changer l'ordre des images. les images sont lues au format (x, x, 3), mais elles doivent également être au format (3, x, x). J'ai essayé de changer l'ordre avec numpy.array([img[:,:,i] for i in range(3)])

je suppose que le travail est fait, mais c’est moche et je ne vois pas comment l’inverser pour récupérer l’image d’origine.

22
Kuysea

Pour réorganiser les données

Vous pouvez utiliser numpy.rollaxis pour faire rouler l’axe 3 en position 1 (si vous avez la taille du lot en tant que dimension 0).

np.rollaxis(imagesArray, 3, 1)  

Toutefois, si vous utilisez des keras, vous pouvez modifier sa configuration ou la définir par couche. Theano n’exige rien de votre part si vous utilisez Keras.

Les keras peuvent être configurés avec les canaux en premier ou en dernier, ce qui vous permet également de le définir dans chaque couche afin que vous n'ayez pas à modifier vos données.

Pour configurer les keras

Trouvez le keras.json fichier et le changer. Le fichier est généralement installé dans C:\Users\yourusername\.keras ou ~/.keras selon votre système d'exploitation.

Changement "image_data_format": "channels_last" à "channels_first" ou vice-versa, comme vous le souhaitez.

Habituellement, travailler avec "channels_last" est moins gênant en raison du grand nombre d’autres fonctions (non convolutives) qui ne fonctionnent que sur le dernier axe.

Définir l'ordre des canaux dans les couches.

Le documentation de Keras contient toutes les informations sur les paramètres des couches, y compris le data_format paramètre.

21
Daniel Möller

Je suis d’accord avec le commentaire de @Qualia, np.moveaxis (a, source, destination) est plus facile à comprendre. Cela fait le travail:

x = np.zeros((12, 12, 3))
x.shape
#yields: 
(12, 12, 3)

x = np.moveaxis(x, -1, 0)
x.shape
#yields: 
(3, 12, 12)
11
cemsazara
x = np.zeros((12, 12, 3))
y = np.rollaxis(x, 2, 0)
y.shape

(3, 12, 12)
0
Noosh