Это действительно возможно с GAN.На самом деле заполнение недостающих частей изображения является одним из самых крутых приложений GAN.Вы можете найти именно то, что вам нужно, в теме Изображение с изображениями этой превосходной статьи о приложениях GAN.
Вы можете найти реализованный код Inpainting для изображений здесь.https://github.com/pathak22/context-encoder
У вас может быть огромный (по крайней мере, порядка 10000 с) полный набор данных изображений.Функция потери, которую я бы предложил, заключается в следующем, где она может создать битву между генератором (G) и дискриминатором (D).
def loss_func(logits_in,labels_in):
return tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(logits=logits_in,labels=labels_in))
G = generator(z)
D_output_real,D_logits_real=discriminator(real_images)
D_output_fake,D_logits_fake=discriminator(G,reuse=True)
D_real_loss=loss_func(D_logits_real,tf.ones_like(D_logits_real)*0.94) #Smoothing for generalization
D_fake_loss=loss_func(D_logits_fake,tf.zeros_like(D_logits_real))
D_loss=D_real_loss+D_fake_loss
G_loss= loss_func(D_logits_fake,tf.ones_like(D_logits_fake))
Однако GAN являются чрезвычайно дорогими в вычислительном отношении.Поскольку битва между генератором и дискриминатором может длиться даже недели, чтобы получить желаемый результат, особенно если разрешение изображения высокое.Просто чтобы дать вам некоторую подсказку, GAN, который я запускал на своем RTX 2080 Ti GPU для генерации изображений, работал 3 недели, чтобы дать приемлемые результаты с 200000 (218 160) изображений размером.
Так что наберитесь терпения и удачи.