基于白盒表征的图像卡通化

取自CVPR2020的一篇文章Learning to Cartoonize Using White-box Cartoon Representations

图像卡通化,即是将自然拍摄到的图片转化成卡通风格的图片,属于一种风格迁移。

图像卡通化的例子

如上图所示,左图为真实图片,右图为卡通化的结果。

风格迁移很久之前就被人提出来了,比如2016年BAIR实验室提出来的Pix2Pix,以及之后针对非pair数据所提出来的CycleGAN。

Pix2Pix文章: Image-to-Image Translation with Conditional Adversarial Networks
CycleGAN文章: Unpaired Image-to-Image Translation

黑盒的方法的缺陷在于直接对数据进行建模导致输出质量的下降,以及通用性的降低。[这里文章没有给出明确的证据]

那么这个工作的特点在于借助一下绘画专家的知识以及绘画的一些行为,提出了3种白盒表征(White Box Representation):

  • 表面表征(Surface Representation):关注一个平滑的表面
  • 结构表征(Structure Representation):关注色块分布以及内容填充
  • 纹理表征(Texture Representation):注重高频的纹理,轮廓以及细节

借助这三种显式的表征,使用者可以更为灵活地控制整个方法的表现。

其整体框架可以简单地表示为下图:


基本框架

将一张图片作为输入,转化成三种表征,然后再重新融合为卡通化的结果。

我们分别来看这三种表征的具体计算细节。

表面表征

表面表征

如上图所示,是一种简单的滤波处理,但是是有指导性的。具体而言,误差设置为:
表面误差

其中 是判别器,用来判断参照的卡通图片和模型输出的图片是否含有相似的表面。 是输入的图像, 是用作为参考的卡通图像。 是一个保留边缘的滤波器(导向滤波,Guided Filter),以图像作为输入,输出表面表征。

导向滤波是一类保留边缘的滤波器,可用于去噪等

结构表征

结构表征

如上图所示,应该有两个步骤:

  • 超像素处理
  • 选择性搜索

作者首先使用felzenszwalb算法对图像进行分割,该算法是一个基于图的分割算法,这里不多赘述。

超像素方法会对这些分割块进行染色,一般来说会使用区域的平均像素值作为染色的值。

作者发现,在超像素处理过程中,更低的对比度,会使图片更暗,进而产生迷雾(hazing effect)的效果。作者给出了一个改进,自适应的根据像素的方差来调整着色,如下图所示:

自适应着色

这公式文中的说明不多,我翻了一下代码,其中的 是均值, 是中位数, 是方差。
参数选取为 ,染色结果如下图所示:
自适应着色的效果

文章认为b和d会更加亮,本人觉得c和d放错位置了,d明显会更暗。

给出结构表征的loss,如下:

结构表征误差

这里面 是取预训练过的VGG-16所抽取的特征, 就是先前所提及的分割以及自适应着色操作。

纹理特征

作者使用了一个随机色彩偏移(Random Color Shift,RCS),目的是保持纹理细节同时降低亮度和颜色的影响,形式如下:

rcs

其中 代表RGB转换成的灰度值。

误差如下:


纹理表征误差

整体误差项

整体误差项

基本上是加权求和,多了两项误差,一项是tv误差,即整体偏差-误差(total-variation loss)。另一项是内容误差。
tv误差是为了提高连续性,减少噪声,形式如下:
tv误差

内容误差为:
内容误差形式

这个内容误差是为了保证语义的不变性而设置的。

针对具体的效果,这里只展示部分结果,有兴趣的同学可以去他的github查看

人物

评估指标

评估指标这里面用了FID(Frechet Inception Distance),这是一个比较常见的针对GAN的量化指标,用来计算生成图片和真实图片的距离。FID越接近0,则二者越接近。

个人觉得风格迁移下的FID量化指标的实际意义可能不大,毕竟越相似的不一定卡通化的效果越好,还是得肉眼看才能得出结论(这篇文章也给出了User Study的实验,即让人去给图片评分)。

你可能感兴趣的:(基于白盒表征的图像卡通化)