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

相关文章

来自专栏自然语言处理

谈谈学习模型的评估2

评估度量:(其中P:正样本数 N:负样本数 TP:真正例 TN:真负例 FP:假正例 FN:假负例)

662
来自专栏AI研习社

史上最好记的神经网络结构速记表(上)

翻译 / 陈俊雅 校对 / 李傲 整理 / 雷锋字幕组 本文提供了神经网络结构速查表,盘点了神经网络的大量框架,并绘制了直观示意图进行说明,是人手必备的神经网络...

38412
来自专栏小小挖掘机

推荐系统遇上深度学习(二)--FFM模型理论和实践

推荐系统遇上深度学习系列: 推荐系统遇上深度学习(一)--FM模型理论和实践 1、FFM理论 在CTR预估中,经常会遇到one-hot类型的变量,one-ho...

7234
来自专栏大数据挖掘DT机器学习

数据处理的统计学习(scikit-learn教程)

Scikit-learn 是一个紧密结合Python科学计算库(Numpy、Scipy、matplotlib),集成经典机器学习算法的Python模块。 一、统...

4925
来自专栏NewbieWeb

WebGL ThreeJS学习总结四

通过前段时间的学习,现在已经能使用ThreeJS框架制作一些简单3D效果,对原生WebGL也有了简单的了解;在学习过程中察觉到自己在数学方面欠缺的太多,所以我决...

1181
来自专栏MixLab科技+设计实验室

深度学习生成舞蹈影片01之MDN

Dance generator using Variational Autoencoder, LSTM and Mixture Density Network.

1913
来自专栏Deep learning进阶路

深度学习论文(八)---DeepLabV1-SEMANTIC IMAGE SEGMENTATION WITH DEEP CONVOLUTIONAL NETS AND FULLY CONNECTED C

注:本篇算是半讲解半翻译吧,我真的觉得这篇论文写的很难理解.......可能是我水平不够,也可能作者省略了一些具体信息,主要是提供了他的idea吧。 但是De...

4791
来自专栏云时之间

深度学习与TensorFlow:FCN论文翻译(三)

We test our FCN on semantic segmentation and scene parsing, exploring PASCAL VOC...

1741
来自专栏AI科技评论

干货 | 史上最好记的神经网络结构速记表(上)

本文提供了神经网络结构速查表,盘点了神经网络的大量框架,并绘制了直观示意图进行说明,是人手必备的神经网络学习小抄。 新的神经网络结构不断涌现,我们很难一一掌握。...

40312
来自专栏技术沉淀

KNN算法实现及其交叉验证

1833

扫码关注云+社区