论文阅读记录: Automatic Image Colorization sig16

2023-11-03

sig论文阅读记录

Let there be Color!: Joint End-to-end Learning of Global and Local Image Priorsfor Automatic Image Colorization with Simultaneous Classification ( siggraph 2016 )

论文简介

论文主页:http://hi.cs.waseda.ac.jp/~iizuka/projects/colorization/en/

作者是来自Waseda University(早稻田大学)的 Satoshi Iizuka 、 Edgar Simo-Serra 、 Hiroshi Ishikawa

这篇sig paper主要是基于深度学习做Colorization的,相关的工作也有不少,使用CNN的也有几篇论文,但是这篇Paper的效果是非常出众的,从figure1展示的效果来看,从Gray Image还原的Color Image 效果十分惊艳。

Figure1:

这里写图片描述

下面我们来大体介绍一下这篇Paper的要点:

Key Point:

  • 首先这篇Paper提出了一种基于全局先验(global priors)和局部特征(local image features)自动上色方法。使用卷积神经网(CNN),从small image patches中提取局部信息,从整张图像完成全局先验。这整个过程是端对端学习的(end-to-end learning),不需要预处理和后期处理。

  • 传统的Colorization算法需要用户交互,图割等手段,而这篇Paper基于深度学习数据驱动,可以全自动的上色。不过关于这一点,在我测试了一些结果之后,我认为如果在自动生成的基础上再加上交互,实用性会大大加强。

  • Paper提出的方法可以对任何分辨率的图像上色,这是和大部分基于CNN的方法所不同的,这当然和网络结构有关,后面会细说。

  • Paper提出的方法可以做到基于global信息,完成不同图像之间的风格转换,这个后面也会根据网络结构细说。

  • 论文使用了一个大型场景分类的数据集来进行模型的训练,利用数据集中的分类标签更加有效和有鉴别性的进行了全局的学习,比如利用图像的类别信息:室内,室外,白天,夜晚等来引导网络学习图像的语义(semantic context)信息。使得网络可以区分不同场景下的图像,来提高performance。论文也证明了这种方法比单纯使用局部信息要优秀很多。

  • 使用的色彩空间为CIE L* A * B * ,论文后面也说明了使用L* A * B *比 RGB和YUV更接近Ground truth,并且通过这一点,也很巧妙地降低了网络的学习难度,保证了输出的分辨率与输入相同,这里后面会细说。

  • 最终模型的泛华能力是比较强的,不仅适用于现在设备拍到的灰度图像,还适用于几十年前,甚至一个世纪之前拍到的图像。

  • 模型包括4个部分(整个framework由4个sub-network构成):

    • low-level feature network:底层的卷积网络,分为两个网络,两个网络的权重是共享的,用于从图像中提取最基本的特征,并后接不同的网络。

    • mid-level feature network:一个两层conv,感觉为这个专门起个名不大合适。与 global-level feature network相融合得到Fusion Layer。

    • global-level feature network:由几个conv和fc组成的分类网络,对输入的固定大小的图片进行分类,与mid-level feature network共同构成Fusion Layer,让colorization network可以得到 global feature。

    • colorization network:一个反卷积网络,从feature maps还原到target image。

网络结构:

这篇Paper主要是基于卷积神经网络的,网络结构自然是作者精心设计的,为一非循环图,作者把网络结构分成了四个主要部分,low-level feature network,mid-level feature network,global-level feature network,colorization network,通过这个网络完成了我们上述的要点。下面我们来仔细看一下论文作者设计的网络:

这里写图片描述

上图很详细的表现了整个网络结构,我们按照作者划分的几个部分来看一下整个网络的细节:

low-level feature network:

这里写图片描述

一个6层的卷积网络,用于直接从输入图像提取基本特征,激励函数:ReLU。这部分网络分为两个网络,两个网络的权重是共享的。

我认为这里分成两个网络是因为其后面接的网络是不同的,一个网络接用于图像分类的 global-level feature network来完成全局先验,另一个网络接mid-level feature network + colorization network反卷积网络来完成上色。

其中接 global-level feature network的网络是固定大小的(112*112),需要将图像Scaling后输入,之所以固定大小我觉得这是因为这部分网络是是用来确定图像的所处环境(学习semantic context),说白了就是一个图像分类的网络,所以采取了和AlexNet相似的结构,固定大小conv + fc 的结构。

而接 mid-level feature network + colorization network的网络是不固定大小的(H/2 * W/2),这里也很好理解,colorization network的目的在于可以处理任意输入大小的图像,是一个全卷积网络(FCN),所以网络大小取决于原图。

也因为这样的设计,虽然全局特征的计算是使用固定大小的图片,但是通过Fusion Layer将全局特征与局部特征融合,使得可以计算任意分辨率的图像。

这部分网络的下采样并不是采用的max pooling层,而是使用了strides,这种方法要优于max pooling,目前也比较流行。
(use convolution layers with increased strides)

mid-level feature network:

这里写图片描述

这部分网络是一个两层conv,激励函数:ReLU,感觉把这一部分单独拿出来命名确实有些牵强,可能是为了更清楚的描述整个网络吧。这部分网络的输入为low-level feature network输出的H/8 * W/8 * 512维特征,经过两层卷积神将网络后输出H/8 * W/8 * 256维特征与 global-level feature network输出的256维向量进行融合得到Fusion Layer。

global-level feature network:

这里写图片描述

因为论文作者用到了具有类别标签的Places Sence Dataset(共2448872张,205种类别),所以可以通过这些标签让网络学习到照片的semantic context,来作为全局特征。因此在global-level feature network后接一个ClassificationNetwork完成场景分类,使用互熵损失完成训练。

所以这部分网络是由4个conv和3个fc组成的分类网络(激励函数:ReLU)。说白了就是对输入的固定大小的图片进行分类,输出为一个256维的向量,与mid-level feature network共同构成Fusion Layer,让colorization network可以得到 global feature。

Fusing Global and Local Features(Fusing Layer):

这里写图片描述

作者一直强调全局特征与局部特征的融合,我也认为这个Fusing Layer是framework的关键点之一。通过将不同网络的特征融合到一起,学习到不同的特征,提升performance。例如,如果全局特征表明,它是一种室内图像,局部特征将偏向于不尝试添加天空颜色或草的颜色,而是偏向于尝试家具的颜色。

mid-level feature network将low-level feature network输出的H/8 * W/8 * 512维特征,经过两层卷积神将网络后,得到了 H/8 * W/8 * 256维特征;global-level feature network输出的全局特征为一256维向量;这两者通过作者提出的Fusing Layer进行了融合,使得colorization network能够基于局部与全局信息进行上色。

融合公式为:

Yfusionu,v=σ(b+W[YglobalYmidu,v])

这里写图片描述

这里把global-level feature network和mid-level feature network通过一层网络进行了融合,图上示例画的很清楚。

colorization network:

这里写图片描述

这部分网络是由一系列conv Layer和upsample Layer组成反卷积网络,类似auto-encoder的后半部分网络,从feature maps还原到target image。upsample Layer使用最近邻的方法(nearest neighbour)来不断地上采样,conv和upsample不断交叉输出直到size为输入图像的一半。

colorization network的输出层是一个使用sigmod函数做激励函数的Conv层,用来输出原始灰度图的色度(chrominance)

网络的最后会将色度(chrominance)与输入的亮度图(luminance)(即输入的灰度图)相结合,生成最后的彩色图像。

这里是Paper的一个非常巧妙的地方,之前说过作者一直使用的是CIE L* a * b * 色彩空间,那么为什么不使用常用的RGB,YUV呢?(事实上,paper里也做了RGB和YUV的对比实验)

这里网络的结果是色度(chrominance)也就是CIE L* a * b * 中的 a * b * , 而不是直接生成rgb。这是因为灰度图本身就是L* ,因此使用CIE L* a * b * 就可以只学习a* b* ,而不用学习L* ,这样不仅降低了网络的学习难度,而且不需要改变原来的L*。

paper里对RGB、YUV、L* a * b * 的对比实验:

这里写图片描述

训练:

目标函数:

先来看一下目标函数:

这里写图片描述

目标函数由2个损失函数构成,一项是colorization network的预测和目标图像之间的欧式距离,另一项是global-level feature network + ClassificationNetwork分类的互熵损失(cross-entropy loss),这都是非常常用的损失函数。也不需要过多解释,两者之间用alpha变量来控制不同网络的权重。

作者也提到过直接使用最终的上色结果和GrandTruth之间的欧氏距离作为损失,梯度回传整个网络的方法,但是这样会导致没法很好的学习到全局特征。

而且我认为ClassificationNetwork在这里不仅起到了学习global features,semantic context这些信息的作用,一个更重要的作用是在一定程度上减缓了梯度回传的梯度弥漫的问题,使得这么大的网络更加容易学习。

在反向传播过程中color loss 会影响这个网络,而分类损失只影响 ClassificationNetwork,global-level feature network以及共享的low-level feature network,不影响colorization network和mid-level feature network。

训练优化:

Paper中也提到了一些针对训练过程的优化:

一是对于训练数据大小的选择,如果使用的input image的size是224 * 224 像素,那么大家可以看到low-level feature network的两个子网络将完全相同,那么两个子网络的outputs就可以进行共享,也就是说训练的时候只需要训练一个网络就可以了,然后把outputs输入接下来的两种不同网络,对于作者使用的比较大的数据集,这里少训练一个子网络还是很有用的,所以作者在训练数据集的时候采用的是224 * 224像素的图像。

再就是为了使得网络可以加快收敛或者能够收敛起来,paper里还提到了可以用目前比较火的batch normalization,2015年提出,只过了一年已经300+引用,具体可以看大神的博客:
http://blog.csdn.net/hjimce/article/details/50866313

以及使用AdaDelta optimizer来优化目标函数,加快训练。

时间:

paper里提及训练该网络,所用的数据集有2448872个training image 和 20500个 validation image,总共有205个场景类别,比如修道院,会议中心,火山。训练使用的batch size 为 128,大约200000次迭代,11个epoch,在NVIDIA Tesla K80 GPU上训练整整需要3周。

至于计算时间,使用GPU的话作者说大概可以接近实时,不过作者的GPU是NVIDIA GeForce GTX TITAN X 。CPU是 Intel Core i7 - 5960X。

风格转换:

另外之前也提到了,Paper提到可以做不同图像的style的transfer,其实也是对网络结构的一个小利用:由于low-level feature network是是两个网络构成,一个对应原图输入进行局部特征提取,一个对应固定大小的输入完成全局分类,当这两个输入对应于不同的输入图像时,固定大小的输入图像的style就会嫁接到原图输入上。这是由于global-level feature network学习的是固定大小输入图像的global feature和semantic context导致的。

下面是一些style转换结果:

这里写图片描述

结果:

论文中贴出了很多验证集上的结果,看着效果都很不错:

这里写图片描述

甚至在一些100年前的老照片上也取得了不错的效果,说明模型的泛化能力还是很不错的:

这里写图片描述

作者为了证明加入全局特征的效果,也做了只使用上半部分网络,不使用全局信息的实验,下面是一些对比,BaseLine就是令融合公式中的alpha为0,即抛弃全局特征的实验结果。

这里写图片描述

这里写图片描述

可以看到上面这个图片把室内的天花板当做了天空,而增加了全局信息之后就不会出现这样的情况,对室内温暖的光线模拟的很好。

另外由于灰度图到彩色图是不可逆的,所以灰度图对应的彩色图可能是多种情况的,所以和Ground truth有所差距也是很正常的,比如paper中的这个例子:

这里写图片描述

当然这就是论文里提到的最失败的例子了,我自己从作者的Github上下载了作者的模型,然后随便找了一些自己拍的学校啊,网上的照片啊,进行尝试,我发现对于草和天空,木质纹理等等,这些自然场景,以及人的皮肤,上色的效果非常的好,对于建筑和人的衣物就差一些,有的时候建筑颜色很诡异,衣服很多情况下都是棕色。对于一些乱七八糟的图片,甚至是画的画,感觉模型总是会用棕色来进行填充,下面是一些结果,大家随意感受一下就好:

先来几个效果好的:

从网上找的一些自然风光的图:

GT:
这里写图片描述

Proposed:
这里写图片描述

GT:
这里写图片描述

Proposed:
这里写图片描述

GT:
这里写图片描述

Proposed:
这里写图片描述

GT:
这里写图片描述

Proposed:
这里写图片描述

学校的楼呵呵了,试了几个建筑效果都不大好,但是草和树很逼真
GT:
这里写图片描述

Proposed:
这里写图片描述

纹理比较复杂的,估计也没这个语义
GT:
这里写图片描述

Proposed:
这里写图片描述

还试了一些自己同学的照片,皮肤部分做的确实不错,涉及他人权利,就不上传了。

老照片:

input:
这里写图片描述

Proposed:
这里写图片描述

input:
这里写图片描述

Proposed:
这里写图片描述

从网上找的老毕业照
input:
这里写图片描述

Proposed:
这里写图片描述

input:
这里写图片描述

Proposed:
这里写图片描述

input:
这里写图片描述
Proposed:
这里写图片描述

input:
这里写图片描述

Proposed:
这里写图片描述

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

论文阅读记录: Automatic Image Colorization sig16 的相关文章

随机推荐

  • python 找出list列表中相同元素(指定元素)的所有索引

    有时需要获取列表中某一元素的所有索引 而获取列表元素索引的函数index只能返回第一个满足条件的元素的索引 此时我们可以通过两种方式获取其所有索引 1 将list转为array 对于array对象 可以使用如下方式获取某个元素的所有索引 n
  • background-position的使用方法

    这是在学习了阮一峰先生的博客后写的一篇解释笔记 附上原链接 CSS中背景图片的定位方法 CSS中的背景图片定位方法有三种 1 关键字定位 background position top left 2 像素定位 background posi
  • Unity Debug的简单封装

    对Unity Debug的简单封装 使用前提 Project Settings Player Other Settings Script Define Symbols添加 EnableLog 点击Apply 测试代码 using MTool
  • visual studio:C#工程项目生成项目时,默认将资源文件复制到输出目录

    参考 vs生成项目时 默认将资源文件复制到输出目录 总结 使用情况 通常是需要外部dll 不直接拷贝到运行目录 而是放到工程项目下 两种方式 1 生成事件里编写命令行 2 添加dll到项目目录 设置文件属性 复制到输出目录
  • 分布式搜索引擎Elasticsearch基础入门学习

    Elasticsearch介绍 Elasticsearh 是 elastic co 公司开发的分布式搜索引擎 Elasticsearch 简称ES 是一个开源的分布式 高度可扩展的全文搜索和分析引擎 它能够快速 近乎实时的存储 搜索和分析大
  • uni-app使用uView

    uni app使用uView 三配置前提 先安装uview 1 使用HBuilder创建uni app项目 这步过后就可以使用npm安装第三方组件了 cmd进入当前根目录执行 npm init y 执行后项目中会生成package json
  • 游戏开发unity插件Magica Cloth:学习贴汇总(持续更新)

    插件说明 高效的布料系统 支持jobs 开源 官方下载地址 https assetstore unity com packages tools physics magica cloth 160144 unity插件初步配置 BoneSpri
  • linux下载出现:Failed to connect to raw.githubusercontent.com port 443: Connection refused

    linux下载出现 Failed to connect to raw githubusercontent com port 443 Connection refused 原因 github域名被污染 解决方式 打开网站 https www
  • 【patchwork++】——PCA主成分分析法

    降维算法 gt 保留最大有用值信息 gt 换坐标轴 找坐标系 首先 去中心化 把坐标原点放在数据中心 然后 找坐标系 找到方差最大方向 数据线性变换 拉伸 旋转 注意 离群点对PCA影响较大 参考视频 用最直观的方式告诉你 什么是主成分分析
  • 一串首尾相连的珠子(m个),有n种颜色(n<=10) 设计一种算法去除其中一段,要求包含所有的N种颜色

    继续上代码 include
  • Hadoop3.2.1版本的环境搭建

    最近有人提出能不能发一些大数据相关的知识 No problem 今天先从安装环境说起 搭建起自己的学习环境 Hadoop的三种搭建方式以及使用环境 单机版适合开发调试 伪分布式适合模拟集群学习 完全分布式适用生产环境 这篇文件介绍如何搭建完
  • java xrunjdwp_Java远程断点调式 -Xdebug

    前言 我们在开发的过程中 难免会遇到调用别人机器上的代码 或者测试服务器上的代码 再调用过程中 难免会用到断点调式的功能 但是运行的不是本地的代码怎么办呢 现在我们就来了解下Java远程断点调用 需要 本地必须有源码 才能进行远程断点 一
  • Instant-ngp Windows11安装、使用记录

    Instant NeRF Study Debug 本机配置 Y9000P RTX3060 Win11 Instant NeRF Study Debug 1 Git 2 Cmake 3 instant ngp 示例数据 自定义数据 注意事项
  • 一次composer错误使用引发的思考

    一次composer错误使用引发的思考 2019 03 05 12 19 by 轩脉刃 阅读 评论 收藏 编辑 一次composer错误使用引发的思考 这个思考源自于一个事故 让我对版本依赖重新思考了一下 事故现象 一个线上的管理后台 一个
  • LeetCode题解——42.连续子数组的最大和(动态规划思想)

    题目地址 剑指 Offer 42 连续子数组的最大和 力扣 LeetCode 一 解题思路 在这道题中 数组连续是一个很重要的信息 我们可以创建一个数组用于记录每一位对应的最大值 所谓每一位的最大值 意思就是以这一位为结尾的数组的最大值 那
  • 面试过程中会遇到的机器学习教科书中 7 大经典问题

    如果希望了解机器学习 或者已经决定投身机器学习 你会第一时间找到各种教材进行充电 同时在心中默认 书里讲的是牛人大神的毕生智慧 是正确无误的行动指南 认真学习就能获得快速提升 但实际情况是 你很可能已经在走弯路 科技发展很快 数据在指数级增
  • SQL Server 基础语法2(超详细!)

    文章目录 选择数据库school 查询所有学生的学号 姓名和年龄 查询结果列项是中文名 查询 计算机 系的所有学生的基本信息 查询所有女同学的姓名及所在的系 显示结果不允许重复出现 查询课程号不为 1 4 或 7 的课程的信息 查询课程号不
  • 处理Matlab Coder之后, Compiler can't find "tmwtypes.h"问题

    作为一个强大的科学计算软件 matlab广泛应用于较多领域 以其简单的编程风格 便利的调试环境等众多优点 在编写算法与测试的时候通常用到 然而很多的实际运用上matlab毕竟还不是很普及 相反还是c与c 更多 同时正版matlab这样一个昂
  • Hive表的分区与分桶

    1 Hive分区表 Hive使用select语句进行查询的时候一般会扫描整个表内容 会消耗很多时间做没必要的工作 Hive可以在创建表的时候指定分区空间 这样在做查询的时候就可以很好的提高查询的效率 创建分区表的语法 create tabl
  • 论文阅读记录: Automatic Image Colorization sig16

    sig论文阅读记录 Let there be Color Joint End to end Learning of Global and Local Image Priorsfor Automatic Image Colorization