らんだむな記憶

blogというものを体験してみようか!的なー

mmdnnでPyTorch用にモデルを変換してみる (1)

caffe prototxtからPyTorchへ - らんだむな記憶の続き。

MMdnn については面倒臭いので以下で導入する。

docker pull mmdnn/mmdnn:0.2.5-py35-ubuntu16.04

で、以下を変換してみたい。

curl http://www.robots.ox.ac.uk/~vgg/software/very_deep/caffe/VGG_ILSVRC_19_layers.caffemodel -o VGG_ILSVRC_19_layers.caffemodel
curl https://gist.githubusercontent.com/ksimonyan/3785162f95cd2d5fee77/raw/f02f8769e64494bcd3d7e97d5d747ac275825721/VGG_ILSVRC_19_layers_deploy.prototxt -o VGG_ILSVRC_19_layers_deploy.prototxt

そして

docker run -it -v $(pwd):/mnt mmdnn/mmdnn:0.2.5-py35-ubuntu16.04

でダウンロード先をマウントしてみる。
深層学習モデルの相互変換ツールMMdnnを試す - Qiitaとかを参考にして、

mmconvert -sf caffe -iw VGG_ILSVRC_19_layers.caffemodel -in VGG_ILSVRC_19_layers_deploy.prototxt -df pytorch -om VGG_ILSVRC_19.pt

で変換してみる。
コンテナを抜けたら

docker container prune

で後片付け。出力された VGG_ILSVRC_19.pt とか VGG_ILSVRC_19.py とかは

sudo chown -R xxx:xxx VGG_ILSVRC_19.pt VGG_ILSVRC_19.py

でオーナーを変更しておく。
MMdnn/mmdnn/conversion/pytorch at master · microsoft/MMdnn · GitHubを参考に、

import torch

model = torch.load("VGG_ILSVRC_19.pt")

でモデルをロードできる。この時、カレントディレクトリに VGG_ILSVRC_19.py も一緒に置いておかないと読み込みに失敗する。

for name, t in model.state_dict().items():
    print(name, t.shape)

テンソルの中身を確認できる。