【论文学习】Bringing Old Photos Back to Life

2023-05-16

【fishing-pan:https://blog.csdn.net/u013921430 转载请注明出处】

前言

  最近在浏览CVPR2020年的文章,1000多篇真的看不完,简单的浏览了几篇都觉得缺点意思。起初主要是被这篇文章的标题吸引的,因为最近老照片修复真的很火,看了这篇文章后,觉得这个工作确实是挺好的,所以把自己对文章的理解写出来,与大家交流。
在这里插入图片描述

论文地址:https://arxiv.org/abs/2004.09484

工作背景

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

  为了回避样本制造的问题,作者将老照片修复模拟成三域转换的问题,三个域分别是真实的老照片的域 R R R、合成的低质照片的域 X X X、真实的高质照片(GT)的域 Y Y Y。整体的思路如下面这张图所示。
图1 三域转换方式
  简单地介绍上面图中的表达的意思就是,从域 X X X 可以转换到低维的 latent space Z x Z_{x} Zx,同样地,从域 R R R 可以转换到低维的 latent space Z r Z_{r} Zr。虽然合成的退化图像 x x x 与真实图像 z z z 在退化方式等方面存在差异,但都是损坏了的图像,有许多相似表现。因此,通过一些约束可以尽量让 Z r Z_{r} Zr Z x Z_{x} Zx 分布尽量重合,也就是上图中的虚线的部分。由于 x x x 是由 y y y 合成,两者之间存在联系,可以将 z x z_{x} zx 转换到 z y z_{y} zy ,再由 z y z_{y} zy 恢复出 y y y 。这样就形成了一个弱监督,通过拉近 Z r Z_{r} Zr Z x Z_{x} Zx ,然后借助从 z x z_{x} zx y y y 的途径来恢复出高质量的 Z Z Z 。这就是文章三域转换的主要思想。

核心工作

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

V A E 1 VAE_{1} VAE1 V A E 2 VAE_{2} VAE2

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

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

  因为 r r r x x x 共用一个 V A E VAE VAE ,这使得两者的latnet space 非常靠近,为了更进一步拉近 Z r Z_{r} Zr Z x Z_{x} Zx ,作者又使用了一个判别器,与之前的GAN loss不同,这个判别器用来区分两个潜在编码。
在这里插入图片描述
  理论上,这个GAN loss的存在会使 Z r Z_{r} Zr Z x Z_{x} Zx 的分布更加一致,那么 V A E 1 VAE_{1} VAE1 总的loss就是如下形式;
在这里插入图片描述

映射网络 τ \tau τ

  简单地来说, τ \tau τ 的作用是将 z x z_{x} zx 映射到 z y z_{y} zy ,这样做有两个优势。第一,由于 X X X R R R 在潜在编码空间对齐,所以借助从 z x z_{x} zx 恢复得到 y y y 的途径也能恢复出一个好的 r r r ;第二,在低维的latent space 进行转换要比在复杂的图像域转换更加简单。训练 τ \tau τ 的 loss 如下;
在这里插入图片描述
  第一项是 l 1 l1 l1 loss, L τ ( x , y ) = E ∥ τ ( z x ) − z y ∥ 1 L_{\tau}(x,y)=E\left \| \tau(z_{x})-z_{y} \right \|_{1} Lτ(x,y)=Eτ(zx)zy1 ,第二项是 LSGAN ,作用于 z x ↦ y z_{x} \mapsto y zxy,使通过 z x z_{x} zx 生成的图像与GT看上去更真实,第三项也是常见的使用VGG 网络求取的感知loss。

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

多重退化修复

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

  对于一个HWC维度的特征F,m 表示同样大小的单通道二值mask图像,m中值为1时表示表示损坏区域,值为0表示正常区域。那么对于F中位置 i i i 与位置 j j j 之间的关系可以表示为 s i , j s_{i,j} si,j s i , j ∈ R H W × H W s_{i,j}\in R^{HW\times HW} si,jRHW×HW ,是每个pixel 之间的关系。公式如下;
在这里插入图片描述
  从公式中可以看出, s i , j s_{i,j} si,j 表示像素 j j j 对于像素 i i i 相关性的归一化表示,也可以看作是像素点 j j j 贡献的权重值,当像素点在m中标记为腐坏点时,贡献值为0;其中 f i , j f_{i,j} fi,j 的式子如下;
在这里插入图片描述
  上面的式子中 F i F_{i} Fi F j F_{j} Fj 是一个维度为 C*1 的向量; θ \theta θ Φ \Phi Φ 是将向量映射到高斯分布的函数,所以最终 f i , j f_{i,j} fi,j 是一个标量。最终,部分非局部的输出为;
在这里插入图片描述
  不难看出, s i , j s_{i,j} si,j 就是权重值。而这里的 v v v u u u 用于进一步整合特征。 v v v u u u v v v Φ \Phi Φ 都是1x1卷积。

  通过这样的上述的模块,就可以起到全局感受野的作用。但是只希望对被腐坏的区域进行上述操作,其他区域不需要这样的操作,因此作者又做了个区域融合,即当mask中对应的区域被标记为损坏区域时使用global的信息,否则使用局部特征信息。
在这里插入图片描述
  公式中的圆点表示矩阵的哈达玛积,即Elementwise product,至此所有的模型设计就讲完了。

结果展示

  文中主要与pix2pix、CycleGAN进行对比;自然,从结果来看本文最好。其他的对比和消融实验就不一一细说了。
在这里插入图片描述

总结分析

  这篇文章是一篇弱监督的文章,思路很清晰易懂,也很明确,是一份很好的工作,有很多地方值得借鉴。然后我想说一下自己觉得需要改进的地方,当然不是说这个工作的缺陷,因为有很多问题是目前没有很好地解决方案的。

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

  总的来说这篇文章还是非常好的,值得学习。上面是我自己读了论文后的理解,可能有不足或是错误的地方,欢迎大家一起讨论。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【论文学习】Bringing Old Photos Back to Life 的相关文章

  • WARNING: pip is being invoked by an old script wrapper. This will fail in a future version of pip.

    出现以下问题 解决办法 python m 会指定你当前使用的python版本 python m pip install pyreadline xff08 包名 xff09 安装成功 xff01
  • Open eyes in your life

    读到几个故事 xff0c 希望和大家分享 一 成功无捷径 Be proactive 一个青年职员平时工作懒懒散散 xff0c 在转正前一个月他问老板 xff1a 如果我兢兢业业工作一个月 xff0c 我能转正吗 xff1f 老板答道 xff
  • 2023年计划

    2022年技师职业资格国家以年限不够为由 拒绝录入 十分生气 痛定思痛 一步步来 1 申报初级职称 2 因2022年疫情全年取消考试 现疫情政策已放开 上半年考高项 2 2023年领证 4 下半年学习英语 在职 5 学习代码 完全学会spr
  • 2017电子设计攻略_控制类

    2017年电子设计大赛准备攻略 控制类 Author 靳皓屹 中北大学 1 组队 组队是一件非常重要的事情 在组队之前 一定要想清楚 1 三个人中间是否有一位核心成员 具有决断力 能够定好团队的方向 2 分工问题 个人认为最合理的分工是这样
  • 覆盖Android后退按钮

    关于我为什么尝试这样做的一些信息 我正在使用 ActivityGroups 从 tabHost 活动打开一个活动 并将该新活动保留在选项卡下 那部分我已经有了 但是 在该新活动中 如果我使用后退按钮 它会将我直接退出选项卡活动 因此我必须单
  • PHP 检查日期是否是过去 30 天

    我这里有点问题 我将日期插入数据库 date last applied 我可以通过使用来调用它 row date last applied 当然 现在 我需要检查这个插入的日期是否是30 天前如果是 则执行一个操作 query SELECT
  • 更改我的网络应用程序的浏览器后退按钮行为?

    我正在制作一个 类似应用程序 的网页 实际页面比浏览器视口更宽 浏览器视口隐藏了溢出 单击不同的链接会更改 CSS 以动画显示不同的部分 这是一个非常简单的演示 http smartpeopletalkfast co uk pos 在这个阶
  • 获取 Photos.app 中的图像数量?

    我知道可以使用 ALAssetsLibrary 获取 Photos app 中的图像 但如何获取 Photos app 中的照片总数 我几乎正在尝试检查照片的数量 因为我正在使用此问题的代码获取 Photos app 中的最后一张图像 从
  • iPhone设备上的相册路径是什么?

    我试图将 PNG 文件保存到 iPhone 设备上的相册文件夹中 扩展名为 png 以便保持透明度 我的问题是 UIImageWriteToSavedPhotosAlbum 函数使用的相册路径是什么 我正在使用数据写入文件方法 Thanks
  • 返回上一页,使用 header(“位置:”);在 PHP 中

    这个问题的标题有点解释了我的问题 如何使用以下命令将 PHP 页面访问者重定向回之前的页面header Location URL of previous page try header Location SERVER HTTP REFERE
  • iOS 7 UINavigationBar 隐藏了后退按钮

    我有一个应用程序 它有一个后退按钮 其 UINavigationBars 中有一个自定义图像 在 iOS 6 中一切都很好 但在 iOS 7 中该按钮大多数时候是 不可见的 当我将新的视图控制器推入 UINavigationControll
  • 如何从反应本机页面返回本机视图控制器?

    我用一个包装了一个反应本机页面UIViewController 并用导航控制器推送它 但是如何使用react native js代码弹出到本机页面 最简单的方法是拥有一个引用您的属性UIViewController在你的AppDelegat
  • Android Webview:有没有办法知道之前的URL是什么?

    有没有办法访问历史记录 以便我知道用户按下后退按钮 调用 WebView goBack 时正在访问哪个 URL String historyUrl myWebView WebView findViewById R id webViewCon
  • 覆盖后退按钮以充当主页按钮

    按下后退按钮后 我希望我的应用程序进入停止状态 而不是销毁状态 在安卓中docs http developer android com intl fr guide practices ui guidelines activity task
  • 如何使用 Photos API 在 iOS 8.0 中检索照片扩展名 (jpg/png)?

    我正在尝试使用 iOS 8 中新的 Photos API 获取照片的文件扩展名 但到目前为止还没有找到方法 在 iOS 8 0 之前 我会使用 ALAssetRepresentation 来获取文件扩展名 例如 Get asset repr
  • Android ActionBarSherlock 顶部图标返回

    我正在尝试制作顶部操作栏图标以允许用户返回到上一个屏幕 我试图实现这些代码 但没有一个起作用 任何人都可以指导我吗 我知道这看起来很简单 我是 android 新手 下面是我的代码 问题 当我点击图标按钮时 它只是清除了我的屏幕 而没有转到
  • 如何处理对话框中的后退按钮?

    我正在开发一个应用程序 当按下按钮时 它会打开一个带有 确定 和 取消 按钮的对话框 效果很好 当用户按下后退按钮时 我按如下方式处理 public boolean onKeyDown int keyCode KeyEvent event
  • ios7 新的平移手势返回导航堆栈不会清除桌面视图选择

    我有一个类似注释的应用程序 uitableviewcontroller 通过将各个注释推送到导航堆栈来显示它们 我决定使用 ios7 后退按钮和附带的平移手势识别器 我唯一的修改是在推送详细视图控制器之前 通过将来自控制器的 navigat
  • 导出的 Google+ 照片,如何将 JSON 数据转换为 EXIF?

    最近使用 Google Takeout 从 Google 下载了 60GB 以上的照片和视频 这会产生大量文件 但有价值的元数据 包括照片的原始日期和位置 通常存储在每个相册的单独的metadata json 文件中 而不是存储在 EXIF
  • 单击浏览器的后退按钮时重定向到特定页面

    这是一个有点菜鸟的问题 但事实就是这样 我有一个网站 用户只能通过下一页和后退按钮从一个页面导航到另一个页面 即有一个用户必须遵循的向导 向导的一部分包含不同的页面 一部分包含相同的页面但具有更改的 div 但从用户体验来看 它是不同的页面

随机推荐