Beim Umschreiben des unter Pytorch in Keras geschriebenen Programms mussten die Achsen des Bilddatenarrays ersetzt werden, damit ich die Methode gemeinsam nutzen kann.
Image Channel Order
Channels First : (N, C, H, W) ← PyTorch Channels Last : (N, H, W, C) ← Keras
** N **: Anzahl der Bilder ** C **: Anzahl der Kanäle (Farbe usw.) ** H **: Bildhöhe ** W **: Bildbreite
Wenn Sie ein Modell mit einem Bilddatenarray wie PyTorch trainieren, wird häufig das Format ** Channels First ** verwendet. Die Reihenfolge der Abmessungen des Bildes ist ** (Kanal, Höhe, Breite) **. An dem Namen können Sie erkennen, dass sich die Dimension Kanal (Farbe) am Anfang des Arrays befindet.
Beim Umgang mit Bilddaten-Arrays in Keras, PIL, OpenCV usw. ist das Format ** Channels Last ** üblich. Die Reihenfolge der Abmessungen des Bildes ist ** (Höhe, Breite, Kanal) **. Sie können anhand des Namens erkennen, dass sich die Kanaldimension am Ende des Arrays befindet.
Channels First → Channels Last
Erstellen Sie temporäre ** Channels First ** Bildarraydaten.
Temporäre Bildarraydaten
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 () war am schnellsten. Bitte verwenden Sie die, die Sie mögen.
[Was ist der richtige Weg, um die Reihenfolge der Bildkanäle zwischen den Kanälen zuerst zu ändern?](https://stackoverflow.com/questions/43829711/what-is-the-correct-way- Ich bezog mich auf (um die Bildkanalreihenfolge zwischen den Kanälen zuerst zu ändern).