在之前的两篇博客中,我们已经介绍了关于color transfer在2015年之前的一些主流的研究思路,即在相应的颜色空间中,利用语义对应关系,实现语义一致的颜色迁移。博客链接:

图像颜色迁移专题介绍(一):Global Color Transfer

图像颜色迁移专题介绍(二):Correspondence

稍微对color transfer有些研究的同学,就能够发现上述传统方法的缺点,即语义对应的泛化性问题。通常,我们在指定参考图像时,主观上应该只是一个比较粗略的概念,觉得某张图片的颜色很好,具有美学意义上的价值,进而将其指定为颜色迁移的参考。但是,这不代表这种参考在语义上就与我们希望修改颜色的源图像保持了紧密的一致性。或者,我们不能保证参考图像与源图像具有全面的语义对应,那些没有语义对应的区域是不可避免的存在的。在颜色迁移的时候,这些区域会产生不可预知的结果。这造成了一种矛盾的情况:如果不建立语义对应,全局颜色迁移结果粗糙,没有语义关联;如果尝试建立语义对应以获得更好的颜色迁移方案,结果受到语义对应算法的性能影响,同时对于本就不存在语义对应的区域,极可能产生不好的颜色迁移结果。为了解决该问题,新的颜色迁移解决方案,Deep Exampler-based方法 [1] 在2018年前后被提出。本篇博客就来尝试学习一下该算法并解释其对于颜色迁移这项工作贡献了哪些新的观点。

1. 算法简介

Deep Exampler-based方法,简而言之,就是通过利用一个更大的样本数据库,结合输入的参考图像,综合计算,生成一个颜色迁移方案。根据之前的描述我们知道,传统基于语义对应的颜色迁移方法,对于没有语义关联的区域是没有很好的解决方案的。Deep Exampler-based方法会从一个较大的数据库,原文用的是ImageNet,来获得能够补全那些非关联区域的颜色。简单的说,就是如果源图像与参考图像存在语义对应的区域,就用参考图像的颜色方案;没有语义对应的区域,就从数据库中寻找最优的匹配,以建立颜色方案。融合上述两种颜色方案,最终能够生成与参考图像颜色语义一致,同时没有语义对应的区域也能够赋以满足自然条件约束的颜色方案。

为了能够实现这个idea,有几个技术难点:第一,建立语义对应关系;第二,高效的融合颜色方案。这里的语义对应关系,除了参考图像与源图像之间,还包括样本库与源图像之间。这种多对一的语义对应,显然对算法的要求更加复杂,在效率与性能上会有更好的要求。由于是多对一的生成颜色方案,那么这些方案最终还是要完成整合,赋值到源图像上。因此,找到好的融合颜色方案也是避不开的需要解决的问题。那么,在下边的算法详解中,我们尝试学习Deep Exampler-based方法是如何解决上述两个问题的。

2. 算法详解

整个框架可以分为两个基础模块:Similairty-Sub NetColorization-Sub Net

Similairty-Sub Net利用了一项经典工作的核心idea:Deep Image Analogy [2]。简而言之,就是利用经过CNN网络编码的特征向量,建立图像像素的关联关系,如下图所示:

图1.  CNN特征层的显示表示。

卷积后,具有语义一致性,但是在像素分布上又有很大区别的图像,能够建立关联。基于此,两幅颜色差异很大的图片,就能够通过卷积后比较模糊的特征编码,建立像素级别的对应。这充分利用了AlexNet [3] 所提出的特征层语义关联特性。看过我之前颜色迁移博客的同学应该直到,找到correspondence对于颜色前迁移至关重要。利用CNN的语义特征建立correspondence,鲁棒性强,精度好,扩散准确且语义一致。下如给出一个更加显著的例子:

图2.  语义对应示意图。

使用我们之前介绍的NRDC,也就是Non-rigid Patchmatch建立correspondence,只能对应很小的一块区域。但是,如果使用CNN,可以看到,即使源图(src)和参考图(ref)在颜色分布上有较大的差别,但是通过特征向量建立的对应,无论从语义连接,姿态鲁棒性上看,都得到看了非常不错的结果。通过对应,直接把颜色进行替换,可以考到,结果图几乎没有明显的语义上的颜色断裂。尤其是第三行图片,被白雪覆盖的树木的颜色,被很好的迁移到原图没有白雪的数目上。

Colorization-Sub Net基于correspondence所建立的对应关系,通过训练一个Multi-task net来优化原图像的颜色赋值方案,使得其与通过对应建立的直接赋值方案差异最小,且保持与原图像L通道语义结构的一致。

图3.  颜色赋值子网流程图。

F表示feature map,提取自relu5_1(图1)。使用同样一个网络训练两个loss function项目,其中

这里原文还特别提到,T’ab表示预测图片的ab值,即Lab空间ab的通道值。但是,这个信息是没有的,我们的目标就是得到这个值。为了满足loss function的要求,这里是通过correspondence来将参考图片R里的ab值映射到T中,得到一个伪ab,即T’ab,用以训练网络。 最终得到颜色迁移的模型,下图展示一些原文中列出的示例:

图4.  颜色迁移示例。基于不同的参考图,灰度图的颜色迁移呈现自然但风格不同的结果。

3. 源码配置

源代码下载

作者已经提供了源代码,并且提供了预编译的exe文件,方便使用,链接如下:

GitHub:Deep-Exemplar-based-Colorization

但是,这里我使用exe文件中对应的执行程序,会报cudnn的未知错误,猜测是编译版本不对应导致,所以我把源项目在我自己的机器上重新配置后,完成编译,以生成新的exe文件。这里就涉及到配置caffe的问题。请注意,这里的VS版本使用的是2013版,主要是出于兼容性考虑。所以在配置前,你需要安装VS2013版本,下载链接为:

VS2013 download

Caffe配置

我查了一下,一般基于caffe的框架代码,一般都是基于VS2013+cuda8.0+cudnn5.0平台来实现编译的,因此,这里我们也是默认使用上述的版本来完成Deep Colorization的配置与编译

Cuda:CUDA Toolkit 8.0 - Feb 2017 | NVIDIA Developer

Cudnn: cuDNN Archive | NVIDIA Developer

cudnn的下载一般需要登录nvidia账号

Caffe配置中需要注意的一些问题

如果你没有做任何提前设置,使用的是win10甚至win11的系统,VS目前使用版本是2019或2022等,那么你大概率会遇到NuGet连接问题。

通过查看别人的博客发现,需要通过添加注册表项目解决,如下:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319] "SchUseStrongCrypto"=dword:00000001 [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v4.0.30319] "SchUseStrongCrypto"=dword:00000001

Python程序配置

老版本torch的安装

pip install torch==1.6.0+cu101 torchvision==0.7.0+cu101 -f https://download.pytorch.org/whl/torch_stable.html

如果出现

OMP: Error #15: Initializing libiomp5md.dll, but found libiomp5md.dll already initialized.

在程序前输入:

import os
os.environ["KMP_DUPLICATE_LIB_OK"] = "TRUE"

展示一些颜色迁移的结果,如下图:

灰度图自动上色效果,如下图:

 

 

4. 总结

基本上,deep-exampler based colorization 是一个设计合理,且充分利用到CNN优势的颜色生成或迁移的框架。通过CNN建立像素级别的对应,结果准确且鲁棒性强,比传统的patchmatch确实有显著的优势。之后,同样是基于深度网络训练图像的颜色赋值,能够兼顾语义一致性,同时尽可能的学习reference图像的颜色方案,最终生成满足要求的颜色方案。整个框架可以应用于多种基于彩色照片的应用。

Reference

[1] He M, Chen D, et al. Deep exemplar-based colorization[J]. ACM Transactions on Graphics, 2018, 37(4): 1-16.

[2] Liao J, Yao Y, Yuan L, et al. Visual atribute transfer through deep image analogy[J]. ACM Transactions on Graphics, 2017, 36(4): 120.

[3] Krizhevsky A, Sutskever I, Hinton G E. Imagenet classification with deep convolutional neural networks[J]. Advances in neural information processing systems, 2012, 25: 1097-1105.

图像颜色迁移专题介绍(三): Deep Examplar-based Colorization相关推荐

  1. 图像颜色迁移专题介绍(一): Global Color Transfer

    最近因为种种工作的要求,需要我在视觉领域找一个题目做一做.我决定重操旧业,把我硕士阶段曾经研究过一小段时间的图像颜色迁移方法重新拾起来,看一下有什么可以做的东西.本篇博客就是我最近做算法调研时候的一些 ...

  2. 图像颜色迁移《color transfer between images》

    前言 前段时间,在深度学习领域不是有个比较火的方向叫风格迁移的嘛,对于我这种不喜欢深度学习那种不稳定结果的人来说,还是想看看传统图像处理领域有什么类似的技术,发现了一个颜色迁移的算法,很久前的论文了. ...

  3. 基于GMM模型的图像分割与颜色迁移算法

    在之前的博客中,我们已经介绍过高斯混合模型(GMM)的一些基础知识,链接: Gaussian Mixture Model:混合高斯模型介绍_程序猿老甘的博客-CSDN博客 在该博客中,我们提到了贾佳亚 ...

  4. TensorFlow练手项目三:使用VGG19迁移学习实现图像风格迁移

    使用VGG19迁移学习实现图像风格迁移 2020.3.15 更新: 使用Python 3.7 + TensorFlow 2.0的实现: 有趣的深度学习--使用TensorFlow 2.0实现图片神经风 ...

  5. 黑白图像自动上色(颜色迁移版)

    在<一篇关于如何用深度学习完成自动上色(Automatic Image Colorization)的论文浅析>看到这个模型也可以作颜色风格迁移,这里也来试试,先换另一个模型:colorne ...

  6. 图像风格迁移(Neural Style)简史

     图像风格迁移科技树 什么是图像风格迁移? 先上一组图. 以下每一张图都是一种不同的艺术风格.作为非艺术专业的人,我就不扯艺术风格是什么了,每个人都有每个人的见解,有些东西大概艺术界也没明确的定义.如 ...

  7. 跌倒综述 Deep Learning Based Systems Developed for Fall Detection A Review

    文章目录 1.基本信息 2. 第一节 介绍 3. 第二节 跌倒检测系统文献 4.第三节 讨论和未来方向 5. 第四节 结论 6. 参考文献 1.基本信息 题目:Deep Learning Based ...

  8. 《动手学深度学习》Task09:目标检测基础+图像风格迁移+图像分类案例1

    1 目标检测基础 1.1 目标检测和边界框(9.3) %matplotlib inline from PIL import Imageimport sys sys.path.append('/home ...

  9. 图像均值迁移模糊:pyrMeanShiftFiltering()

    https://blog.csdn.net/kingkee/article/details/94437333 一.编程环境: OpenCV  4.1.0 IDE Visual Studio 2017 ...

最新文章

  1. js页面跳转或重定向
  2. 两年的等待,近700页干货,同系列累计销量25万+,第三版内容更扎实
  3. 每日一皮:某程序员对书法十分感兴趣。一日饭后突生雅兴...
  4. Android ImageLoader(Android-Universal-Image-Loader)【1】概述及使用简单介绍
  5. SAP Spartacus category navigation页面鼠标进入事件的处理
  6. vscode python环境配置_用VScode配置Python开发环境
  7. 为什么C++永不过时?
  8. SpringCloud Alibaba Sentinel断路器介绍与控制台搭建
  9. easy-hiphop一键安装hiphop脚本
  10. CUDA实践指南(十三)
  11. linux环境编程apue和unp,UNIX高级环境编程:源码(apue)下载 编译和运行
  12. Android多开检测的另一个思路
  13. 第10章 主成分分析(PCA)
  14. 皮影机器人ppt_机器人皮影戏装置的制作方法
  15. 百度轻应用hackathon比赛:猩猩理财
  16. Python期末考试题库
  17. Visual Studio 2015 Bowser Link的功能不停的向服务端发送请求
  18. 降维打击!记录我在大二的腾讯面试
  19. 对话白先勇:中国文化是世界上最美的
  20. 嵌入式 C 语言中三块难啃的硬骨头

热门文章

  1. 重庆北大青鸟校长班同学部门作品欣赏
  2. 企业公众号开通微信支付
  3. linux 版本中 i386/i686/x86-64/pcc 等... 的区别
  4. 使用百度API实现实时公交线路查询及地图显示
  5. 设计师打卡灵感网站再也不麻烦 |1个优秀的设计类导航网站搞定!
  6. 使用数传电台无线远程传输雷达数据的参考方案
  7. 9成企业打算发年终奖,人均到手2.3万元
  8. 基于AT89C51单片机的数字电压表PROTEUS仿真设计
  9. Linux 下查看麦克风或音频采集设备
  10. 图解如何调整光驱激光头功率