yiskw note

機械学習やプログラミングについて気まぐれで書きます

【ONNX / PyTorch】機械学習モデルをグラフィカルに可視化するnetronを使ってみた


はじめに

f:id:yiskw713:20220117214430p:plain:w800

機械学習モデルの可視化できるライブラリであるnetronを使用してみました.
netronでは,ONNX,Keras, TensorFlow Liteなどのモデルの可視化を行うことができます.
また実験的な段階ですが,PyTorchやTensorFlow,scikit-learnなどのサポートもしています.
今回は,ONNXモデルとPyTorchモデルの可視化をしてみましたので,その使い方についてこちらにメモを残しておきます.

その他の可視化ライブラリについても,過去に記事をまとめていますので,ご参照いただければと思います.

yiskw713.hatenablog.com

netronとは

netronとは,機械学習モデルをグラフィカルに可視化できるライブラリです.
以下のライブラリのモデルの可視化を行うことができます.

  • ONNX
  • TensorFlow Lite
  • Caffe, Keras
  • Darknet
  • PaddlePaddle
  • ncnn, MNN
  • Core ML
  • RKNN
  • MXNet
  • MindSpore Lite
  • TNN, Barracuda
  • Tengine
  • CNTK
  • TensorFlow.js
  • Caffe2
  • UFF

また実験的な段階ですが,PyTorchやTensorFlow,scikit-learnなどのサポートもしています.
今回は,ONNXモデルとPyTorchのモデルの可視化を行ってみました.

インストール方法

netronはブラウザで使用することができるため,基本的にインストール不要です.

netron.app

インストールして使用したい場合は,pipなどでインストール可能です.
インストール方法の詳細はこちらをご確認ください.

使い方

netron.app

上記のサイトにアクセスし,Open Model...をクリックして,対象のモデルの重みファイルを追加するだけです.

ONNXモデルの可視化

まずはONNXモデルを可視化してみます.
重みファイルはnetronのREADME.mdに掲載されているSqueezeNetを使用しました.(リンク)
モデルを可視化した結果は以下の通りです.

f:id:yiskw713:20220117220456p:plain:w800

このようにグラフィカルにモデルを可視化することができました!
各レイヤーのパラメータや,計算の処理順などが一眼でわかります.
また各レイヤをクリックすることで,レイヤの属性や入力などを確認することも可能です.

PyTorhモデルの可視化

続いてPyTorchのモデルを可視化してみます.
重みファイルはtorchvisionで提供されているResNet18を使用しました.(リンク)
モデルの可視化結果は以下の通りです.

f:id:yiskw713:20220117221402p:plain:w800

やはり実験段階なだけあって,PyTorchのモデルはあまり綺麗に可視化できませんでした.
特にskip connectionなど,レイヤを結ぶのパスがないのが非常に見にくいです.
PyTorchのモデルを可視化するには,一度ONNXモデルに変換する必要がありそうです.

PyTorchのモデルをONNXに変換してから可視化

それでは,PyTorchのモデルをONNXモデルに変換して,可視化してみます.
以下は変換のためのコードです.(参考)

import torch
from torchvision.models import resnet18


dummy_input = torch.randn(2, 3, 224, 224)
model = resnet18(pretrained=True)
input_names = []
output_names = []

torch.onnx.export(
    model,
    dummy_input,
    "resnet18.onnx",
    verbose=True,
    input_names=input_names,
    output_names=output_names
)

こちらを実行し,作成したresnet18.onnxファイルを,netronで可視化してみます.

f:id:yiskw713:20220117222915p:plain

PyTorchモデルを可視化した時とは違い,ちゃんとレイヤのパスが可視化されていることが確認できました!
やや不便ではありますが,PyTorchのモデルを可視化する際は,ONNXモデルに変換するのが良さそうです.

PyTorchモデルの可視化に関しては,過去に別のライブラリを用いた記事をまとめているので,良ければ以下もご参照ください.

yiskw713.hatenablog.com

まとめ

機械学習モデルの可視化できるライブラリであるnetronを使用してみました.
PyTorchのモデルを可視化するのはやや不便ではありますが,
ONNXのモデルなどの可視化は非常に見やすく,便利だなと感じました.

参考