#概要
画像からアニメキャラを細かいところまできれいに切り抜きたい。
顕著なオブジェクト検出を使って、iOSオンデバイスでそれを実現する方法を書きます。
#この記事で伝えたいこと
アニメキャラのような「非人物」も、きれいに背景から分離することができるということ
既存の機械学習モデルを使って、画像内の顕著なオブジェクトの背景分離を綺麗に爆速で行う方法
#解決したい課題
オブジェクト(アニメキャラ)を切り抜くことができれば、さまざまな用途に使えます。
たとえば、背景差し替えなど。
しかし、いちいち手動で切り抜いていては、いくら時間があっても足りない。
そこで、機械学習でオブジェクトを認識し、一発で切り抜くというセマンティック・セグメンテーションの技術が近年使われてきました。
ただし、アニメキャラに適用できる高精度の機械学習モデルはなかなか出てきませんでした。
なんとか、アニメキャラを綺麗に切り抜く方法はないのでしょうか。
#課題の原因
たとえば、DeepLabなどのセグメンテーションで学習されるオブジェクトは、人物や車などのオブジェクトが多く、
それらのモデルでは事前に学習したオブジェクトしか切り抜けません。
そして、アニメに適合した高精度の事前学習済みモデルはなかなか見つからず、
自分で学習するにしても、大量のアニメ画像について、キャラと背景と塗り分けでデータセットを作る必要があります。
AppleのVisionでは、2021年から人間のセマンティック・セグメンテーションができるようになりましたが、これではアニメキャラは切り抜けません。
#課題を解決する技術、手法
###技術、手法の概要
そこで、U2Netという機械学習モデルをiOSで使うことで、アニメキャラをiOSで切り抜きます。
U2Netは、画像内の顕著なオブジェクト分離することのできる機械学習モデルで、対象のオブジェクトを限定しません。
###技術、手法の効果
U2Netを使うことで、アニメキャラを綺麗に切り抜けます。
しかも、オンデバイスで、通信なしで実行できます。
切り抜く速度は1枚0.1秒弱というつばめがえし。
###課題がどう解決されるか
これまで実現できなかったアニメキャラの切り抜きが細部まで高精度で実現でき、
背景差し替えをはじめとする様々なアプリケーションに適用できます。
###事例
実は、remove.bgというWebサービスで、すでにアニメキャラを切り抜くことができます。
このサービスの内部で使われているのが、U2Netです。
このモデルを直接使うことで、あなたのサービスでも顕著なオブジェクト検出技術が使えるのです。
###留意点
モデルはiPhoneなどのモバイルデバイス上で実行できます。
ただし、モデルの初期化に20〜30秒程度かかりますので、あらかじめバックグラウンドで初期化しておくなどの対応が必要になります。
#具体的手法
CoreML-Models のGoogleDriveリンクからU2NetのCoreMLファイルをダウンロードします。
Xcodeプロジェクトにバンドルします。
あとは、画像をモデルに渡すだけです。
guard let model = try? u2net.init() else {fatalError("model initialize error")}
guard let result = try? model.prediction(input: pixelBuffer) else {fatalError("inference error")}
let resultPixelBuffer = result.out_p1
フリーランスエンジニアです。
お仕事のご相談こちらまで
簡単な開発内容をお書き添えの上、お気軽にご連絡ください。
rockyshikoku@gmail.com
Core MLやARKitを使ったアプリを作っています。
機械学習/AR関連の情報を発信しています。