LoginSignup
24
15

More than 5 years have passed since last update.

iOSのMetal Performance Shadersでニューラルネットを実行する際のモデルの渡し方

Posted at

Metal Performance Shadersについて

iOS10からiOSで畳み込みニューラルネットを作れるようになりました。畳み込み層、プーリング層、正規化層、活性化関数など基本的なツールは揃っています。ただし最適化アルゴリズムなどは揃っておらず、学習はできません。Pythonなどで学習したモデルをプロジェクト内に持ってきてその重みやバイアスを使用することになります。AppleのサンプルコードでもMNISTを学習したモデルをプロジェクト内に置いていますが、肝心のファイルの拡張子は.dataとなっており、どんな種類のファイルなのかわからなかったので調べてみました。

Pythonライブラリにおけるモデルの保存形式

Chainerのドキュメントを見てみるとsave_npzsave_hdf5という二つのモデル保存用メソッドがあります。npzはNumPy配列を保存するファイル形式のようです。後者のHDF5はHierarchical Data Format 5という科学技術計算などで用いられるファイル形式のようです。
参考:http://yukisakamoto.hatenablog.com/entry/20130413/1365825028

SwiftでのHDF5の扱い方

SwiftでHDF5を読み取るにはHDF5Kitというオープンソースがあり、これを使えばChainerやKelasで学習したモデルを簡単にSwiftから読むことができました。
ただしHDF5Kitはdataset名などを指定する必要があるため、事前にHDF5ファイルの中身を知っておく必要があります。そこで使ったのがHDF5Viewというソフトです。これを使うと以下のようにHDF5ファイルの中身を読むことができます。
スクリーンショット 2017-01-31 0.54.48.png

おわりに

一通り触った限りMPSではまだInference(推論)しかできないようですが、(fast-neural-styleなどをやってみたかったが難しかった。)ChainerやKerasのモデルを簡単に活用できるとなればiOSデバイス単体で実行するディープラーニングの可能性も大きく広がりますね。今後が楽しみです。

参照

今回の実装にあたり、情報と呼べる情報が非常に限られている中、@shu223様の以下の記事を大変参考にさせて頂きました。ありがとうございます。

iOSのMPSCNNによる手書き数字認識のサンプルを読む - 前編

iOSのMetalで畳み込みニューラルネットワーク - MPSCNNを用いた手書き数字認識の実装

24
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
24
15