私は200億のジェスターデータセットを使用してジェスチャ認識システムを構築しています。現在、私は4つのクラスのみに取り組んでいます。データセットは、12フレーム/秒の速度でビデオから抽出された画像で構成されています。3D-CNNとCNN-LSTMの2つのモデルを作成しましたが、ケラとTensorflowを使用した場合にのみ25〜30%の精度が得られました。
Dataset looks like X_train = (651, 1, 128, 128, 22)
X_valid=(260, 1, 128, 128, 22)
Y_train=(651, 4)
Y_valid = (260, 4)
画像サイズは128 * 128、1チャンネルで、サンプル総数として651枚ずつ22枚ずつ追加しています。3d-CNNアーキテクチャ
model = Sequential()
model.add(Convolution3D(32, (3, 3, 3), strides=(1, 1, 1), input_shape=(1, img_rows, img_cols, img_depth),
activation='relu', data_format='channels_first'))
model.add(MaxPooling3D((3, 3, 3), data_format='channels_first'))
model.add(Dropout(0.5))
model.add(Flatten())
model.add(Dense(512, activation='sigmoid'))
model.add(Dropout(0.5))
model.add(Dense(nb_classes, kernel_initializer='normal'))
model.add(Activation('softmax'))
CNN-LSTMモデルアーキテクチャ
(651, 22, 128, 128, 1)
(260, 22, 128, 128, 1)
(651, 4)
(260, 4)
model = Sequential()
model.add(TimeDistributed(Conv2D(32, (7, 7), strides=(2, 2),
activation='relu', padding='same'), input_shape=input_shape))
model.add(TimeDistributed(Conv2D(32, (3, 3),
kernel_initializer="he_normal", activation='relu')))
model.add(TimeDistributed(MaxPooling2D((2, 2), strides=(2, 2))))
model.add(TimeDistributed(Conv2D(64, (3, 3),
padding='same', activation='relu')))
model.add(TimeDistributed(Conv2D(64, (3, 3),
padding='same', activation='relu')))
model.add(TimeDistributed(MaxPooling2D((2, 2), strides=(2, 2))))
model.add(TimeDistributed(Conv2D(128, (3, 3),
padding='same', activation='relu')))
model.add(TimeDistributed(Conv2D(128, (3, 3),
padding='same', activation='relu')))
model.add(TimeDistributed(MaxPooling2D((2, 2), strides=(2, 2))))
model.add(TimeDistributed(Conv2D(256, (3, 3),
padding='same', activation='relu')))
model.add(TimeDistributed(Conv2D(256, (3, 3),
padding='same', activation='relu')))
model.add(TimeDistributed(MaxPooling2D((2, 2), strides=(2, 2))))
model.add(TimeDistributed(Conv2D(512, (3, 3),
padding='same', activation='relu')))
model.add(TimeDistributed(Conv2D(512, (3, 3),
padding='same', activation='relu')))
model.add(TimeDistributed(MaxPooling2D((2, 2), strides=(2, 2))))
model.add(TimeDistributed(Flatten()))
model.add(Dropout(0.5))
model.add(LSTM(256, return_sequences=False, dropout=0.5))
model.add(Dense(nb_classes, activation='softmax'))
データセットは各クラスからの100ジェスチャとバランスが取れており、モデルを100エポック実行しました。アーキテクチャは正しいですか?画像のフィードについても疑問があります。私はビデオに取り組んでいるので、時間的特徴を抽出するために追加の次元が必要なので、最初に1つの配列に22の画像を追加し、同様に追加し続けますが、それは正しい方法ですか?最初に22ではなく12で試しましたが、同じ結果になりました。
以下はいくつかの提案です
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加