4
2

More than 3 years have passed since last update.

CartoonGANをiOS用に変換して、アニメ風自動変換してみました

Last updated at Posted at 2020-08-29

2018年に発表されたモデルのTensorFlow2実装から変換します。
写真をアニメ風に変換できる機械学習モデルです。
なんとiOS上で使うことができます。
機械学習がモバイルで使えるとは、便利な時代になりましたね。

論文
変換済みCoreMLモデル:GitHub
Aug-29-2020 23-31-13.gif
iOSでの実行結果
cover.gif

モデルの変換

1、リポジトリをクローン。

!git clone https://github.com/mnicnc404/CartoonGan-tensorflow.git
cd CartoonGan-tensorflow/

2、必要なモジュールをインストール。

!pip install -r requirements_cpu.txt
!pip install git+https://www.github.com/keras-team/keras-contrib.git
!pip install coremltools==4.0b3

3、テストスクリプトに変換スニペットを書き込んでしまいます。

*インプットshapeは元のモデルでは (None, None, 3) になっていますがそのままだとCore MLでは(1, 1, 3)になってしまうので、明示的にサイズを指定しています。

cartoonize.py,line303
models.append(cartoongan.load_model(style))
mlmodel = ct.convert(models[0],inputs=[ct.ImageType(shape=(1,256,256,3),bias=[-1,-1,-1], scale=1/127)])
mlmodel.save(style + ".mlmodel")

Xcodeでの使用方法はこちらの記事と同じです。
UGATITをCoreMLモデルに変換。【変換済みCoreMLモデルあり】iOSモバイル端末でディープラーニング画像変換
CoreGANContainerを使うと、モデルをプロジェクトにドロップするだけで使えます。

*モデルがBGRカラーでの出力になっていますので、RGB変換してあげてください。

extension CGImage {
    func toBGR()->CGImage{
        let ciImage = CIImage(cgImage: self)
        let kernelStr: String = """
        kernel vec4 swapRedAndGreenAmount(__sample s) {
        return s.bgra;
        }
        """
        let ctx = CIContext(options: nil)
        let swapKernel = CIColorKernel( source:
                                            "kernel vec4 swapRedAndGreenAmount(__sample s) {" +
                                            "return s.bgra;" +
                                            "}"
        )
        let ciOutput = swapKernel?.apply(extent: (ciImage.extent), arguments: [ciImage as Any])
        let cgOut:CGImage = ctx.createCGImage(ciOutput!, from: ciOutput!.extent)!
        return cgOut
    }
}

Core MLを使ったアプリを作っています。
機械学習関連の情報を発信しています。

Twitter
MLBoysチャンネル
Medium

相棒
note

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2