Je travaille sur un CNN qui fait de la super-résolution. La formation va bien, il n'y a pas overfitting mais lorsque je tente le réseau formé sur une image à faible résolution, l'image de sortie a changé sa couleur:Changement de couleur pendant la super-résolution
L'image d'entrée
L'image de sortie
Même avec un entraînement plus long, le résultat reste le même. Est-ce que quelqu'un a déjà fait face à un problème similaire? Ma première idée était de changer la fonction d'activation de sortie en quelque chose qui va de 0 à 1 (sigmoïde) au lieu d'un ReLu mais il n'y a pas d'amélioration.
Voici mon réseau mis en œuvre en 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')
Pourriez-vous nous expliquer quel est le but ici? Pour quoi optimisez-vous exactement? –
Ce réseau prend une image basse résolution sur-échantillonnée en entrée et apporte une haute résolution. Il a été formé avec des paires d'images basse résolution/haute résolution mais quand j'essaie de le faire avec mon test, les résultats ont été confrontés à un changement de couleur –
En regardant les images d'exemple, il semble que la plage RVB soit inclinée, en mouvement verts en jaunes (ce qui signifie que la dimension verte a une valeur plus élevée que prévu). Cela peut être un artefact de cette image particulière - existe-t-il un biais similaire sur les images contenant des couleurs différentes? Avez-vous essayé d'utiliser une perte différente - https://keras.io/losses/? –