2018年に発表されたモデルのTensorFlow2実装から変換します。
写真をアニメ風に変換できる機械学習モデルです。
なんとiOS上で使うことができます。
機械学習がモバイルで使えるとは、便利な時代になりましたね。
論文
変換済みCoreMLモデル:GitHub
iOSでの実行結果
モデルの変換
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を使ったアプリを作っています。
機械学習関連の情報を発信しています。