3
4

うおぉぉぉ!いつの間にかiOS形式に変換できるようになっていた消しゴムモデルLaMaをiPhoneで使う

Posted at

あの消しゴム機能がついにiOS形式に変換できるようになった

Dec-27-2023 23-34-07.gif

以前はiOS形式にできなかったLaMaインペインティングモデル。
フーリエ変換か何かが変換できなかった。
CoreMLToolsのアップデートで変換できるようになったらしい。
というのは、変換スクリプトを提供してくれている人をGitHubで見つけた。

ありがとうマルマンさん。

変換方法

git clone https://github.com/mallman/CoreMLaMa.git
cd CoreMLaMa
pip install -r requirements.txt
python convert_lama.py

これだけでLaMa.mlpackageがゲットできる。

スクリーンショット 2023-12-28 0.47.33.png

サイズも200MBぐらいで、実行時間も2秒ぐらい(iPhone13pro)。
最高か。

ちなみに、変換スクリプトでは、LaMaのラッパーモデルを作って、出力を画像のピクセル値に非正規化している。

class CoreMLaMa(torch.nn.Module):
    def __init__(self, lama):
        super(CoreMLaMa, self).__init__()
        self.lama = lama

    def forward(self, image, mask):
        normalized_mask = ((mask > 0) * 1).byte()
        lama_out = self.lama(image, normalized_mask)
        output = torch.clamp(lama_out * 255, min=0, max=255)
        return output

うむ、勉強になる。

iOSで実行

let config = MLModelConfiguration()
let model = try LaMa(configuration: config)
let input = try! LaMaInput(imageWith: inputCGImage, maskWith: maskCGImage)
let out = try! model.prediction(input: input!)
let pixelBuffer = out.output

これだけである。入力画像と、消したい領域が白の白黒画像を入れるだけ。
結果も画像(PixelBuffer)で出てくる。
最高かよ。

入力

マスク

結果

アプリ例

ということで、lama-cleaner-iOSを作ってみました。

マスク描画→インペインティング→スライダー比較
というだけだけど、インペインティングの基本的なiOS実装は入っていると思います。

🐣


フリーランスエンジニアです。
AIについて色々記事を書いていますのでよかったらプロフィールを見てみてください。

もし以下のようなご要望をお持ちでしたらお気軽にご相談ください。
AIサービスを開発したい、ビジネスにAIを組み込んで効率化したい、AIを使ったスマホアプリを開発したい、
ARを使ったアプリケーションを作りたい、スマホアプリを作りたいけどどこに相談したらいいかわからない…

いずれも中間コストを省いたリーズナブルな価格でお請けできます。

お仕事のご相談はこちらまで
rockyshikoku@gmail.com

機械学習やAR技術を使ったアプリケーションを作っています。
機械学習/AR関連の情報を発信しています。

Twitter
Medium
GitHub

3
4
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
3
4