查看原文
其他

AI修图靠“想象力”?吴恩达高徒告诉你可以有!

AI前线小组 AI前线 2018-08-05

策划编辑|Vincent
编译 & 编辑|Debra
AI 前线导读:图像修复是一个被广泛研究的计算机视觉问题,涉及修复图像中缺失的部分,近日,斯坦福大学 CS230 课程中一篇获得了第一名的论文让这一难题取得了十分喜人的进步,在这篇名为《Painting Outside the Box: Image Outpainting》的论文中,作者提出了“Image outpainting”,这项技术比图像修复更进一步,能从一个图像片段“推断”出外延的部分,补全成整个画面。

更多干货内容请关注微信公众号“AI 前线”,(ID:ai-front)

CS230 课程是斯坦福开设的深度学习课程,吴恩达正是这门课的讲师之一:


根据斯坦福的官网介绍,该课程将从深度学习的基础开始,教会学生了解如何构建神经网络,以及学习如何领导成功的机器学习项目。不仅教授理论,还会让学生了解它如何应用于工业。

本文即将介绍的这篇与图像修补相关的论文,既然能够在这门课程里得到第一名的成绩,想必也是受到了吴恩达的赞赏。

先来看看这令人惊艳的最终效果:


左边是图片的残损画面,右边是经过“推理”之后生成的完整图片,虽然仍有一些明显的痕迹,但是这样的成果已经非常惊人了。

据了解,目前最先进的图像修复技术包括 GANs 和 CNNs,而本篇论文的作者 Mark Sabini 及其团队的目标是拓展方法,即对图像外延进行推断的 image outpainting,这项技术能够让图像可以被递归 outpainting 任意拓展。

AI 前线对 Mark Sabini 团队的论文和进行了简要翻译,感兴趣的读者可以回复“outpainting”获取该论文下载链接。

问   题

如原图图片:为 m×n,产生一个 m×(n+2k) 的图像

  • 位于中心

  •  看起来真实自然

  • 假设 m=128,n=64,k=32

数   据

基准图像:大小为 128×128RGB 的 City 图像

数据集:Places 图像 365- 标准(3)

  • 36500 张 256×256RGB 的图像,缩小至 128×128

  • 100 张验证图像


数据处理

  • 图像标准化至 [0,1] 


  • 定义 mask 

  • 定义补充 mask 

  • 通过计算平均像素密度

  • 

  • 

  • 输出

训练管道

  • DCGAN 架构(G,D)与(1)类似

  • 对于预处理得到

  • 运行得到 outpaint image

  • 上运行 D


    训练计划



  • 分三阶段进行 G,D

  • 阶段 i:使用优化迭代损失(i)

  • 18:2:80 选择

  • 控制 MSE 损失值


    后续处理


  • 重新调整到 [0,255] 

  • 通过无缝克隆将结合起来



(图 3: 架构 除最后一层外,其它层的 G 与 D 使用了 ReLU,G 与 D 的输出结果由 sigmoid 激活函数得出。在这里,n 为尺度因子。)

结   果

(用递归算法画的图像)


(图 4:outpainting 验证集留存图像的 outpainting 示例,以及原图。模型经过 100 epochs(相当于 227500 次迭代),批量为 16)

(图 5: Places365 MSE 损失 通过背景的颜色展示不同训练阶段。在阶段 3,当连接损失(3)优化时 MSE 损失略上升)

(图 6:本地鉴别器 训练本地鉴别器(LD)降低了垂直分带,提高了颜色保真度,但增加了人工和训练时间)

(图 7: 扩张的效果 训练网络拟合城市图像。如果扩张不足,网络由于接受域有限而 outpaint 失败)


(图 8: 递归 outpainting 当输入经过扩张和填充之后得到 outpaint image

。重复此递归,将图像宽度增加值 3.5。与预期一致,噪音被持续的迭代消解 )

结   论

  • 成功实现了 image outpainting

  • 三阶段训练有助于训练稳定

  • 扩张卷积对于 outpainting 有足够的接受域至关重要

  • 递归 outpainting 是可能的,尽管会出现错误与噪音

    未来的工作

  • 探索视频 outpainting 序列模型

  • 结合感知和风格损失

  • 进行局部损失实验

    参   考



编者注:在论文发表之后,有人通过该篇论文的方法实现了图像修补,并将实现的简单步骤发布在了 GitHub 上,我们也一并将这些内容翻译了出来,相关地址在文末,仅供各位读者参考。

GitHub 代码

这是斯坦福大学论文《Painting Outside the Box: Image Outpainting》的实现,我们做出了一些修改以适应 256*256 的图像。

  • 添加了识别损失,即从生成的图像到原始图像

  • 从训练数据中删除了补丁。(训练管道)

  • 用裁剪取代 masking。(训练管道)

  • 添加了卷积层。

    测试版本
  • python 3.5

  • keras==2.1.5

  • keras-contrib==2.0.8

  • tensorflow==1.5.0

  • opencv-python==3.4.0.12

  • Pillow==5.0.0

  • CUDA Version 9.0.176

    开始实现
  1. 准备数据

#下载 beach 数据并转换为 numpy 批量数据

#将 Numpy 批处理数据保存到'data / prepared_data /'sh prepare_data.sh

2. 建立模型

  • 如果从头开始构建模型,可以直接运行'outpaint.ipynb';

  • 或者可以下载经过训练的模型(下载地址:https://drive.google.com/file/d/1548iAtsNf3wLSc1i5zYy-HX8_TW95wi_/view), 将其移至'checkpoint /'并运行。

编者注:如果您在看过这篇文章之后,自己动手实现了相关的功能,或者您有更好的方法实现图像修补功能,请联系我们,AI 前线十分乐意为您提供一个交流的平台!

参考链接

https://github.com/bendangnuksung/Image-OutPainting

https://cs230.stanford.edu/projects_spring_2018/posters/8265861.pdf

今日荐文

点击下方图片即可阅读

弃用ETL,为什么说ELT才更适合AI应用场景? 




课程推荐

人工智能时代,如何快速且有效地入门?需要哪些数学基础?怎样掌握机器学习主要方法?工学博士、副教授王天一在他的《人工智能基础课》里,会带你巩固人工智能基础,梳理人工智能知识框架,了解人工智能的最佳应用场景。

现在订阅,有以下福利:

  1. 原价 ¥68,新用户立减 ¥30

  2. 每邀请一位好友购买,你可获得 ¥12 现金返现,好友也将获得 ¥6 返现。多邀多得,上不封顶,立即提现。

「阅读原文」,订阅专栏

如果你喜欢这篇文章,或希望看到更多类似优质报道,记得给我留言和点赞哦!

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存