らんだむな記憶

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

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

mmdnnでPyTorch用にモデルを変換してみる - らんだむな記憶の続き。

docker pull mmdnn/mmdnn:cpu.small

で変換した場合、 torch.load 時に SourceChangeWarning が出てきて鬱陶しい。
このため、

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

にしてみて DL フレームワークを更新してみたが、PyTorch 0.4.0 のままだった。仕方ないので、以下のような Dockerfile を書いて Docker イメージを作成する。(-cpu のやつでいいかもしれない)

FROM mmdnn/mmdnn:0.2.5-py35-ubuntu16.04
RUN pip3 install -U pip \
 && pip3 uninstall -y torch torchvision \
 && pip3 install torch==1.5.0+cu101 torchvision==0.6.0+cu101 -f https://download.pytorch.org/whl/torch_stable.html
CMD ["/bin/bash"]

これで mmconvert すれば多分いいはず。ただ、これで torch.load を実行したら MainModel がインポートできないという謎のエラーが出る。なんのこっちゃい?
これについてはload pytorch vgg16 converted from tensorflow : ImportError: No module named 'MainModel' · Issue #378 · microsoft/MMdnn · GitHubを参考に

import imp
MainModel = imp.load_source("MainModel", "VGG_ILSVRC_19.py")

を追加すれば解決した。若干ちょっと不思議な気分はするが動いたのでよしとしよう・・・。
ただ、この書き方は Deprecated のようなので、

import importlib.machinery as imm
MainModel = imm.SourceFileLoader("MainModel", "VGG_ILSVRC_19.py").load_module()

のほうが良いかもしれない。
pretrainedモデルのウェイトのロード (2) - らんだむな記憶と同じ実験をしたところ、1 エポックで 89% 程度の精度が出る。まぁこれでちゃんと変換できたものとしよう。