电子说
图像修复(Image inpainting)是一个已经被广泛研究的计算机视觉问题,即恢复图像中缺失的部分。斯坦福大学CS230课程的Mark Sabini等人提出“Image outpainting”,比图像修复更进一步,能从一个图像片段“推断”出外延的部分,补全成整个画面。这篇论文获得了CS230期末poster的第一名,效果非常惊艳。
这是Painting Outside the Box: Image Outpainting 这篇论文的代码实现。这篇论文在吴恩达的斯坦福大学CS230课程中获得了期末Poster的第一名。
图像修复(Image inpainting)是一个已经被广泛研究的计算机视觉问题,涉及恢复图像中缺失的部分。
目前最先进的图像修复方法方法包括Satoshi Iizuka等人在SIGGRAPH 2017提出的基于GAN的方法[1],以及NVIDIA的Guilin Liu等人提出的基于CNN的方法[2]。
在这个研究中,我们的目标是将[1]的方法拓展到修复图像之外的部分(outpainting),即补全超出图像边界的画面。
通过递归地进行outpainting,可以任意地扩展图像。
问题描述和数据准备
给定一幅 m × n 的源图像 ,生成一幅 m × (n + 2k) 的图像,其中
要解决的问题是:m=128,n=64,k=32
数据
baseline图像:128×128的RGB城市图像
数据集:Place365-Standard [3]
包含36500张256×256的RGB图像,被降低采样到128×128
100张图像用于验证
Place365数据集中城市图像的样本
数据预处理:
给定图像,标准化成 [0,1] →
定义mask M:
定义补足的mask
计算
设
堆叠
输出
方法
训练Pipeline:
使用与文献[1]类似的DCGAN结构(G,D);
给定Itr,进行预处理来得到In和Ip;
运行G(Ip)来得到outpainted的图像Io;
在Io和ground-truth In上运行D;
训练Schedule:
用于调节G和D的三阶段训练;
阶段i:使用Adam(Ir=0.0001,β1=0.9,β2=0.999,ε=10-8)在迭代Ti中优化损失(i);
在18:2:80的分片中选择T1,T2,T3
α=0.0004控制MSE损失
后处理:
将Io重整化为[0,255]→
使用泊松克隆(Seamless Cloning)来将和进行混合
模型
结构
除了G和D的最后一层之外,每一层都是ReLU。G和D的输出是Sigmoid函数。其中,η是伸缩因子(dilation factors)。
Outpainting
验证集中保留图像样本的修复结果,与原始ground-truth一起显示。模型训练了100个时段(相当于227,500次迭代),批量大小为16。
Places365的MSE损失
在Place365中训练MSE损失。不同阶段的背景颜色是不同的。在阶段3中,由于将联合损失(joint loss)进行了优化,MSE损失有小幅度增长。
本地标识符(Local Discriminator)
使用本地标识符进行训练,减少了垂直条带并提高了色彩保真度,但是增加了artifact和训练时间。
扩张(dilation)的影响
网络的训练在城市图像上过拟合了。在扩张不足的情况下,由于接受域有限,网络无法outpaint。
递归的outpainting
在扩展和填充之后,可以将图像输入到网络中。递归地将这个过程进行重复操作,将图像的宽度扩大到3.5。正如期望的那样,噪声随着连续迭代而混合。
结论
最终实现了图像的outpainting;
三阶段的训练有助于其稳定性;
对于outpainting,扩张卷积对充分的神经元接受域至关重要
虽然会伴随噪声和误差,但对outpainting进行递归是可行的。
用Keras实现Image Outpainting
在代码实现中,我们对256*256的图像进行了一些修改:
添加了Identity loss,即从生成的图像到原始图像
从训练数据中删除了patches(训练pipeline)
用裁减(cropping)代替了掩膜(masking)(训练pipeline)
添加了卷积层
结果
模型用海滩的数据训练了200 epochs。
Recursive painting
用Keras实现Image Outpainting
1. 准备数据:
2. 构建模型
要从头开始构建模型,你可以直接运行’outpaint.ipynb',或
你可以下载训练完成模型,并将其移到“checkpoint/”,然后运行它。
全部0条评论
快来发表一下你的评论吧 !