Slide 1

Slide 1 text

SansanにおけるエッジAI の実⽤例とMLOps 第26回MLOps勉強会 Sansan 研究開発部 Architectグループ 堤修一 @shu223

Slide 2

Slide 2 text

⾃⼰紹介 堤修⼀ - 12年間iOSエンジニア(主にフリーランス) - ID: shu223 - GitHub・・・25.1k Stars - Twitter, Qiita, Zenn, note, etc. - YouTube, Podcast - 著書:

Slide 3

Slide 3 text

⾃⼰紹介 - 2022年4月より、Sansan株式会社 研究開発部 マネージャー - 12年間iOSだけやってきたエンジニアのキャリアチェンジ - MLのプロではない & 現職での現場経験なし

Slide 4

Slide 4 text

アジェンダ - SansanにおけるエッジAIの実例 - エッジAI × MLOps

Slide 5

Slide 5 text

SansanにおけるエッジAIの実例

Slide 6

Slide 6 text

- 名刺のデータ化 - NineOCR: 名刺に特化した独自開発のOCRエンジン(記事) - Smart Captured(スマキャプ) - etc... - 請求書・契約書etc.のデータ化 - 名刺同様に多々ある - メール署名取り込み - ニュース配信 - 名寄せ - etc... Sansan研究開発部におけるML

Slide 7

Slide 7 text

スマキャプについて 1/2 - 名刺データ化システム「GEES」は人力+AI - 読み取り直後にデータ化できるわけではない

Slide 8

Slide 8 text

スマキャプについて 2/2 - モバイルアプリから直接 OCRサーバを叩いて結果を 即時に返す - ユーザーはすぐに名刺の 認識結果を確認できる - GEESのデータ化が終わっ たら差分更新 - 速度と精度を両立

Slide 9

Slide 9 text

デモ ※動画内の名刺はダミー名刺です。

Slide 10

Slide 10 text

スマキャプの処理フロー - モバイル上で 名刺の検出・切り取り - 名刺画像をサーバーに転送して OCR結果を受け取る

Slide 11

Slide 11 text

エッジ側のML処理は2段構成 以下の推論処理をオンデバイスで実行 - Detection: 名刺矩形検出 - Segmentation: 名刺切り出し ※使用している名刺画像はダミー名刺です ● 同時に4枚までの切り出しが可能 ● プレビュー時はリアルタイムに名刺を検出 ● 影や複雑背景等に対応

Slide 12

Slide 12 text

エッジ側のモデル - Detection: 名刺矩形検出 - SSD - Segmentation: 名刺切り出し - U-Netベース - 一工夫して軽量化している - 両モデルともTensorFlowで学習

Slide 13

Slide 13 text

学習データの⼯夫 軽量化の必要があるため、モデルの表現力はどうしても落ちてしまう ➔ エッジケースがどうしても弱い ➔ Data Augmentationのバリエーションで工夫

Slide 14

Slide 14 text

Core ML化によるパフォーマンス向上 - before: TensorFlowから出力したProtocol Buffers 形式のモデル(.pb) - after: Core MLモデル(.mlmodel) ➔ 結果 - 名刺検出は300%高速化 - 3年前の端末で18 fps → 55 fps - セグメンテーションも推論時間は0.01~0.02[s]に

Slide 15

Slide 15 text

➔ UIの描画やユーザーインタラクションのレスポンスも改善 CPU負荷も激減 旧モデル使⽤時 新モデル(Core ML)使⽤時

Slide 16

Slide 16 text

機械学習モデルをアプリ(iOS, macOS, watchOS, …)に組み込むための フレームワーク, モデルフォーマット Core MLとは Core ML model Core ML Your app

Slide 17

Slide 17 text

デバイスの性能を最も活かせるのはCore ML - Tensor Flow for iOS → CPU・・・変換前バージョン - Tensor Flow Lite → CPU, GPU - PyTorch Mobile / LibTorch → CPU - Core ML → CPU, GPU, Neural Engine なぜCore ML化すると速くなるのか

Slide 18

Slide 18 text

- ニューラルネットワークの演算を高速処理するプロセッサ - ANE (Apple Neural Engine) とも略される - NPU (Neural Processing Unit) の一種 - GoogleのTPUみたいなもの Neural Engineとは

Slide 19

Slide 19 text

- 2017発売のiPhone 8, iPhone X以降のiPhone / iPadに搭載 - 搭載端末(非搭載端末)一覧 - Core MLによって利用されるANEはA12 Bionic (2018) 以降 - ANE自体の性能も毎年上がっている > The A14 has a 16-core Neural Engine that is twice as fast as the previous generation, and can perform 11 trillion operations per second. > The A15 has a 16-core Neural Engine, with the same amount of cores it can perform 15.8 trillion operations per second (43% faster than the previous generation). Neural Engine搭載端末

Slide 20

Slide 20 text

Core ML化する⽅法 coremltoolsというApple製OSSツールを利用する - https://github.com/apple/coremltools - 変換がうまくいかない場合の考え方 - coremltoolsを用いたCore MLモデルへの変換 - Sansan Tech Blog

Slide 21

Slide 21 text

エッジAI × MLOps

Slide 22

Slide 22 text

※ - ここからは弊社での実運用の例ではなく、 私個人のアイデアレベルのものになります。 - 実運用はしていないものの、一応実際に使ったことがある要素を 組み合わせて考えています。 - 一部実現性不明なものはその旨明示しています。 - Sansanで行っているMLOpsの例 - Data Version Control による実験管理の実務での適用事例 - 自社OCRエンジン「NineOCR」の学習効率化のためFeature Storeを導 入した話 - Sansan Tech Blog

Slide 23

Slide 23 text

Core ML × MLOpsのアイデア - パターン1: Core ML × 実験管理 - パターン2: 実機での新モデルの検証 - テスターにだけ新モデルを配布する - クラウド経由でモデルを更新

Slide 24

Slide 24 text

評価 Core MLモデル変換 パターン1: Core ML × 実験管理 既存の学習パイプラインにcoremltoolsによる変換を組み込めばOK 前処理 学習 PyTorch, TensorFlow, etc… coremltools 詳しくはこちらの資料へ:MLOps for Core ML #iOSDC 2022 データ取得

Slide 25

Slide 25 text

パターン2: 実機での新モデルの検証 検証⽤にテスターにだけ新モデルを配布する 新モデル 一般ユーザーには 配布しない テスターだけに配布 Core ML model 本番 アプリ ステージング版 アプリ

Slide 26

Slide 26 text

クラウド(iCloud)経由でモデルを更新 ➔ アプリ側の更新不要でモデルを更新できる Core ML Model Deployment

Slide 27

Slide 27 text

ステージング用とリリー ス用で別々のModel Collectionを用意しておく 事前準備(iCloud) FooModelCollectionStaging FooModel BarModel

Slide 28

Slide 28 text

- ステージング/リリースビルドで利用するModel Collectionを分けるよ う実装 - 更新されたら通知が届くようにしておく - テスターにステージング版をTestFlightで配布 事前準備(アプリ)

Slide 29

Slide 29 text

ステージング用のModel Collectionに新モデルを登録 新モデル検証時 ➔ ステージング版アプリに通知が届く ➔ アプリを起動するとモデルが更新される FooModel.mlarchive FooModel

Slide 30

Slide 30 text

- 量子化やスパース化も可能 - https://apple.github.io/coremltools/source/coremltools.models.html#com pression-utils - アプリのバイナリには含めず、あとからダウンロードさせる方法もある - Core ML Models - iCloud - Apple Developer - iOSビルトインの特徴抽出器を利用すれば劇的に小さくなる - Core MLモデルを連結してひとつのモデルにするパイプライン機能 - Create MLのモデルはなぜ小さいのか 〜coremltoolsでパイプラインモデ ルの中身をのぞいてみる - Sound Analysisのビルトイン音声分類器 補⾜資料: Core MLモデルサイズに関するTips

Slide 31

Slide 31 text

- 育児関連サービス:アルバムから子供が写っている写真だけを抽出 - 超解像ライブラリ - 動画へのエフェクト(姿勢検出、Style Transfer, …) - 動画の4コマ漫画化 - Core MLモデルへの変換(YOLOv5, etc.) - LiDARデータ収集(エッジAIではない) etc… 補⾜資料: 経験したiOS × MLの実案件

Slide 32

Slide 32 text

- R&D MLOps/DevOpsエンジニア | Sansan株 式会社 - R&D MLOps/DevOpsエンジニア(中部) | Sansan株式会社 MLOpsエンジニア絶賛募集中です!

Slide 33

Slide 33 text

No content