web-dev-qa-db-ja.com

最初にチャンネルと最後にチャンネル間で画像チャンネルの順序を変更する正しい方法は何ですか?

画像の順序を切り替える方法を理解することはできません。画像は(x、x、3)形式で読み取られますが、theanoでは(3、x、x)形式である必要があります。 numpy.array([img[:,:,i] for i in range(3)])で順序を変えてみました

私はそれが仕事を完了すると思いますが、それはbothく、元の画像を取り戻すためにそれを逆にする方法を見つけることができません。

22
Kuysea

データを並べ替えるには

numpy.rollaxis を使用して、軸3を位置1に移動できます(次元0としてバッチサイズがあると考えてください)。

np.rollaxis(imagesArray, 3, 1)  

ただし、kerasを使用している場合は、構成を変更するか、レイヤーごとに定義することをお勧めします。 Keanoを使用している場合、Theanoは何も必要としません。

Kerasは、個々のレイヤーごとに定義できるほか、チャンネルを最初に、または最後にチャンネルを設定できるため、データを変更する必要はありません。

Kerasを構成するには

keras.jsonファイルを見つけて変更します。ファイルは通常、OSに応じてC:\Users\yourusername\.kerasまたは~/.kerasにインストールされます。

"image_data_format": "channels_last""channels_first"に、またはその逆に変更します。

通常、「channels_last」での作業は、最後の軸でのみ機能する他の(畳み込みではない)関数が大量にあるため、それほど面倒ではありません。

レイヤーでのチャネル順序の定義。

Keras documentation には、data_formatパラメーターを含む、レイヤーのパラメーターに関するすべての情報が含まれています。

21
Daniel Möller

@Qualiaのコメントに同意します。 np.moveaxis(a、source、destination) を理解する方が簡単です。これは仕事をします:

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