[PYTHON] Kanal zum ersten Datenkanal zum letzten machen

Einführung

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

Kanäle zuerst

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.

Kanäle zuletzt

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)

Methode 1: np.transpose ()

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)

Methode 2: np.swapaxes ()

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)

Methode 3: np.moveaxes ()

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)

Methode 4: np.rollaxes ()

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)

Methode 5: np.einsum ()

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)

Schließlich

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).

Recommended Posts

Kanal zum ersten Datenkanal zum letzten machen
Erste Satellitendatenanalyse von Tellus