Core ML Toolsのリンクモデル(Linked Model)とパイプライン

昨日紹介したパイプライン機能、それ単体ではそんなにメリットを感じないかもしれないが、これが「リンクトモデル」(Linked Modelだけど日本語では「リンクモデル」と読んだほうが自然だろうか)と組み合わせるとかなり強力な機能となる。

## リンクトモデルを使用するメリット

WWDC19のCore ML 3セッションで紹介されていた例がわかりやすい。2種類の画像分類モデルがあるとして、従来だとこんな感じでそれぞれが特徴抽出器を持っていた。

画像1

Linked Modelは、ダイナミックリンクライブラリのように動的にリンクできるモデル。これにより、こんな感じで複数のモデルでひとつの特徴抽出器を共有するといったことが可能となる。

画像2

一般的にCNNパラメータは特徴量抽出部分も含めると小さいものでも数MB〜数十MBぐらいにはなるので、今までひとつのアプリで多数の画像分類モデルを使用することはためらわれたが、これによってそのサイズの問題が劇的に解消される。(特徴抽出器の部分を再学習せずそのまま再利用できるので、モデルの学習も格段に楽になる)

## パイプラインとリンクトモデル

ダイナミックリンクライブラリのように動的にリンクされるモデルがリンクトモデル。上の図のようにリンクトモデルとして共用する特徴抽出部分と、犬や猫など特定の対象を検出するよう学習させたモデルとを組み合わせてひとつのモデルのように使用する。この複数モデルを組み合わせたものがパイプラインモデル。

## Create MLとパイプライン/Create MLのモデルはなぜ小さいのか

超簡単に機械学習モデルがつくれてしまうCreate ML、その簡単さ故に「実戦投入はできないオモチャ」と捉えている人もいそうだが、

実際には普通に使える。なんだかんだ自前でデータ集めてつくるモデルって画像分類モデルだったりして、それならCreate MLで十分だし、Object Detectionモデルもつくれるようになったし、何よりもCreate MLが優れている点は、生成されるモデルのサイズがめちゃくちゃ小さいこと。画像分類モデルであれば約17kBとか(※識別するクラス数に応じて変わる)。Inception v3のCore MLモデルが約100MBぐらいあったことを考えると5000分の1ぐらいの小ささ。

なぜCreate MLで生成する画像分類モデルがこれほど小さく済むのか、順を追って説明していく。

### Create MLが生成する画像分類モデルはパイプラインモデル

まず、Create MLが生成する画像分類モデルは、特徴抽出モデル+画像分類モデルの2つのモデルから構成されるパイプラインモデルとなっている。

coremltoolsを使って実際に確認してみる(coremltoolsの詳しい使い方は拙著をご参照ください):

____________________

ここからはマガジン購読者だけが読めますが、

「がんばって書いた記事は無料公開、
 雑にさくっと書いた記事は有料マガジンに」

という方針なのであまり大したことは書いていません。

が、たったの400円で、すぐに購読解除してもその月は過去記事もさかのぼって読めるので、少しでも気になる内容がある方にはオトクかと思います。

____________________

ここから先は

1,300字 / 3画像
文章やサンプルコードは多少荒削りかもしれませんが、ブログや書籍にはまだ書いていないことを日々大量に載せています。たったの400円で、すぐに購読解除してもその月は過去記事もさかのぼって読めるので、少しでも気になる内容がある方にはオトクかと思います。

技術的なメモやサンプルコード、思いついたアイデア、考えたこと、お金の話等々、頭をよぎった諸々を気軽に垂れ流しています。

最後まで読んでいただきありがとうございます!もし参考になる部分があれば、スキを押していただけると励みになります。 Twitterもフォローしていただけたら嬉しいです。 https://twitter.com/shu223/