iOS 图片风格转换(CoreML)

前言

图片风格转换最早进入人们的视野,估计就是Prisma这款来自俄罗斯的网红App。他利用神经网络(多层卷积神经网络)将图片转换成为特定风格艺术照片。利用图片风格转换算法,我们可以将一个图片放入以及训练好的神经网络模型进行预测结果得到风格迥异,独具特色的图片。随着iOS11苹果推出了CoreML,我们可以很轻松将训练好的这些风格转换模型转换成为苹果的CoreML Model,并使用这个模型来进行图片风格转换。

图片风格转换 @Prisma

图片风格转换算法介绍

2015年,德国科学家 Gatys等人发表一篇名为《A Neural Algorithm of Artistic Style》的论文,打开了神经网络在图像艺术创作的大门。作者利用VGG16模型对一张原图(Content Image)和一张风格图(Style Image)分别进行图像特征提取。通过利用对两种特征构造损失函数,对一张初始化图片进行损失值计算并反馈重绘图像得到生成图(Generated Image)。但是这个算法每一次生成一张图片都需要进行一次网络训练,需要耗费的时间比较长。斯坦福大学的Johnson[6]等人提出了快速风格转移算法,训练一个网络,对于任意一张图片都可以转换成为网络对应的风格。快速转移算法包含两个网络。一个为图片转换网络(Image Transform Network),一个为损失网络(Loss Network)。

在训练阶段利用大量图片用两个网络进行训练得到模型,在输出阶段套用模型将结果进行输出得到生成图。他们得出的网络相对Gatys的模型得到生成图的速度快上三个数量级。我们在iPhone上进行图片风格转换的时候可以使用Johnson的方法快速的生成风格图片,当然使用Gatys的方式也是可以的,但是在生成图片的时候会消耗更多的时候。

快速风格迁移算法

上图即是快速风格迁移算法的整体结构图,该算法包括图片转换网络和损失计算网络。其中图片转换网络是一个多层卷积神经网络,它将一张输入的原始图片转换成为一张生成图片。损失计算网络是一个VGG-16网络,用于计算图片转换网络生成图片对于我们输入的风格图和原图之间的损失大小。通过计算生成图与原图的内容损失以及生成图与风格图的风格损失大小来判断生成图的质量。通过不断计算来减少损失,反向传播到图片转换网络并对其进行优化,最终得到合格的图片风格转换模型。而这个模型就可以被我们不断用来进行图片到具体某一风格的转换。

CoreML介绍

CoreML 是 Apple 今年 WWDC 新推出面向开发者的机器学习框架。如果我们有一个MLModel我们可以容易的利用Model进行结果的预测,所有的MLModel都会有以下结构。

MLModel结构

一般一个MLModel文件会包括MLInput,MLModel,MLOutput三部分,我们将数据封装成为Input并交付给MLModel,模型会进行结果预测并输出预测结果Output,我们再将预测的结果转换成为我们需要的数据类型。

代码实现

CoreML对图片的处理都需要将图片转换成为CVPixelBufferRef数据,这里提供一段UIImage转CVPixelBufferRef的代码。

CVPixelBufferRef转换代码

将图片转换成为CVPixelBufferRef之后放入模型进行处理生成Output并得到结果,结果也是一个CVPixelBufferRef的数据。

Output

所以这里我们还需要将CVPixelBufferRef转回去UIImage,具体的实现代码如下:

image.png

更多具体的代码见项目。

细节优化

5.1

合成图生成效果转换

有时候我们会觉得合成图片的效果并不如意,如下面的示例图1跟2,我们可以看到2已经跟1差异非常的大了,一定程度上我会觉得风格过度了。这个时候我们可以通过调整合成图的效果来换取整体构图的完整性,比如说图3的风格只有50%。我们可以看到图3成像会更加具体而又有独特风味。此外还可以通过调整对比度,颜色饱和度来调整构图,这里就需要根据图片消耗更多的时间了。

示例图 @Fzliu

5.2

合成图眼色转换

图片风格转换在我看来有一点是独特但是也是致命的,那就是颜色的迁移。我么可以看到在示例图2中,合成图是使用梵高的星空转换出来的图片,整体图片纹理以及颜色进行了变化。这个时候如果我们希望保留原图的颜色而未知合成图的纹理,就可以使用YUV颜色空间进行转换。

示例图2

YUV是图片的一种数据格式,YUV中的“Y”表示图片的明亮程度;“U”代表色度,也称为饱和度;“V”代表浓度。从YUV的示例图我们可以很清楚的看到他们的具体含义。

YUV示例

在这里我们可以看到其中U以及V可以很好代表图片的颜色,而Y代表了图片的大部分内容。因此我们可以移植原图的U以及V到合成图上,就可以得到示例图2中的颜色转换合成图了。

运行环境

  • Mac OS 10.12.6
  • Xcode 9 beta 6
  • Python 3.1
  • Tensorflow 1.0
  • Keras 2
  • Coremltools 0.4.

Demo

这里我将现有的风格转换模型集合在一起写了一个风格转换Demo,具体可以见截图:

shoot1.jpeg

shoot2.jpeg

shoot3.jpeg

shoot4.jpeg

shoot5.jpeg

shoot6.jpeg

Demo地址:https://github.com/kingandyoga/StyleTransfer-iOS

参考文献

[1]. Ethan Chan and Rishabh Bhargava. Show, Divide and Neural: Weighted Style Transfer[D]. Stanford University,2016

[2]. Leon A. Gatys, Alexander S. Ecker,Matthias Bethge. A Neural Algorithm of Artistic Style[D]. Germany,2015

[3]. Justin Johnson, Alexandre Alahi, Li Fei-Fei. Perceptual Losses for Real-Time Style Transfer and Super-Resolution[D]. Stanford University,2016

[4]. Leon A.Gatys, Matthias Bethge, Aaron Hertzmann, Eli Shechtman.Preserving Color in Neural Artistic Style Transfer[D].Germany,2016

[5]. Apple Core ML documentation (https://developer.apple.com/documentation/coreml)

[6]. Style Transfer Sample(https://github.com/fzliu/style-transfer)

[7]. MLModelZoo

原文发布于微信公众号 - 人工智能LeadAI(atleadai)

原文发表时间:2017-10-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏ATYUN订阅号

使用深度学习检测面部特征,让实时视频聊天变得更有趣

也许你想知道如何在实时视频聊天或者检测情绪的时候把有趣的东西放在脸上?我们可以利用深度学习以及一种较老的方法实现它。 ? 过去,检测人脸及其特征(如眼睛、鼻子、...

3075
来自专栏华章科技

终于,Geoffrey Hinton那篇备受关注的Capsule论文公开了

Geoffrey Hinton 等人备受关注的 NIPS 2017 论文《Dynamic Routing Between Capsules》已于数小时前公开。

702
来自专栏大数据

用R处理不平衡的数据

在分类问题当中,数据不平衡是指样本中某一类的样本数远大于其他的类别样本数。相比于多分类问题,样本不平衡的问题在二分类问题中的出现频率更高。举例来说,在银行或者金...

2924
来自专栏IT派

终于,Geoffrey Hinton那篇备受关注的Capsule论文公开了

Geoffrey Hinton 等人备受关注的 NIPS 2017 论文《Dynamic Routing Between Capsules》已于数小时前公开。 ...

41110
来自专栏机器之心

学界 | 极端图像压缩的生成对抗网络,可生成低码率的高质量图像

选自arXiv 作者:Eirikur Agustsson等 机器之心编译 参与:白妤昕、刘晓坤 本文提出了一个基于生成对抗网络的极端学习图像压缩框架,能生成码率...

2935
来自专栏机器之心

ECCV 2018 | 中山大学&商汤提出部分分组网络PGN,解决实例级人体解析难题

识别每个语义部分(如手臂、腿等)是人体解析中最基本、最重要的一部分。不仅如此,它还在许多高级应用领域中发挥了重要的作用,例如视频监控 [38]、人类行为分析 [...

744
来自专栏AI科技评论

学界 | 如何用未标注样本解决单标注样本下的视频行人重识别问题?

本文作者为悉尼科技大学博士生武宇(Yu Wu),他根据 CVPR 2018 录用论文 Exploit the Unknown Gradually: One-Sh...

651
来自专栏量化投资与机器学习

【年度系列】使用LSTM预测股票市场基于Tensorflow

在本文开始前,作者并没有提倡LSTM是一种高度可靠的模型,它可以很好地利用股票数据中的内在模式,或者可以在没有任何人参与的情况下使用。写这篇文章,纯粹是出于对机...

1203
来自专栏机器之心

专栏 | 自然语言处理第一番之文本分类器

机器之心专栏 作者:想飞的石头 文本分类应该是自然语言处理中最普遍的一种应用,例如文章自动分类、邮件自动分类、垃圾邮件识别、用户情感分类等等,在生活中有很多例子...

2164
来自专栏AI科技大本营的专栏

如何快速优化机器学习的模型参数

【导读】一般来说机器学习模型的优化没什么捷径可循。用什么架构,选择什么优化算法和参数既取决于我们对数据集的理解,也要不断地试错和修正。所以快速构建和测试模型的能...

712

扫码关注云+社区