1
我正在开发超解析度的CNN。培训顺利,不存在过度拟合,但是当我尝试低分辨率图像上训练的网络,输出图像已经改变了颜色:超分辨率期间的颜色变化
输入图像
输出图像
即使经过较长时间的训练,结果也保持不变。有人曾经遇到类似的问题吗?
我的第一个想法是将输出激活函数更改为从0到1(sigmoid)而不是ReLu,但没有任何改进。
这里是我的网络中Keras实施:
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/? –