【iOS11Bionic】のCoreMLの学習済みモデルを視覚的に理解する

#CoreMLって何？
CoreMLはiOS11で導入された機械学習フレームワークです。
CoreMLは推論環境であって、学習環境ではないので、学習そのものは Keras,Caffeやcsikit-learnなど他のフレームワークでする必要があります。
学習結果をCoreML用に変換しiOSアプリに組み込むことで、デバイス単体で予測や識別処理をさせることが出来ます。
モデルの学習をCoreML上ではできないが、Appleは幾つかの学習済みModelを提供しています。

#なんで注目されているの？？
「iPhone 8/8plus」「iPhone X」に搭載の新型プロセッサ「A11 Bionic」では、今まで使用してきたNVIDEA製のGPUではなく、Apple独自設計のGPUを使用しています。
その処理速度が最新のGalaxy S8やiPad Pro等のタブレットの精度を突き放すだけでなく、最新モデルのMacBook Proよりも速いとのことです。([参考](https://www.gizmodo.jp/2017/09/iphone-x-a11-bionic-benchmarks.html))
更に、Appleは自然言語処理や画像認識などの機械学習タスクを視野に入れた設計になっています。
これまでAppleはGoogleやMicrosoftらから、機械学習の分野でやや遅れを取っている形となっていたが、このCoreMLの導入で少なからずiOSエンジニア界で新たな勢いが増すことは間違いなく、今後のAppleの動きに注目が集まっています。

#ready-to-use Core ML models
現在Appleが提供している学習済みモデルは全6種類 ([参考](https://developer.apple.com/machine-learning/))
- MobileNet ([参考](https://arxiv.org/abs/1704.04861))([コード](https://github.com/shicai/MobileNet-Caffe))
- SqueeseNet ([参考](https://arxiv.org/abs/1602.07360))([コード](https://github.com/DeepScale/SqueezeNet/blob/master/SqueezeNet_v1.1/train_val.prototxt))
- Places205 - GoogLeNet ([参考](http://places.csail.mit.edu/))
- ResNet50 ([参考](https://arxiv.org/abs/1512.03385))([コード](https://github.com/fchollet/deep-learning-models/blob/master/resnet50.py))
- Inception v3 ([参考](https://arxiv.org/abs/1512.00567))([コード](https://github.com/fchollet/deep-learning-models/blob/master/inception_v3.py))
- VGG16 ([参考](https://arxiv.org/abs/1409.1556))([コード](https://github.com/fchollet/deep-learning-models/blob/master/vgg16.py))

CoreMLが事前に提供している学習済みモデルについて、VGG16やResNetなどILSVRC等の一般物体認識の分野において、有名でかつ良く利用されているモデルが用意された印象です。
これらのモデルの精度はよく比較されることが多いですが、今回はモデルを視覚的に理解するためにモデル図を作成しました。
デザインの才能が乏しいのが悲しいですが、[googlenet in keras](http://joelouismarino.github.io/blog_posts/blog_googlenet_keras.html)を参考にモデル図を作成してみました。
また、ニューラルネットワーク構造についてこちらのリンクに非常によくまとめられていました。([参考](https://culurciello.github.io/tech/2016/06/04/nets.html))

## VGG16
![VGG16.png](https://qiita-image-store.s3.amazonaws.com/0/168714/fd5469a6-1b3d-8d72-2c27-9f9f20411869.png)

## Inseption v3
![Inseption-v3.png](https://qiita-image-store.s3.amazonaws.com/0/168714/1144fcb0-3ba2-9a95-f026-9ca610209509.png)

## ResNet50
![ResNet50.png](https://qiita-image-store.s3.amazonaws.com/0/168714/8c6c776c-ca84-94c1-3092-859d60c58298.png)

## Places205 - GoogLeNet
![GoogLeNet-Places205.png](https://qiita-image-store.s3.amazonaws.com/0/168714/3b0a3e6e-affc-8bc0-9567-53afe9e844fa.png)

※ 残り2つのモデルについても作成し次第追記します。

##補足 ([参考](https://www.analyticsvidhya.com/blog/2017/09/build-machine-learning-iphone-apple-coreml/))
![CoreML.png](https://qiita-image-store.s3.amazonaws.com/0/168714/81fd99aa-c8c3-ea6e-7656-64f12838944c.png)

####Accelerate and Basic Neural Network Subroutines (BNNS) :
畳み込みニューラルネットワークを使用して予測にCPUを効率的に使用します。
####Metal Performance Shaders CNN (MPSCNN):
　畳み込みニューラルネットワークを使用して予測にGPUを効率的に使用します。

Appleの機械学習用フレームワークは今回が初ではなく、昨年同様の目的のライブラリが導入されました。
CPUに最適化されたAccelerateと、GPUに最適化されたMPSを使い分けることで、計算を効率よく行うことを目的とされるが、ハードウェアに非常に近いため、開発が困難でした。
CoreMLを導入することで、CPUとGPUの切り替え処理を容易にしました。

####Vision:
 高性能な画像解析とコンピュータビジョンを使用して、顔を特定し、機能を検出し、画像やビデオのシーンを分類するためのライブラリ。
####Foundation(NLP):
　自然言語処理機能を提供するライブラリ。
####Gameplay Kit
　ゲーム開発用のライブラリで、決定木を用いたAIも提供する。

CoreMLには3つのライブラリが組み込まれています。
上記のライブラリはすべて、使い方が非常に簡単で、一連の作業を行うためのシンプルなインターフェイスを提供します。