1
超解像度を行うCNNで作業しています。トレーニングがうまくいく、何のオーバーフィッティングはありませんが、私は低解像度の画像に訓練されたネットワークをしようとすると、出力画像は、その色変更されました:超解像度時の色の変化
入力画像
を出力画像
長いトレーニングでも、結果は同じままです。誰かが似たような問題に直面したことはありますか?
私の最初のアイデアは、出力活性化機能をReLuの代わりに0から1(シグモイド)に変更することでしたが、改善はありません。人々は最初のYCrCb形式に画像を変換する論文のほとんどで
input_img = Input(shape=(None,None,3))
c1 = Convolution2D(64, (3, 3))(input_img)
a1 = Activation('relu')(c1)
c2 = Convolution2D(64, (3, 3))(a1)
a2 = Activation('relu')(c2)
b2 = BatchNormalization()(a2)
c3 = Convolution2D(64, (3, 3))(b2)
a3 = Activation('relu')(c3)
b3 = BatchNormalization()(a3)
c4 = Convolution2D(64, (3, 3), strides=(2,2), padding='same')(b3)
a4 = Activation('relu')(c4)
b4 = BatchNormalization()(a4)
c5 = Convolution2D(64, (3, 3))(b4)
a5 = Activation('relu')(c5)
b5 = BatchNormalization()(a5)
d1 = Conv2DTranspose(64, (3, 3))(b5)
a6 = Activation('relu')(d1)
b6 = BatchNormalization()(a6)
m1 = add([a4, b6])
a7 = Activation('relu')(m1)
d2 = Conv2DTranspose(64, (3, 3), strides=(2,2), padding='same')(a7)
a8 = Activation('relu')(d2)
b8 = BatchNormalization()(a8)
d3 = Conv2DTranspose(64, (3, 3))(b8)
a9 = Activation('relu')(d3)
b9 = BatchNormalization()(a9)
m2 = add([a2, b9])
a10 = Activation('relu')(m2)
d4 = Conv2DTranspose(64, (3, 3))(a10)
a11 = Activation('relu')(d4)
b10 = BatchNormalization()(a11)
d5 = Conv2DTranspose(3, (3, 3))(b10)
a12 = Activation('relu')(d5)
b11 = BatchNormalization()(a12)
m3 = add([input_img, b11])
a13 = Activation('relu')(m3)
out = Convolution2D(3, (5, 5), activation='sigmoid', padding='same') (a13)
model = Model(input_img, out)
model.compile(optimizer='adam', loss='mae')
目的は何ですか?あなたは正確に何のために最適化していますか? –
このネットワークは、アップサンプリングされた低解像度画像を入力として取り込み、高解像度を得ます。低解像度/高解像度画像のペアで訓練されていますが、私がテストセットでそれをやろうとすると、結果は色の変化に直面します –
サンプル画像を見ると、RGBレンジが歪んでいるようです緑色は黄色になります(緑色の次元は予想よりも高い値を示します)。これはこの特定の画像の人工物であるかもしれません - 異なる色を含む画像に同様のスキューがありますか?別の損失(https://keras.io/losses/)を使ってみましたか? –