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% 程度の精度が出る。まぁこれでちゃんと変換できたものとしよう。