结合深度学习的图像修复怎么实现?

作者:QZhang
链接:https://www.zhihu.com/question/56801298/answer/155891603
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
 

019.09.02更新,目前共整理了15篇论文,仅供学习参考

附: inpainting这个坑在CV大家族里是个相当小众的方向了,然而做了三年才发现这是个大坑...DL+inpainting更是个巨坑...提前说下,入坑需谨慎啊...同时欢迎各位大佬补充说明!


1. CVPR 2016Context-Encoders(CNN+GAN, 鼻祖级的 NN修复方法,后面大多数补绘方法的爸爸,在DL+inpainting领域里,堪比大佬董超的SRCNNDL+单张超分辨重建地位) 链接: Feature Learning by Inpainting; Github代码:

pathak22/context-encoder​github.com图标

 

2. CVPR 2017High Resolution Inpainting(Context-Encoders+CNNMRF框架),结合了风格迁移的思路,链接: High-Resolution Image Inpainting using Multi-Scale Neural Patch Synthesis; Github代码:

leehomyc/Faster-High-Res-Neural-Inpainting​github.com图标

 

3. ICCV 2017on demanding learning(本质上还是Context-Encoders的衍生版) 链接: On-Demand Learning for Deep Image Restoration, Github代码:

rhgao/on-demand-learning​github.com

 

 

4. SIGGRAPH 2017 (ACM ToG)Globally and Locally Consistent Image Completion (CE中加入Global+Local两个判别器的改进), Github代码:

https://github.com/satoshiiizuka/siggraph2017_inpainting​github.com

 

 

5. ECCV 2018Image Inpainting for Irregular Holes Using Partial Convolutions (引入了局部卷积,能够修复任意非中心、不规则区域),论文+代码(官方):

[1804.07723] Image Inpainting for Irregular Holes Using Partial Convolutions​arxiv.org

 

https://github.com/NVIDIA/partialconv​github.com

 

 

6. CVPR 2018Generative Image Inpainting with Contextual Attention,一作大佬jiahui Yu 后续还有个工作: Free-Form Image Inpainting with Gated Convolution, Github代码:

JiahuiYu/generative_inpainting​github.com图标

 

7. ECCV 2018Shift-Net: Image Inpainting via Deep Feature Rearrangement (哈工大 左旺孟教授组的工作)效果也不错,Github代码:

Zhaoyi-Yan/Shift-Net_pytorch​github.com图标

 

8. ECCV 2018Contextual-based Image Inpaintinginpainting大佬Chao Yang(NPS的一作)等人的又一力作:

Contextual-based Image Inpainting​arxiv.org

 

 

9. ACM MM 2018Semantic Image Inpainting with Progressive Generative Networks简称PGN,采用了由外至内的步进式修补策略,Github代码:

crashmoon/Progressive-Generative-Networks​github.com

 

 

10. NIPS 2018Image Inpainting via Generative Multi-column Convolutional Neural Networks,用了不少trick,Github代码:

shepnerd/inpainting_gmcnn​github.com图标

 

11. ICCV 2019EdgeConnect: Generative Image Inpainting with Adversarial Edge Learning, 采用边缘推断信息的思路进行重建。Github代码:

knazeri/edge-connect​github.com图标

 

12. CVPR 2019Foreground-aware Image Inpainting, 思路类似于上面的工作,也是先推断生成轮廓边缘,辅助缺失区域进行修复,不知道上面的哥们看了这篇会是什么感受...速度也很重要啊...

Foreground-aware Image Inpainting​arxiv.org

 

 

13. CVPR 2019Pluralistic Image Completion论文与Github代码:

https://arxiv.org/abs/1903.04227​arxiv.org

 

lyndonzheng/Pluralistic-Inpainting​github.com图标

 

14. IJCAI 2019MUSICAL: Multi-Scale Image Contextual Attention Learning for Inpainting,武汉大学杜博老师组的工作(注:第一作者为我校计院的一名本科生...广大CV狗瑟瑟发抖!)。引入一个多尺度的上下文注意力模块,避免信息滥用/误用导致的纹理模糊等问题,损失函数部分联合了风格损失、感知损失、对抗损失,来保证补绘内容的一致性和清晰水平。

武汉大学地学智能感知与机器学习研究组​sigma.whu.edu.cn图标

 

15. ICCV 2019Coherent Semantic Attention for Image Inpainting,论文作者为Kuma , 文中提出了一个全新的Attention模块,该模块不仅有效的利用了上下文信息同时能够捕捉到生成补丁之间的相关性。同时提出了一个新的损失函数配合模块的工作,最后利用一个新的特征感知辨别器对细节效果进行加强,代码过段时间会公开

Coherent Semantic Attention for Image Inpainting​arxiv.org

 

KumapowerLIU - Overview​github.com图标

 

编辑于 2019-09-03

 

作者:Momenta
链接:https://www.zhihu.com/question/56801298/answer/383954839
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
 

计算机图形学(Computer Graphics) 和计算机视觉(Computer Vision) 是计算机科学中两个重要的研究方向。图形学研究的问题可以概括为如何生成和处理图像,而视觉研究的问题可以概括为如何感知和理解图像。虽然二者研究的问题相差很大,但是由于研究对象往往都是图像,所以二者的关系也很紧密。

 

传统的图形学和视觉的研究方法,主要还是基于数学和物理的方法。然而随着近几年深度学习在视觉领域取得的卓越的效果,视觉领域研究的前沿已经基本被深度学习占领。在这样的形势之下,越来越多的图形学研究者也开始将目光投向深度学习。在图形学和视觉交叉的领域,一系列问题的研究正在围绕深度学习火热展开,特别是在图像编辑(image editing)和图像生成(image generation)方面,已经初见成效。今天我们讨论的问题,图像补全(image inpainting),正是介于图像编辑和图像生成之间的一个问题。

 

图像补全最初是一个传统图形学的问题。问题本身很直观:在一幅图像上挖一个洞,如何利用其它的信息将这个洞补全,并且让人眼无法辨别出补全的部分。这个问题对我们人类似乎很容易,比如下面这个洞,大家很容易脑补出洞里应该有窗户和门,背景是墙,如果还有一些绘画天赋的话,大概就能想象着把它补出来。但是这个任务对于计算机却显得格外困难,首先这个问题没有唯一确定的解,其次如何利用其它的信息?如何判断补全结果是否足够真实?
 

 

 

我们今天将按照时间顺序,讲3篇图像补全的工作。让我们来看看研究者们,是如何一步一步尝试解决这个问题的。也希望大家从对这一个问题的研究的发展脉络,能够分析总结出一些规律性的思考,来指导我们自己的研究。

 

Region Filling and Object Removal by Exemplar-Based Image Inpainting

 

这篇文章是2004年的工作,核心思想就是利用图像本身的冗余性(redundancy),用图像已知部分的信息来补全未知部分。

 

算法的流程大致如下:

1. 对待补全区域边界的像素依次计算补全的优先度(priority),这个优先度主要考虑2个因素。一个是周围像素可信度高的位置要优先补,另一个是位于图像梯度变化剧烈的位置要优先补。综合二者得到所有优先度之后,挑选优先度最高的像素来补

 

2. 对于上一步找到的待补全像素,考虑它周围的一个小patch(比如3*3)。在图像已知部分搜索所有的patch,找到最相似的patch

 

3. 用找到的best match来补全未知部分,并更新相关数值

 

 

以下是一个补全的结果示例:

 

 

但是我们也不难发现这个方法存在的问题:如果图像已知部分找不到相似的patch,那算法将无法进行;这个方法只适用于补全背景以低频信息和重复性纹理为主的图像;搜索相似的patch计算复杂度非常高,算法运行效率低。

 

Scene Completion Using Millions of Photographs

 

这篇文章是2007年的工作,试图利用data-driven的方法解决之前方法存在的2个问题:对于图像已知部分找不到相似patch的问题,这篇文章提出利用互联网上存在的大量图片来提供素材;对于一块块逐步补全效率低的问题,这篇文章提出直接从其它图像抠出完整一块来填补空洞。

 

不过,利用互联网图片也同时带来了新的问题:互联网上图片纷繁复杂,如何快速找到我们需要的图片素材;如何解决语义正确的问题,我们不希望从公路上抠掉了一辆汽车,结果从别的图片粘过来一头大象;如何解决不同图片光照等条件不同带来的视觉差异。

 

算法的大致流程如下:

1. 从Flickr上下载两百万图片构建数据库,以”landscape””city””park”等关键词搜索户外场景的图片

 

2. 对于一张待补全图像,从数据库中挑选200个场景最相似的图片,这里使用gist scene descriptor和图像下采样到4*4作为匹配的特征向量

 

3. 将补全区域边界外80个pixel的区域作为context。对于每一张匹配的图像,搜索所有的平移空间和3个尺度的scale空间,根据context部分的匹配误差,选择最佳的补全位置;之后利用graph-cut算法求解最佳的融合边界

 

4. 利用标准的泊松融合处理融合边界

 

5. 将前几步的匹配cost和graph-cut的cost加起来,返回cost最小的20的结果供用户挑选

 

以下是一些补全的结果

 

 

Context Encoders: Feature Learning by Inpainting

 

这篇文章发表在去年的CVPR上,核心思想是利用卷积神经网络来学习图像中的high-level feature,利用这些这些feature来指导图像缺失部分的生成。

 

文章提出的网络结构如下,包括3个部分:Encoder, Channel-wise fully-connected layer, Decoder。

 

 

Encoder的结构直接借鉴了AlexNet前5层的卷积层结构,具体结构如下。输入的crop尺寸是227Í227,卷积之后得到的feature map结构是256层6 Í 6。所有的weight都随机初始化。

 

 

Channel-wise fully-connected layer是对普通fc层的一种改进。之所以加入fc层是为了使feature map每一层的信息可以在内部交流。但传统的fc层参数太多,因此作者提出可以在fc中去掉feature map层间的信息交流,从而减少参数规模。在fc之后会接一个stride为1的卷积层,来实现层间的信息交流。

 

Decoder的目的是将压缩的feature map一步步放大,恢复到原始图片的尺寸。文章提出采用5个up-convolutional层,每层后接一个RELU。上采样的结构如下。

 

 

接下来,我们再看一下Loss的设计。作者提出了2个Loss:Reconstruction Loss和Adversarial Loss。

 

Reconstruction Loss如下,其实就是直接计算生成部分和原始图像的pixel-wise error

 

 

Adversarial Loss如下,这个Loss的设计显然借鉴了GAN的Loss。不过一个主要的区别是,这里只固定Generator,试图通过极大化Loss来训练更强的Discriminator。

 

 

最终的Loss为如下的组合,Reconstruction Loss是为了提高补全部分和周围context的相关性;而Adversarial Loss则是为了提高补全部分的真实性。通过保持二者的平衡,可以得到如下尽可能好的补全效果。

 

 

除了图像补全之外,作者为了证明它们的feature representation的能力很强,又进行了一系列实验,将它们的Context Encoder作为一个pre-training的环节,在classification、detection和segmentation等任务上测试效果。虽然和在ImageNet上用label训练的结果还有一定差距,但和之前的Autoencoder作为pre-training的结果相比,还是有一些提高。

 

 

 

让我们来回顾一下这3篇工作的发展

 

第一篇工作,研究者只能使用本张图像的数据,而且使用的feature也是非常low-level的像素级别的;

第二篇工作,得益于数据处理能力的飞跃,研究者可以利用data-driven的方法,但使用的feature仍然是low-level的(一些拍脑袋想出的feature);

第三篇工作,得益于神经网络对图像中high-level feature的提取能力,研究者可以将大数据和high-level feature组合起来,使得这个十分困难的问题得到了很好的解决。

 

以深度学习为代表的机器学习,正在逐渐席卷整个图形学研究领域。研究者们逐渐发现,当传统的基于物理的模型发展遇到瓶颈的时候,机器学习的方法也许能够帮助我们解释这些复杂的数理模型。毕竟只有理解了图像的深层结构,才能更好地指导图像的生成和处理。

 

 

  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值