Google colaboratory上でMMdnnを使いcaffe→kerasへ学習済みモデル変換
今回したこと
MMdnnを使って配布されている学習済みcaffeモデル(vgg16)をkerasモデルへと変換した.
caffeの環境構築が面倒そうだったので,Google colab上で変換することにした.
(今後caffeでモデル構築することはなさそうだし...)
今回実行したコードはgistに置いている
MMdnn/caffe->keras · GitHub
背景
最近研究として取り組んでいる分野において,実装がcaffeでされていることが多い.
これからモデルを弄っていくにあたって経験のないcaffeだと辛いので
どうにかtf/kerasにできないかと思っていた所,
MMdnnという滅茶苦茶ベンリなものが公開されていることを知った.
安心と信頼のMS製
github.com
始めはローカルで使用しようと考えていたが,
当方windows環境でのcaffe環境構築が面倒臭そう独特だったので
Google colaboratory上で環境を作成し,変換することにした.
使い方の調査
MMdnnの使い方は日本語記事もある程度見つかるので,それらを参考に
あとは公式referenceが詳しいので必読
エイバースの中の人 : MMdnnを使用してモデルをcaffeからkerasに変換する
深層学習モデルの相互変換ツールMMdnnを試す - Qiita
インストール
pipからインストールするらしい
python -m pip install --upgrade pip pip install mmdnn
まずは使用法を確認
mmconvert -h
usage: mmconvert [-h] [--srcFramework {caffe,caffe2,cntk,mxnet,keras,tensorflow,tf,pytorch}] [--inputWeight INPUTWEIGHT] [--inputNetwork INPUTNETWORK] --dstFramework {caffe,caffe2,cntk,mxnet,keras,tensorflow,coreml,pytorch,onnx} --outputModel OUTPUTMODEL [--dump_tag {SERVING,TRAINING}] optional arguments: -h, --help show this help message and exit --srcFramework {caffe,caffe2,cntk,mxnet,keras,tensorflow,tf,pytorch}, -sf {caffe,caffe2,cntk,mxnet,keras,tensorflow,tf,pytorch} Source toolkit name of the model to be converted. --inputWeight INPUTWEIGHT, -iw INPUTWEIGHT Path to the model weights file of the external tool (e.g caffe weights proto binary, keras h5 binary --inputNetwork INPUTNETWORK, -in INPUTNETWORK Path to the model network file of the external tool (e.g caffe prototxt, keras json --dstFramework {caffe,caffe2,cntk,mxnet,keras,tensorflow,coreml,pytorch,onnx}, -df {caffe,caffe2,cntk,mxnet,keras,tensorflow,coreml,pytorch,onnx} Format of model at srcModelPath (default is to auto- detect). --outputModel OUTPUTMODEL, -om OUTPUTMODEL Path to save the destination model --dump_tag {SERVING,TRAINING} Tensorflow model dump type
これを見ると大体こんなになる感じかなと想像
mmconvert --srcFramework [caffe] --inputWeight [.caffemodel] --inputNetwork [.prototxt] --dstFramework [keras] --outputModel [.h5]
MMdnnを使うには双方のフレームワークがインストールされていなければならない(それはそう)
kerasはインストール済みだったのでcaffeのインストールについて調査
caffeインストール
colaboratory上にはデフォルトでcaffeが入っているわけではないので
自力でインストールする
ちょうど良さげなQAに従い,インストールする
stackoverflow.com
apt install -y caffe-cuda
実際にモデル変換を行ってみる
まずはdrive経由でファイルを取得する
from google.colab import drive drive.mount('/content/drive')
今回は取得したファイルパスを簡単にしておく
!ln -s /content/drive/My\ Drive/Colab\ Notebooks/files vgg
ファイル構造はこんな感じ
vgg/ ┣ deploy-vgg16.prototxt ┗ minc-vgg16.caffemodel
実際に変換を行ったコマンドは下記の通り
!mmconvert --srcFramework caffe --inputWeight vgg/minc-vgg16.caffemodel --inputNetwork vgg/deploy-vgg16.prototxt --dstFramework keras --outputModel ~/minc-vgg16.h5 --inputShape 10,3,224,224
inputShapeを指定しない場合、None例外が発生します。
エイバースの中の人 : MMdnnを使用してモデルをcaffeからkerasに変換する
らしいので,inputShapeをモデルにあわせて設定した.
ファイルが出力されていることを確認し
ls ~ # minc-vgg16.h5
kerasからモデルを読み込めることを確認した
import keras model = keras.models.load_model('/root/minc-vgg16.h5') loss = keras.losses.categorical_crossentropy optimizer = keras.optimizers.Adam(lr=0.001, beta_1=0.9, beta_2=0.999) model.compile(loss=loss, optimizer=optimizer, metrics=['accuracy']) model.summary() # ------------------------------- # ------------------------------- # relu7 (Activation) (None, 4096) 0 # _________________________________________________________________ # fc8-20_1 (Dense) (None, 23) 94231 # _________________________________________________________________ # prob (Activation) (None, 23) 0 # ================================================================= # Total params: 134,354,775 # Trainable params: 134,354,775 # Non-trainable params: 0 # _________________________________________________________________
まとめ
今回は学習済みcaffeモデルをMMdnnを用いてkerasモデルへと変換した.
環境を汚さない・楽にするためにGoogle colaboratoryを利用したので,
環境依存なしに変換できることを確認した.
実際のコードを下記に貼り付けておく
gist.github.com