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