Автоэнкодер выдает изображение с белой прозрачной рамкой - PullRequest
0 голосов
/ 10 марта 2020

Я обучил автокодеру для FontRecognition из бумаги DeepFont . В результате получается странная белая рамка вокруг изображения.

Вот мой код и краткое описание автоэнкодера

autoencoder = Sequential()
autoencoder.add(Conv2D(64, kernel_size=(11,11), strides=2, activation='relu', padding='valid', input_shape=(105,105,1)))
autoencoder.add(MaxPooling2D(pool_size=(2,2), strides=2, padding='same'))
autoencoder.add(Conv2D(128, kernel_size=(1,1), strides=1, activation='relu', padding='same'))

autoencoder.add(Conv2DTranspose(64, kernel_size=(1,1), strides=1, activation='relu', padding='same', kernel_initializer='uniform'))
autoencoder.add(UpSampling2D(size=(2,2)))
autoencoder.add(Conv2DTranspose(1, kernel_size=(11,11), strides=(2,2), activation='relu', padding='valid', kernel_initializer='uniform'))


autoencoder.summary()

autoencoder.compile(optimizer="adam" , loss='mean_squared_error')

X_train = X_train.reshape(len(X_train), 105,105, 1)
X_train = X_train.astype('float64')
X_train /= 255

X_val = X_val.reshape(len(X_val), 105,105, 1) 
X_val = X_val.astype('float64')
X_val /= 255

history = autoencoder.fit(X_train, X_train, epochs=50, batch_size=128, shuffle=True, validation_data=(X_val,X_val))

Это резюме.

Model: "sequential"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv2d (Conv2D)              (None, 48, 48, 64)        7808      
_________________________________________________________________
max_pooling2d (MaxPooling2D) (None, 24, 24, 64)        0         
_________________________________________________________________
conv2d_1 (Conv2D)            (None, 24, 24, 128)       8320      
_________________________________________________________________
conv2d_transpose (Conv2DTran (None, 24, 24, 64)        8256      
_________________________________________________________________
up_sampling2d (UpSampling2D) (None, 48, 48, 64)        0         
_________________________________________________________________
conv2d_transpose_1 (Conv2DTr (None, 105, 105, 1)       7745      
=================================================================
Total params: 32,129
Trainable params: 32,129
Non-trainable params: 0
_________________________________________________________________

Я обучил AE для размер партии 128 и 50 эпох с использованием Google Colab. Результат для последних эпох - loss - 0.0043 и val_loss - 0.0043

Итак, я запустил этот код для построения графика

decoded_imgs = autoencoder.predict(X_val)

n = 10
plt.figure(figsize=(20, 4))
for i in range(n):
    # display original
    ax = plt.subplot(2, n, i+1)
    plt.imshow(X_val[i+10].reshape(105, 105))
    plt.gray()
    ax.get_xaxis().set_visible(False)
    ax.get_yaxis().set_visible(False)

    # display reconstruction
    ax = plt.subplot(2, n, i + n +1)
    plt.imshow(decoded_imgs[i+10].reshape(105, 105))
    plt.gray()
    ax.get_xaxis().set_visible(False)
    ax.get_yaxis().set_visible(False)
plt.show()

, и в результате получились изображения с наложенной белой рамкой. Есть идеи, как это происходит? вот результат изображения

...