web-dev-qa-db-ja.com

Kerasレイヤーの形状変更

入力画像は416x416です。 4 x 10の出力を作成するにはどうすればよいですか(4は列数、10は行数)。

ラベルデータは、4列10行の2D配列です。

reshape()メソッドについては知っていますが、結果の形状には入力と同じ要素数が必要です。

416 x 416の入力サイズと最大プールレイヤーを使用すると、最大13 x 13出力を取得できます。

データを失うことなく4x10出力を達成する方法はありますか?

私の入力ラベルデータは例えば

[[  0   0   0   0]
 [  0   0   0   0]
 [  0   0   0   0]
 [  0   0   0   0]
 [  0   0   0   0]
 [  0   0   0   0]
 [  0   0   0   0]
 [116  16 128  51]
 [132  16 149  52]
 [ 68  31  77  88]
 [ 79  34  96  92]
 [126  37 147 112]
 [100  41 126 116]]

これは、検出したい画像上に6つのオブジェクトがあることを示しています。最初の値はxmin、2番目のymin、3番目のxmax、4番目のymaxです。

ネットワークの最後の層は次のようになります

(None, 13, 13, 1024)
7
Darlyn

予測の形状を目的の出力に適合させる最も簡単な方法は、@ Darlynによって提案されたソリューションだと思います。あなたがこれまでに持っていたネットワークが宣言されたと仮定します(それは形状(13, 13, 1024))このように:

x = Input(shape=(416, 416, 3))
y = Conv2D(32, activation='relu')(x)
...
y = Conv2D(1024, activation='relu')(y)

ボックスを予測しようとする回帰レイヤーを追加し、これらを(10, 4)

from keras.layers import Flatten, Dense, Reshape

samples = 1
boxes = 10

y = Flatten(name='flatten')(model.outputs)
y = Dense(boxes * 4, activation='relu')(y)
y = Reshape((boxes, 4), name='predictions')(y)
model = Model(inputs=model.inputs, outputs=y)

x_train = np.random.randn(samples, 416, 416, 3)

p = model.predict(x_train)
print(p.shape)

(1、10、4)

これは機能しますが、これらの値を直接回帰すると良い結果が得られることは完全に安全ではありません。私は通常、注意、領域、または顕著性を使用してオブジェクトの位置を決定するオブジェクト検出モデルを見ます。試すことができるオブジェクト検出kerasの実装がいくつかあります。

keras-rcnn

classes = ["dog", "cat", "hooman"]

backbone = keras_rcnn.models.backbone.VGG16
model = keras_rcnn.models.RCNN((416, 416, 3), classes, backbone)
boxes, predictions = model.predict(x)

keras-retinanet

from keras_retinanet.models.resnet import resnet_retinanet

x = Input(shape=(416, 416, 3))
model = resnet_retinanet(len(classes), inputs=x)
_, _, boxes, _ = model.predict_on_batch(inputs)
1
ldavid

最初に_(None, 13, 13, 1024)_レイヤーを平坦化します

_model.add(Flatten())
_

それは_13*13*1024=173056_を与えます

1次元テンソル

次に、密なレイヤーを追加します

model.add(Dense(4*10)) 40に出力されます

これにより、3D形状が1Dに変換されます

必要に応じてサイズを変更するだけです

model.add(Reshape(4,10))

これは機能しますが、データの空間的性質を完全に破壊します

1
Atta Jutt