異なる背景に対する学習精度の変化
狙い
CNNを利用したネットワークでは認識したい物体の背景が学習に影響を与えると考えられている。
今回の記事ではその現象を実験的に示した。
データ
丸と四角をクラスとする2値分類問題とする。
グループ1(背景差なし)
グループ2(背景差あり)
各グループにおいて、クラス違い、背景違いで等分されるようにTrain,Testに分割した。
モデル
# モデルの定義 model = Sequential() model.add(Conv2D(32,3,input_shape=(256,256,3),kernel_initializer='glorot_uniform')) model.add(Activation('sigmoid')) model.add(Conv2D(32,3,kernel_initializer='glorot_uniform')) model.add(Activation('relu')) model.add(MaxPool2D(pool_size=(2,2))) model.add(Conv2D(64,3,kernel_initializer='glorot_uniform')) model.add(Activation('relu')) model.add(MaxPool2D(pool_size=(2,2))) model.add(Conv2D(128,3,kernel_initializer='glorot_uniform')) model.add(Activation('relu')) model.add(MaxPool2D(pool_size=(2,2))) model.add(Conv2D(64,3,kernel_initializer='glorot_uniform')) model.add(Activation('relu')) model.add(MaxPool2D(pool_size=(2,2))) model.add(Conv2D(64,3,kernel_initializer='glorot_uniform')) model.add(Activation('relu')) model.add(MaxPool2D(pool_size=(2,2))) model.add(Conv2D(64,3,kernel_initializer='glorot_uniform')) model.add(Activation('relu')) model.add(MaxPool2D(pool_size=(2,2))) model.add(Flatten()) model.add(Dense(1024)) model.add(Activation('relu')) model.add(Dropout(1.0)) model.add(Dense(2, activation='softmax')) rms = RMSprop(lr=0.0005, rho=0.9, epsilon=None, decay=0.0) run_options = tf.RunOptions(report_tensor_allocations_upon_oom = True) model.compile(optimizer=rms, loss='binary_crossentropy', metrics=["accuracy"],options=run_options)
結果
グループごとのvalidation error
val_error | 1回目 | 2回目 | 3回目 |
---|---|---|---|
G1 (背景差なし) | 81.25% | 81.25% | 87.50% |
G2 (背景差あり) | 62.50% | 56.25% | 68,75% |