本文为通用视觉框架OpenMMLab系列课程 第七讲 底层视觉(下)-图像修复的记录。
加入GAN损失之后,细节会逼真和清晰一点。
Coarse NetWork
常规操作
- 输入:待修补图像 + mask(标注待修复区域)
- 输出:粗修复结果
- DilateConv:增大感受野(毕竟已知区域可能距离很远,而修补只能从已知区域去获取信息,与分割检测等任务不同的是,图像修复位置本身是没语义信息的)
其他: - 镜像padding
- remove BN(WGAN-GP中就移除了BN)
- ELU替换ReLu
- clip the output filter values instead of using tanh or sigmoid functions.(?指代哪部分,激活函数用ELU?)
- GAN训练部分,分离global部分和local部分
Spatially discounted reconstruction loss
空间权重衰减的loss:在缺失区域,“合理”的修补结果有很多种,如果只用ground truth做为唯一的衡量标准是不合理的。
从待修复区域的边缘向中心区域看,离边缘越远,其"合理"的情况会越多。而边缘部分和已知区域相连着,其纹理颜色等受已知区域限制更大,因此其可能情况会更少。
因此给边缘部分的loss更大的权重,而离边缘越远,其权重衰减越厉害。
注:反卷积后重叠的部分求均值。这部分就是对粗生成的区域关联已知区域,还是找和前景最相似的背景区域,然后用背景区域来辅助refine生成。
ForeGround即生成区域,将已知区域(background)的feature map划分为一个个小区域如(3 x 3)就得到上图中那橙色的长条,用这些小区域分别依次与foreground的每个部分(3 x 3)求cosine距离。分别找到与前景每个小区域最相似的背景小区域。随后依次用这些小的background做为deconvolutional filters去refine,结果重叠的部分求均值。
补充:部分卷积 Partial Convolutional(PConv)
部分卷积将卷积分为了输入图片的卷积和输入掩码mask的卷积。之前的论文都是只在第一层使用mask,mask也不会得到跟新,本文的partial convolutions,每次都使用跟新后的mask,随着网络层数的增加,mask输出m’中为0的像素越来越少,输出的结果x’中有效区域的面积越来越大,mask对整体loss的影响会越来越小(如上图所示,表示了不同层的mask输出)。