original image: © olegator1977 - Fotolia.com
original image: © olegator1977 - Fotolia.com
マストドンで「今回発表されたCoreMLについてどう思うか」という質問を頂いたので整理しておきたいと思います。
ちなみにAIに関してAppleは完全に出遅れています。GoogleとFacebookが先頭で、Microsoftがかなり引き離されて三番手とすれば、Appleはそれよりさらに遅れています。
NDAに触れない範囲でAppleのCoreMLのページを見てみると、なるほどね、という感想でした。
AppleはCoreML(MLは機械学習;Machine Learningの略と思われる)で、画像認識と自然言語処理という2つの機能を提供する、とあります。
CoreMLをリリースしたということは、AppleはGoogleのTensorFlowやFacebookのTorchのようなフレームワークをリリースしたということになるのでしょうか。
ドキュメントを見ると、残念ながらそれは違いそうです。
というか、むしろそれをやってしまうとAppleはさらにAIから遅れを取ることになります。その意味ではCoreMLは現実的な解であると評価してもいいでしょう。
CoreMLは単体では動作しません。
CaffeやKeras、Scikit-learnといったツールと組み合わせて動作します。
CoreMLは推論環境であって学習環境ではありません。だから、学習そのものはサーバーなどで他のフレームワークを使ってやることになります。ここではCaffeやKerasです。Caffeの機能が低すぎることを考えると、Kerasを使うのが現実的になりそうです。その意味ではKerasはかなりいいポジションにいることになります。
ただし学習には膨大なコストがかかります。そこでCoreMLを手軽に使いたいという開発者のために、Appleが予め学習させたニューラルネットワークをいくつか用意しています。
という話をすると、「おお、さすがApple」と言いたくなりますが、実際には画像認識系の定番のモデルが4つ用意されているだけ。VGG16とResNet50とInception-v3という、今更特に目新しくも面白くもないモデルです。全部一年遅れのモデルですが、スマホで動かすことを考えると現実的な解とも言えます。
ひとつ珍しいのはPlaces205が入っていることで、これは場面を認識するためのニューラルネットワークです。でも認識されるのは場面だけなのでこれをどう使うかということは開発者が考えなくてはいけません。
CoreML用に学習済みモデルデータをコンバートするCoremltoolsというモジュールがpipでインストールできるようになりました。
Scikit-learnにも対応しているあたり律儀というか、「機械学習」の好きな人を強く意識していると思います。
よく誤解されているのですが深層学習は機械学習のいち分野なのですが、深層学習と機械学習は根本的な思想が異なります。
機械学習はきちんと設計された特徴量で分類するのに対し、深層学習はなんとなく分類するとそのうちよくなる、という性質があります。
実はプログラム的にもほとんど同じなのですが、それを使う人間の心根が違うと言えば分かりやすいでしょうか。
深層学習ばかりやってる人は機械学習をやりません。そこに興味がないからです。反対に、機械学習から深層学習に入った人は、隙あらば機械学習に回帰しようとします。安心感があるのです。
そこで、機械学習と深層学習の両方をサポートしたAppleはなかなかの策士と言えます。
さて、問題はこのCoreMLが搭載されたことでどんなアプリが作れるか、ということでしょう。
筆者はこの点では疑問を感じざるを得ません。
たとえばTensorFlowにはもともとiOS版があります。
kerasで定義したモデルをCoreMLにコンバートして使うんだったらTensorFlowのiOS版を使ったほうがちゃんと動きそうな気がします。
この分野は発展途上ですし、これまで想定されていない活性化関数や学習手法が出てきた時にCoreMLがどこまでのスピードでキャッチアップしてくれるかというとあまり過度な期待はできないのではないかと思っています。
画像認識ができるのは面白いんですが、画像認識して、「で?」という疑問には誰も答えてくれません。
また、手軽に使いたいのはSemantic Segmentationのような、「この部分にこんなものが映ってる」というモノであって、たとえばYOLOとかそうなんですけど、そういう実用的に使えそうなものは学習済みモデルが提供すらされていないので自分でなんとかするしかありません。でもこれってしんどくないですか。
結局、いまのところCoreMLがサポートしたのは二年くらい前に流行ったモノであって無理して携帯に実装しても面白いアプリが作れるとは思えません。実際、iOSアプリのMOONBlockDXにDeepBeliefNetworkを搭載したのは二年前です。いまさらあってもなあ・・・という感じなのですよね。
結論としてはCoreMLはないよりマシかもしれないけど、あったからといって特に意味がある感じがしない、とりあえず今のところは、という感じです。
ちなみにYOLOのiOS実装はTensorFlowで既にあります(https://github.com/yjmade/ios_camera_object_detection)。
YOLOくらいできるとなにか作れそうですが、どうなんでしょう。もうちょっとモデルを充実させてほしいですね。
また、YOLOをiOSで動かすと2GBくらいのヒープを使うので最新機種じゃないと動かないみたいです。エッジ(iPhone)側でニューラルネットワークを沢山動かそうとすると、必然的にメモリが沢山必要になりますね。
おすすめ記事と編集部のお知らせをお送りします。(毎週月曜日配信)
登録はこちら新潟県長岡市生まれ。1990年代よりプログラマーとしてゲーム業界、モバイル業界などで数社の立ち上げに関わる。現在も現役のプログラマーとして日夜AI開発に情熱を捧げている。