Мы пытаемся выполнить генерацию условного изображения, где «условие» - это изображение ткани тела в момент времени t, а на выходе - изображение той же ткани в момент времени t + 1.
До сих пор мы пробовали автоэнкодеры CNN двумя способами.
Первый способ - это архитектура с 3-канальным входом и 3-канальным выходом, в которой разные каналы представляют разные аспекты одной и той же ткани.
ВторойСпособом является 3-канальный вход и 1-канальный выход, для каждого из аспектов.Затем мы объединяем все выходные данные и вычисляем потери.
#This is one of the models we've been using:
model = Sequential()
model.add(Conv2D(32, (5,5) , strides = (2,2), input_shape = (148,148,3) , padding = "SAME",kernel_initializer = 'random_normal'))
model.add(BatchNormalization())
model.add(Activation(myact))
model.add(Dropout(0.1))
model.add(Conv2D(64, (5,5) , strides = (2,2) , padding = "SAME",kernel_initializer = 'random_normal'))
model.add(BatchNormalization())
model.add(Activation(myact))
model.add(Dropout(0.1))
model.add(Flatten())
model.add(Dense(64))
model.add(BatchNormalization())
model.add(Activation(myact))
model.add(Dense(37*37*64))
model.add(BatchNormalization())
model.add(Activation(myact))
model.add(layers.Reshape((37,37,64)))
model.add(Conv2DTranspose(64, (5, 5), strides=(2, 2), padding='SAME', use_bias=False))
model.add(BatchNormalization())
model.add(Activation(myact))
model.add(Dropout(0.1))
model.add(Conv2DTranspose(32, (5, 5), strides=(2, 2), padding='SAME', use_bias=False))
model.add(BatchNormalization())
model.add(Activation(myact))
model.add(Dropout(0.1))
model.add(Conv2D(32, (5,5) , strides = (1,1) , padding = "SAME",kernel_initializer = 'random_normal'))
model.add(BatchNormalization())
model.add(Activation(myact))
model.add(Dropout(0.1))
model.add(Conv2D(3, (5,5) , strides = (1,1) , padding = "SAME",kernel_initializer = 'random_normal'))
model.add(Activation(myact))
Мы получили хорошие результаты с обоими методами, которые мы попробовали.Однако есть ли более подходящий способ сделать это?