ついに今年も12月ですね・・。
12月といえば、、そうAdvent Calendarです!!
ということで、今年もAdventCalendarの記事を書きたいと思います。
今回の話題
iOS向けにCoreMLという機械学習向けのライブラリが提供されているということで、ちょっと興味を持って調べてみました。
※そこまで深くは見てないです。
モチベーション
エッジAIでの推論速度周りに少し興味があって、他のフレームワークと比較して、使い勝手がどうなのかなーと思ったため。
CoreMLについて
overviewはこちら
この構造を見ると、CoreMLを基準として、高レベルなレイヤー(Vision、Neural Language、GameplayKit)と低レベルなレイヤー(Accelerate and BNNS、Metal Performance Shaders)に挟まれていることが分かります。
CoreMLは簡単に言えば、「低レベルなレイヤーのみだと使いにくいから、高レベルなレイヤーを用意して、DeepLearningに関する機能をアプリに組み込みやすくする」ために用意されたような印象を受けました。
とりあえず、各レイヤーが何をやっているかをドキュメントから追ってみました。
あと下記の記事がとても良かったです。
https://qiita.com/shu223/items/33774d896b7142fcfc1c
※CoreMLの前(iOS10)から、Neural Networkの構築はできたんですね・・、知らなかった。。
Vision
ドキュメントはこちら
APIを見てみると、割と利用シーンを絞って、動画&画像解析絡みのタスクを簡単に出来るようにしている印象が見られます。
例えば、以下ですね。
- Face Detection
- Text Detection(文字認識って精度がどうかは知らないので、面白そう)
- Object Tracking
結構簡単に組み込めるようになっているのは大変助かりそうですね。
Neural Language
ドキュメントはこちら
画像解析と比較すると、出来ることは限られているように見えますね。
※やはり画像解析の方が発達してるのか・・。
- Tokenization(わかち書きのみ?)
- Language Identification(何の言語かをテキストから推定)
- Linguistic Tags(品詞推定、固有表現抽出)
品詞推定(というより単語の分割)の精度が高ければ、
固有表現抽出の精度もあがると思うので、試しに使ってみたい所。
GameplayKit
ドキュメントはこちら
ゲームを作る上での必要な要素(乱数生成、行動生成とか)をAPIとして提供しているっぽいですが、詳細はちょっと読めてないです・・。
※別途ドキュメント読めたら読もうと思います。
Accelerate and BNNS
Accelerate
ドキュメントはこちら
CPUでの推論速度を向上するためのアクセラレーターっぽいですね。
※ニューラルネットワークでの推論最適化フレームワークは最近色々とあって(TVM、OpenVINOとか)、エッジAIの波が来てますよね。
ここは別途詳細調査したいと思っています。
BNNS
ドキュメントはこちら
んー、、NNの基本的なAPI群を提供しているっぽいが、、後述するMPSと位置づけがかぶっているような・・。
※ということで、詳しく見てないです。
どうやら、CPUでの推論最適化を行えるような実装になっているっぽいですね。
※MPSがGPUでの最適化に対し、BNNSはCPUでの最適化のようですね。
Metal Performance Shaders(MPS)
ドキュメントはこちら
こちらは基本的にGPUを利用したNNに関するモデルを構築出来るようにAPIを提供してそうです。
RNNやCNN系列のAPIをそれぞれ提供しているみたいです。
- RNN
- GRUやLSTMもレイヤーとして提供してくれるのはありがたいですね。
- CNN
- 多分、こっちから出来たのかな?
- Convolution, Pooling, FCレイヤー, Activationレイヤーといった基本的な所は提供されています。(BatchNormやDropoutなども)
- またConvについては、DepthWiseやBinaryも提供されていて、結構使い勝手良さそう。
最後に
CoreMLについて、概要レベルですが、少し調べてみました!
※個人的には推論最適化周りがちょっと興味あるので、Accelerateはもう少し掘り下げて見ようと思ってます。
明日は @discake の登壇になります!
皆様、お楽しみに!