iOS 图片风格转换(CoreML)

1. 前言

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

图片风格转换 @Prisma

2. 图片风格转换算法介绍

  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网络,用于计算图片转换网络生成图片对于我们输入的风格图和原图之间的损失大小。通过计算生成图与原图的内容损失以及生成图与风格图的风格损失大小来判断生成图的质量。通过不断计算来减少损失,反向传播到图片转换网络并对其进行优化,最终得到合格的图片风格转换模型。而这个模型就可以被我们不断用来进行图片到具体某一风格的转换。

3. CoreML介绍

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


MLModel结构

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

4. 代码实现

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

CVPixelBufferRef转换代码

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

Output

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

image.png

更多具体的代码见项目。

5. 细节优化

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中的颜色转换合成图了。

6. 运行环境

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

7. Demo

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

shoot1.jpeg
shoot2.jpeg
shoot3.jpeg
shoot4.jpeg
shoot5.jpeg
shoot6.jpeg

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

8. 参考文献

  • [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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容