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 条评论
登录 后参与评论

相关文章

来自专栏CreateAMind

Cramer-Wold自动编码器

572
来自专栏AI2ML人工智能to机器学习

决策树会有哪些特性?

决策树(Decision Tree)是机器学习中最常见的算法, 因为决策树的结果简单,容易理解, 因此应用超级广泛, 但是机器学习的专家们在设计决策树的时候会考...

792
来自专栏用户2442861的专栏

循环神经网络教程第二部分-用python,numpy,theano实现一个RNN

作者:徐志强 链接:https://zhuanlan.zhihu.com/p/22289383 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,...

412
来自专栏华章科技

三天速成!香港科技大学TensorFlow课件分享

该教程第一天先介绍了深度学习和机器学习的潜力与基本概念,而后便开始探讨深度学习框架 TensorFlow。首先我们将学到如何安装 TensorFlow,其实我们...

582
来自专栏人工智能LeadAI

基于协同过滤的推荐引擎(理论部分)

记得原来和朋友猜测过网易云的推荐是怎么实现的,大概的猜测有两种:一种是看你听过的和收藏过的音乐,再看和你一样听过这些音乐的人他们喜欢听什么音乐,把他喜欢的你没听...

3075
来自专栏专知

【干货】深度学习中的线性代数—简明教程

【导读】线性代数对于理解机器学习和深度学习内部原理至关重要,线性代数是有关连续值的数学。许多计算机科学家在此方面经验不足,传统上计算机科学更偏重离散数学。这篇博...

944
来自专栏机器之心

专栏 | 云脑科技-实习僧文本匹配模型及基于百度PaddlePaddle的应用

1724
来自专栏专知

【干货】IRGAN :生成对抗网络在搜狗图片搜索排序中的应用

来源:8层会议室-知乎专栏 https://zhuanlan.zhihu.com/p/31373052 一:背景 2014年,GAN之父Ian Goodfell...

3937
来自专栏深度学习之tensorflow实战篇

机器学习人群扩散(LPA算法) R实现

1、 业务场景说明: 2、 从业务映射到机器学习: 3、 友商应用资料: 4、 LPA方法原理:[1][3] 5、 特征过滤的解决方案:[4] 6、 R语言试验...

3927
来自专栏段石石的专栏

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

文本分类应该是自然语言处理中最普遍的一个应用,这篇文章主要从传统和深度学习两块来解释下我们如何做一个文本分类器。

4242

扫描关注云+社区