一篇关于如何用深度学习完成自动上色(Automatic Image Colorization)的论文浅析

2023-11-19

论文标题是《Let there be Color!: Joint End-to-end Learning of Global and Local Image Priors for Automatic Image Colorization with Simultaneous Classification

Paper:http://hi.cs.waseda.ac.jp/~iizuka/projects/colorization/data/colorization_sig2016.pdf
GitHub Code: https://github.com/satoshiiizuka/siggraph2016_colorization

论文题目包含了这个网络的主要特点:
1. 端到端
2. 上色过程结合了全局(图像的语义信息)和局部特征
3. 整个过程自动完成上色,不需要预处理和后处理
4. 在上色的过程能同时完成分类的任务

前言:

end to end:

端到端指的是输入是原始数据,输出是最后的结果,非端到端的输入端不是直接的原始数据,而是在原始数据中提取的特征。

端到端的好处:通过缩减人工预处理和后续处理,尽可能使模型从原始输入到最终输出,给模型更多可以根据数据自动调节的空间,增加模型的整体契合度。在目标检测领域,yolo就是典型的端到端网络,You Only Look Once的意思就是端到端。

色彩空间:

Lab和RGB一样也是色彩空间的一种。L 代表亮度,而 a 和 b 代表颜色光谱绿-红和蓝-黄。正如下图所示,Lab 编码的图片有一个灰度层,而颜色层由三个减少为两个。这意味着我们可以在最终的预测中使用原来的灰度图片,同时只需要预测两个通道。

这里写图片描述

从实验上来说,人类眼睛里大约 94% 的细胞是用来探测亮度的,只有剩下 6% 是用来感应颜色的。正如你在上图中所看到的,灰度图比颜色图看起来清楚多了,这也是我们需要在神经网络输出中保留灰度图的另一个原因。

作者尝试了三种图像空间RGB、YUV、Lab,最后Lab效果相对较好,因此采用了它。
这里写图片描述

网络结构:

这里写图片描述

整个网络的架构由两个大部分组成:第一部分是由低级特征提取网络、中级特征提取网络、融合层和上色网络组成;第二部分由低级特征提取网络、全局特征提取网络组成。其中低级特征提取网络共享卷积核的权重,图中两个低级特征提取网络的紫色tensor厚度是相同的,但宽和高却不一定相同。

其实关于低级、中级、全局特征提取网络的区分是很模糊的,只能通过网络的深度来做一个大概的判断。一般卷积网络随着深度增加,提取的特征维度就会越来越高,一般认为:边和角—>纹理—>全局特征。

网络的输入是灰度图,第一部分网络的输入是原图像大小的灰度图,第二部分网络的输入是reszie(就是结构图中第二部分网络输入的Scaling操作)成224*224后的灰度图。第一部分只包含了卷积,所以对输入图像的大小没有限制。而第一部分包含了全链接,因此对输入图像的大小有限制。

神经网络的预测过程就像这样:我们有一张灰度图的输入,我们希望以此来预测两个色彩图层,Lab 中的 a 和 b,它们一起构成了色相(Chrominance)。再将预测图层经过上采样成原图的大小,最终和输入的灰度图层 L (Luminance)一起组合成 Lab 图片。

第一部分

网络结构的第一部分其实是一个生成模型,它已经具备上色的功能了,但是因为没有结合全局特征,所以效果不好。如下图所示,中间列是仅有第一部分网络时的输出结果,右边列是添加第二部分网络(全局特征)后的输出结果,明显看到中间列采用了非室内的色系,但是右边列显示良好,这就是加入全局特征的好处。网络在上色时,先根据图像内容的得到语境信息,然后再决定采用哪种“配色方案”,最后根据不同的纹理进行上色。
这里写图片描述

上色网络做了低级特征提取网络的反操作,不断通过上采样将tensor长宽还原。

第二部分

网络的第二部分是一个标准的卷积网络,全局特征提取层的输出是一个1x1x256的张量,通过融合层将语义信息加入第一部分网络。在全局特征后面添加两个全连接,第二部分网络就成了一个cifar*分类网络,具有了分类功能。当然正因为这个原因,全局特征提取网络的输出具有图像的语境信息。

网络的损失函数:
加入分类功能后网络的损失函数

损失函数的前半部分是一个典型的无监督网络的损失函数:Xtrue - Xpre的MSE,后半部分就是分类部分的损失。前半部分损失的反向传播影响整个网络的权重,分类损失则只影响第二部分网络,并不影响上色网络和中级特征提取网络的权重。通过设置超参数阿尔法为0,就可仅使用上色部分损失。

总体来说,网络结构有两个亮点:

  1. 融合层
  2. 伴生的分类功能和风格迁移

融合层

融合层的公式:
融合层的公式

从公式来看:全局特征提取层的输出是一个1x1x256的张量,将这个张量看成一个火柴,将(H/8)x(W/8)根火柴堆叠成一个立方体,大小为(H/8)x(W/8)x 256。将每一根火柴和其纵向对应的中级网络输出拼成一个大小为1 x 1 x(256+256)的张量,将这个张量和融合层纵向对应的输出(大小为1 x 1 x 256)做一个全连接,因此这样的全连接总共有(H/8)x(W/8)个。
其实简单的说,是对融合层做了一个1x1的卷积。

风格迁移

此外,这个网络还有另一个副产品—风格迁移

这里写图片描述

通过将第二部分网络的输入换成想要迁移的风格的灰度图,这里要求与被风格迁移的图片是相同的类型。下图通过麦田来对油菜花上色,使得输入图片就像更替了季节。
这里写图片描述

网络其他细节:

  • 网络的输入是多分辨率的。
  • 网络中没有池化层,通过步长为2*2的卷积代替池化。
  • 除了输出层的激活函数是sigmod,其他层的激活函数都使用了Relu。
  • 网络中的上采样都采用了基于最近邻算法的reszie。
  • 对模型来说训练集是十分重要的,如果训练集的图片种类较少,那么泛化能力必然不好。
  • 所有的上色模型都是没法解决诸如给一件毛衣上色的问题的,因为毛衣颜色 - 是不确定的,模型不能通过一张灰度图就判断它的颜色,不像天空、树木,有固定的色系,就像下图一样。
    这里写图片描述

结论

大部分深度学习相关论文都很少见到理论推导,虽然反向传播有严格的数学基础,但是关于模型本身的结构为什么能达到目标,基本是通过试验结果来证明的,这种基于经验的模式需要我们对不同的“积木”有深刻认识。

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

一篇关于如何用深度学习完成自动上色(Automatic Image Colorization)的论文浅析 的相关文章

随机推荐

  • 金晟富:5.24黄金原油最新行情涨跌分析,黄金原油操作建议

    前言导读 新的一天 新的开始 新的机会 投资路并非坦途 我的文字不华丽 但是却很真诚 财富自由首先是脑袋的距离 然后才是口袋的距离 出现亏损应当去寻找原因 去改变目标处境 不然将会陷入恶性循环 不断的亏损 不断的找理由 赚钱的单拿不住 亏钱
  • docker official tutorial, unable to build images.docker官方教程无法生成镜像

    windows docker 根据dockder的官方tutorial教程 docker build t getting started 这一步无法成功 一直是如下报错 21 53 error An unexpected error occ
  • element-plus 关于按需加载的问题

    完整的引入没什么说的 import createApp from vue import ElementPlus from element plus import element plus lib theme chalk index css
  • 用Python调用OpenAI API做有趣的事

    GPT 迭代过程概要表 版本 发布时间 训练方案 参数量 是否开放接口 GPT GPT 1 2018 年 6 月 无监督学习 1 17 亿 是 GPT 2 2019 年 2 月 多任务学习 15 亿 是 GPT 3 2020 年 5 月 海
  • 数据库2:创建表(头歌云课)

    任务描述 相关知识 如何在指定数据库中创建表 编程要求 测试说明 任务描述 本关任务 在数据库中 创建一个表 相关知识 我们知道数据库就是存储数据的地方 那数据库中的数据到底存放在哪里呢 数据库中的数据是存放在数据库中的一张一张表 你可以想
  • 机器学习数据分析软件:Octave

    最近学习了Octave数学软件 这个软件类似于MATLAB 但是操作要比MATLAB简单很多 上手快 对数据分析有很大的帮助 所以这里就简单的把部分练习的代码放在这里 如果你想实现一下 可以按照代码内容来 或者自己编写 GNU Octave
  • sql注入靶场1-65

    第一关 单引号闭合 order by 判断字段数 显示位2 3 输出数据库版本 id 1 union select 1 2 version 输出数据库名称 id 1 union select 1 2 database 查看所有表名 id 1
  • torch.onnx.export():将pytorch模型转换为.onnx模型

    torch onnx export model args f export params True verbose False training False input names None output names None aten F
  • webpack 的externals配置

    官网解释 webpack 中的 externals 配置提供了不从 bundle 中引用依赖的方式 解决的是 所创建的 bundle 依赖于那些存在于用户环境 consumer environment 中的依赖 怎么理解呢 意思是如果需要引
  • Linux FTP服务

    目录 一 FTP概述 1 Standard模式 主动模式 2 Passice模式 被动模式 二 搭建和配置FTP服务 1 实验环境 2 软件安装 3 设置匿名用户访问FTP服务 4 开启服务 关闭防火墙和增强型安全功能 5 匿名访问测试 1
  • Spring Data JPA中常用的注解详解

    我们先看看类前面的两个注解 Entity 对实体注释 任何Hibernate映射对象都要有这个注释 Table name 自定义的表名 完成表和实体之间的映射 跟上面的注解默认需要配置的 Id 把这个类里面所在的变量设置为主键Id Gene
  • 单片机生成PDF文件(STM32+LIBHARU)

    之前发过一个帖子 是STM32移植了一个pdf库 不过那个库功能比较简单 有很多东西都没有 比如加载图片和文件加密 这次主要是为了文件加密 翻阅了一下资料 单片机做PDF文件 网上资料不是很多 可以说基本上找不着 github上翻源码 翻了
  • windows查看功耗

    可以在Windows系统中查看功耗的方法有以下几种 使用任务管理器 在Windows桌面上按下Ctrl Alt Delete键 选择任务管理器 然后在 性能 选项卡中单击 电源使用情况 查看功耗信息 使用系统监视器 打开系统监视器 在Win
  • java 图片Base64转成文件流,直接在浏览器访问图片

    因为业务 需要把图片base64转成文件流 然后直接在浏览器访问就可以看见图片 回显图片 author liuhengliang return ModelAndView RequestMapping value image private
  • 基于51单片机的温度烟雾报警系统设计

    功能 本实例是基于51单片机的温度烟雾报警系统 主要硬件由51单片机最小系统 LCD1602液晶屏电路 烟雾检测电路 温度感应电路 蜂鸣器报警电路 ADC0832转换电路 LED指示灯电路和按键电路构成 1 LCD1602液晶屏 第一行显示
  • Colab .ipynb 从本地/云端/GitHub 导入并使用.py文件

    1 下载 上传目标文件 1 从GitHub下载所需repo 下载Code 下载 Zip 文件保存到本地 2 上传至云端Google Drive 上传成功后就能在My Drive看到文件夹了 尝试过直接Clone repo到Colab 但是后
  • python爬取考研网的信息

    今天我们使用python来爬取考研网站的信息 目标网站 https yz chsi com cn zsml queryAction do 使用的库 requests bs4 pandas 这些库统一可以使用pip进行统一安装 pip ins
  • VSCode 插件安装:中文(简体)语言包(附带:不生效解决方案)

    文章目录 VSCode 安装插件 中文 简体 语言包 中文语言包不生效解决方案 打开 命令面板 配置显示语言 选择中文 重启VSCode 效果 中文界面 VSCode 安装插件 中文 简体 语言包 插件市场搜索 中文 选择如下插件安装 Ch
  • Vue3自定义指令之前端水印功能实现

    一 前置知识 Vue 中的自定义指令 先来说说 vue2和vue3中自定义全局指令的区别 相同点 指令的应用场景 原理是一致的 不同点 生命周期钩子函数名 指令定义的格式不一样 vue2中自定义全局指令 定义 注册一个全局自定义指令 v f
  • 一篇关于如何用深度学习完成自动上色(Automatic Image Colorization)的论文浅析

    论文标题是 Let there be Color Joint End to end Learning of Global and Local Image Priors for Automatic Image Colorization wit