Lors de la réécriture du programme écrit sur les prémisses de Pytorch vers Keras, il était nécessaire de changer les axes du tableau de données d'image, donc je vais partager la méthode.
Image Channel Order
Channels First : (N, C, H, W) ← PyTorch Channels Last : (N, H, W, C) ← Keras
** N **: Nombre d'images ** C **: Nombre de canaux (couleur, etc.) ** H **: Hauteur de l'image ** W **: Largeur de l'image
Lors de l'entraînement d'un modèle avec un tableau de données d'image tel que PyTorch, le format ** Channels First ** est courant. L'ordre des dimensions de l'image est ** (canal, hauteur, largeur) **. Vous pouvez dire d'après le nom que la dimension Channel (Color) se trouve au début du tableau.
Lorsqu'il s'agit de tableaux de données d'image dans Keras, PIL, OpenCV, etc., le format ** Channels Last ** est courant. L'ordre des dimensions de l'image est ** (Hauteur, Largeur, Canal) **. Vous pouvez dire à partir du nom que la dimension Channel est à la fin du tableau.
Channels First → Channels Last
Créez un tableau d'images temporaires ** Channels First **
Données de matrice d'images temporaires
img = np.arange(100*64*64*3).reshape(-1,3,64,64)
img.shape
(100, 3, 64, 64)
np.transpose()
%%timeit
img.transpose(0,2,3,1).shape
(100, 64, 64, 3)
791 ns ± 92.8 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
np.swapaxes()
%%timeit
np.swapaxes(img, 1, 3).shape
(100, 64, 64, 3)
1.54 µs ± 410 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
np.moveaxes()
%%timeit
np.moveaxes(img, 1, 3).shape
(100, 64, 64, 3)
9.29 µs ± 956 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
np.rollaxes()
%%timeit
np.rollaxes(img, 1, 4).shape
(100, 64, 64, 3)
2.89 µs ± 358 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
np.einsum()
%%timeit
np.einsum('ijkl->ilkj', img).shape
(100, 64, 64, 3)
1.77 µs ± 210 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
np.transpose () était le plus rapide. Veuillez utiliser celui que vous aimez.
[quelle-est-la-bonne-façon-de-changer-l'ordre-de-canal-d'image-entre-canaux-d'abord](https://stackoverflow.com/questions/43829711/what-is-the-correct-way- Je me suis référé à-changer-image-channel-ordering-between-channels-first).