本文已置于https://github.com/tedqin/GAN-ImageRepairing
总体设计
和典型的使用神经网络来实现目的方法一样,简单来讲,基于DCGAN的图像修复首先需要先训练出一组优秀的生成器和判别器,然后利用这一组训练好的模型进行图像修复。
首先第一步需要进行图像预处理,这是因为DCGAN的模型结构决定了图像的尺寸大小是64”×” 64”×” 3,进行图像预处理之后,由于神经网络需要矩阵形式的输入,所以修复流程的首要步骤就是将图像分解为样本点,这个步骤可以由判别器的卷积实现,然后生成器和判别器进行博弈,得到训练好的模型,由生成器快速生成伪造的图像,然后建立适当的损失函数和惩罚因子来寻找修复图像所需要的最佳伪造图像。
由此,总的系统流程主要可以分为三步:
- 图像预处理。
- 训练DCGAN模型。
- 找到补全原图像所需要的最佳伪造图像,进行图像修复。
图像预处理
Openface预处理
Openface是一个基于深度神经网络的开源人脸识别系统。
- 用OpenCV或者dlib中预训练好的模型检测人脸
- 将人脸迁移到神经网络。利用dlib的实时姿态估计与OpenCV的仿射线变换来使人脸的眼睛和嘴唇出现在每个图像上的相同位置。
- 使用深度神经网络将面部表示(或嵌入)在128维单位超球面上。这种嵌入方法可以通用于任何人脸表示上面。与其他的一些人脸表征方法不同,这种人脸嵌入方法具有很好的性质,两个嵌入人脸间的距离较大就意味着这两幅面孔可能不是来自于同一个人。
运用Openface来消除除了人脸外的其他的因素,比如背景、发型等等,然后移动图像,使得数据集中的每个人的人脸区域居于整张图片的中央。
构建掩膜
为了能够评估修复结果,需要知道被损坏图像之前的样子。我采用给未损坏图像一个二进制掩膜来作为损坏区域,这样就可以在修复掩膜之后,对比修复前的图像进行修复效果评估。
训练
训练过程中,定义了一个采样器,在每一个epoch训练完成以后,用采样器对生成器进行采样并且保存样例图像
在20个epoch训练完成以后,生成的图像效果已经比较好,此时生成器和判别器的损失函数变化如图
修复
部分结果如下: