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

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

在之前的两篇博客中,我们已经介绍了关于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网络编码的特征向量,建立图像像素的关联关系,如下图所示: 

图像颜色迁移专题介绍(三):Deep Examplar-based Colorization图1.  CNN特征层的显示表示。

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

图像颜色迁移专题介绍(三):Deep Examplar-based Colorization图2.  语义对应示意图。

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

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

图像颜色迁移专题介绍(三):Deep Examplar-based Colorization图3.  颜色赋值子网流程图。

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

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

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

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

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

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

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

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

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

图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

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

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

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"

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

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

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

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

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

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

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 LEARNING WITH PYTORCH: A 60 MINUTE BLITZ | TRAINING A CLASSIFIER


下一篇:李宏毅《机器学习》| 深度学习Deep Learning简介