1. 摘要

老照片修复中面临着许多的图像处理问题,比如填孔洞、去划痕、上色、去噪等,也就是说包含了多种图像退化问题。而使用深度学习进行训练时往往需要制造样本对,但是真实的低质量数据包含多种退化问题,想要通过正常图像模拟出完全符合数据分布的低质量图像几乎是不可能的。(同样的问题在Deblur、SR、Denoise等Low level问题中也有遇到)

为了回避样本制造的问题,本文将老照片修复模拟成三域转换的问题,三个域分别是真实的老照片的域 R 、合成的低质照片的域 X 、真实的高质照片(GT)的域 Y 。整体的思路如下面这张图所示。

简单地介绍上面图中的表达的意思就是,从域 X XX 可以转换到低维的 latent spaceZxZ_{x}Zx​,同样地,从域 R 可以转换到低维的 latent space ZrZ_{r}Zr​ 。虽然合成的退化图像 x 与真实图像 z 在退化方式等方面存在差异,但都是损坏了的图像,有许多相似表现。因此,通过一些约束可以尽量让ZrZ_{r}Zr​与ZxZ_{x}Zx​分布尽量重合,也就是上图中的虚线的部分。由于 x 是由 y 合成,两者之间存在联系,可以将zxz_{x}zx​转换到zyz_{y}zy​,再由zyz_{y}zy​恢复出 y 。这样就形成了一个弱监督,通过拉近ZrZ_{r}Zr​与ZxZ_{x}Zx​,然后借助从zxz_{x}zx​到 y 的途径来恢复出高质量的 Z 。这就是文章三域转换的主要思想。

2. 网络结构

本文的模型主要由三个部分组成两个变分自编码器(variational autoencoder,VAE)和一个latent space 映射网络 τ\tauτ,每个部分都可以看作是单独的一个模块。下面将介绍网络设计的思想和不同部分的作用。

作者使用了两个 VAE:

第一个 VAE 用于将合成的老照片(模糊、磨损)进行编码到隐空间。

第二个 VAE 用于将对应的干净的老照片进行编码。

然后,在隐空间学习从污损的老照片到干净照片的映射。

就这样,实现了一个老照片的修复算法。

这个有点像在学习控制图片清晰、磨损的一个特征表示,通过控制这个特征,可以达到修复破损照片的目的。

下面详细介绍下:

2.1 VAE

首先是最上方的VAE1VAE_{1}VAE1​,由编码器 ER,XE_{R,X}ER,X​与生成器GR,XG_{R,X}GR,X​组成,它将图像 r rr 与 x 分别编码到ZrZ_{r}Zr​与ZxZ_{x}Zx​,然后再重新恢复;并且使潜在编码符合都高斯分布(以及使用重参数化技巧使模型可以进行训练,都是VAE方法中的技巧)。当输入为 r 时,它的目标函数表达式如下;

第一项使用是VAEVAEVAE训练时使用到的约束项,用KL散度约束潜在编码的分布接近高斯分布,其中ER,X(zr∣r)E_{R,X}(z_{r}|r)ER,X​(zr​∣r)表示输入为 r 时通过ER,XE_{R,X}ER,X​得到的zrz_{r}zr​服从的先验概率分布。第二项表示通过VAEVAEVAE编码恢复结果与输入数据 r 之间的l1l_1l1​ loss,这一项是latent code有了明确的含义。第三项是一个LSGAN loss,众所周知,VAE生成的结果往往过于平滑,而GAN的生成结果的高频细节更加丰富,所以作者在这里引入一个GAN loss。输入为 x 时也使用同样的 loss 进行训练,VAE2VAE_{2}VAE2​用于训练 y,也使用同样的 loss 进行约束。

因为 r 与 x 共用一个VAE,这使得两者的latnet space 非常靠近,为了更进一步拉近ZrZ_{r}Zr​与ZxZ_{x}Zx​,作者又使用了一个判别器,与之前的GAN loss不同,这个判别器用来区分两个潜在编码。

理论上,这个GAN loss的存在会使ZrZ_{r}Zr​与ZxZ_{x}Zx​的分布更加一致,那么VAE1VAE_{1}VAE1​总的loss就是如下形式;

2.2 映射网络τ\tauτ

简单地来说,τ\tauτ 的作用是将zxz_{x}zx​映射到zyz_{y}zy​,这样做有两个优势。第一,由于 X 与 R 在潜在编码空间对齐,所以借助从zxz_{x}zx​恢复得到 y 的途径也能恢复出一个好的 r ;第二,在低维的latent space 进行转换要比在复杂的图像域转换更加简单。训练τ\tauτ的 loss 如下;

第一项是l1l_1l1​ loss,Lτ(x,y)=E∥τ(zx)−zy∥1L_{\tau}(x,y)=E\left \| \tau(z_{x})-z_{y} \right \|_{1}Lτ​(x,y)=E∥τ(zx​)−zy​∥1​ ,第二项是 LSGAN ,作用于zx↦yz_{x} \mapsto yzx​↦y,使通过zxz_{x}zx​生成的图像与GT看上去更真实,第三项也是常见的使用VGG 网络求取的感知loss。

通过上面的介绍三个网络的作用和训练方法已经很清晰了。下面将进一步分析网络的设计 。

2.3 多重退化修复

在τ\tauτ中,主要是用的是残差模块,由于感受野的限制,网络主要关注局部的特征。然而一些老照片中一些结构的损坏需要更大范围内的信息进行搜索填充,因此需要让设计的网络即支持获取局部的信息,又支持获取全局的信息。因此,作者添加了一个含有非局部模块的全局信息提取的分支。这里采用一个mask作为输入,来防止图片中损坏区域的像素不会被用于修复损坏区域。(本文中使用合成的数据集来训练一个 Unet 网络以检测mask)

对于一个HWC维度的特征F,m 表示同样大小的单通道二值mask图像,m中值为1时表示表示损坏区域,值为0表示正常区域。那么对于F中位置 i 与位置 j 之间的关系可以表示为si,js_{i,j}si,j​,si,j∈RHW×HWs_{i,j}\in R^{HW\times HW}si,j​∈RHW×HW,是每个pixel 之间的关系。公式如下;

从公式中可以看出,si,js_{i,j}si,j​表示像素 j 对于像素 i 相关性的归一化表示,也可以看作是像素点 j 贡献的权重值,当像素点在m中标记为腐坏点时,贡献值为0;其中fi,jf_{i,j}fi,j​的式子如下;

上面的式子中FiF_{i}Fi​、FjF_{j}Fj​是一个维度为 C*1 的向量;θ\thetaθ 与 Φ\PhiΦ 是将向量映射到高斯分布的函数,所以最终 fi,jf_{i,j}fi,j​是一个标量。最终,部分非局部的输出为;

不难看出,i,j_{i,j}i,j​就是权重值。而这里的 v 和 u 用于进一步整合特征。 v 、 u 、 v 、Φ\PhiΦ都是1x1卷积。

通过这样的上述的模块,就可以起到全局感受野的作用。但是只希望对被腐坏的区域进行上述操作,其他区域不需要这样的操作,因此作者又做了个区域融合,即当mask中对应的区域被标记为损坏区域时使用global的信息,否则使用局部特征信息。

公式中的圆点表示矩阵的哈达玛积,即Elementwise product,至此所有的模型设计就讲完了。

3. 结果


这篇文章是一篇弱监督的文章,思路很清晰易懂,也很明确,是一份很好的工作,有很多地方值得借鉴。但也有以下几个地方我觉得需要改进:

  1. 耗时;先不说三个网络单独训练的耗时,光是Prediction来看就比较耗时,虽说作者没有给出时间对比,但是也说了pix2pix和自己的工作的耗时最少,可以说明一点,本文的网络应该比pix2pix耗时。
  2. 弱监督的任务往往很难在高分辨的图像上使用。
  3. mask的问题,如果要将模型实际应用,如何获取mask也是一个问题,本文中使用特殊训练的Unet结构来预测mask,无疑又加大了计算量。

4. 最后

老照片修复之Bringing Old Photos Back to Life相关推荐

  1. 开源AI项目-老照片修复之 Bringing Old Photos Back to Life

    方案 Bringing Old Photos Back to Life https://github.com/microsoft/Bringing-Old-Photos-Back-to-Life 快速 ...

  2. [GAN]老照片修复Bringing Old Photos Back to Life论文总结

    Title Title:Bringing Old Photos Back to Life Source:CVPR2020 论文官网 Code 1.Summary 文章提出并解决了两个问题. 问题一 泛 ...

  3. Bringing Old Photos Back to Life微软老照片修复全解析(原理、代码、训练、测试)

           挖坑,写一下该论文相关的信息,从原理.模型代码分析.测试.最后写模型的数据集及其训练. (1) Bringing Old Photos Back to Life原理和测试 (2) Bri ...

  4. 让老照片重现光彩:Bringing Old Photos Back to Life(实战)

    Bringing Old Photos Back to Life 香港城市大学和微软亚洲研究院的"让老照片重现光彩"(Bringing Old Photos Back to Lif ...

  5. 【实战】(香港城市大学,微软亚洲研究院)让老照片重现光彩(一):Bringing Old Photos Back to Life

    香港城市大学和微软亚洲研究院的"让老照片重现光彩"(Bringing Old Photos Back to Life)项目侧重于对老照片进行划痕修复和人脸效果增强,在老照片处理方面 ...

  6. 图像去雾,利用《bringing old photos back to life》 训练并修改

    目录 背景 数据的处理 模型修改 模型训练 后续 背景 <bringing old photos back to life>是一篇用于老照片修复的论文,论文的故事讲的很好,但是不利于读者的 ...

  7. 火爆全网的老照片修复技术,手把手教你怎么玩儿!

    关注公众号:[小张Python],为你准备了 50+ 本Python 精品电子书籍 与 50G + 优质视频学习资料,后台回复关键字:1024 即可获取:如果对博文内容有什么疑问,后台添加作者[个人微 ...

  8. 老照片修复-上色-生成动图的操作方法

    老照片修复-上色-生成动图的操作方法 目前对老照片的处理主要可以通过深度学习方式.第三方APP.PS等方式进行处理.本文主要讲述这三种方式的处理方法,暂时不涉及具体技术原理. 一.用深度学习进行老照片 ...

  9. CVPR 2020丨图像超清化+老照片修复技术,拯救你所有的模糊、破损照片

    编者按:也许你曾从橱柜里翻出家人们压箱底的老照片,而它们已经泛黄发脆,甚至有些褪色:也许你在拍照时不慎手抖,只好把糊成一片的照片都丢进"最近删除".而微软亚洲研究院在计算机视觉顶会 ...

最新文章

  1. 有关C/C++中,表达式计算顺序的问题,以及表达式内部变量“副作用”问题(转)...
  2. 服务器远程重新做系统吗,服务器远程做系统安装系统
  3. vue插件:vue-resource的使用笔记
  4. 归并排序——java
  5. Android文件上传
  6. v8声卡怎么录制唱歌_直播声卡怎么连接V8 V8声卡连接方法教程
  7. 易语言制作计算软件简单步骤_基于飞时达FastTFT软件方格网法计算土方量的具体步骤...
  8. PLSQL 下载、安装、配置驱动连接 详解
  9. 在ubuntu9.10下 安装nvidia GT130M最新驱动190.42版本
  10. ipv4网络无访问权限
  11. 家用威联通NAS的硬盘方案
  12. 锐龙r5 6600g处理器怎么样 r7 6700g核显相当于什么显卡
  13. Java8新特性之Stream流式编程
  14. 基于PHP+MySQL实现注册和登录功能
  15. 背篼酥课堂第八课--APP开发--app图形化编程
  16. CSS标准盒模型和怪异盒模型区别
  17. iOS 判断是否安装SIM卡
  18. Praat脚本-014 | 删除选择区域内的所有边界条
  19. python开发工具pycharm插件美化代码_精选Pycharm里6大神器插件
  20. 备案注销申请表_注销备案申请表

热门文章

  1. 基于snmp的流量监控系统(python)
  2. ChatGPT 的议论文究竟写的怎么样?111 位高中教师告诉你答案
  3. 在Lumia 950 XL上运行Windows 10 ARM64,是种什么体验?
  4. c++和java的区别
  5. 有关微信公众号文章的那些事儿(Spider版)
  6. 佛家语录经典50条(转)
  7. 在Typora中输入数学公式
  8. 按照Gartner的概念,国内所谓低代码产品都是“伪低代码”——到底什么才是“低代码”?
  9. 只需3步,即可快速制作gif动态图片
  10. WCF 第二章 契约 WSDL中的操作名字、类型、操作和命名空间