U-Netのネットワーク構成をDocker版Caffeのdraw_net.pyで可視化してみました。
U-Netは、以下の記事のFCNと同じく、セグメンテーション用のネットワークです。
Caffeのdraw_net.pyによるネットワーク構成の可視化
U-Netのネットワーク構成を可視化するために、Caffe 1.0のDockerコンテナを準備します。
Docker版Caffe 1.0については、以下の記事をご覧ください。
以下のコマンドでDockerコンテナを起動します。
$ nvidia-docker run -it \ -v /home/sora/data:/workspace \ bvlc/caffe:gpu \ bash
draw_net.pyのテストとして、AlexNetを可視化してみます。
# python /opt/caffe/python/draw_net.py \ /opt/caffe/models/bvlc_alexnet/train_val.prototxt \ alexnet.png Drawing net to alexnet.png Traceback (most recent call last): File "/opt/caffe/python/draw_net.py", line 58, in main() File "/opt/caffe/python/draw_net.py", line 54, in main phase) File "/opt/caffe/python/caffe/draw.py", line 244, in draw_net_to_file fid.write(draw_net(caffe_net, rankdir, ext, phase)) File "/opt/caffe/python/caffe/draw.py", line 223, in draw_net return get_pydot_graph(caffe_net, rankdir, phase=phase).create(format=ext) File "/usr/local/lib/python2.7/dist-packages/pydot.py", line 1883, in create prog=prog)) Exception: "dot" not found in path.
ファイル(alexnet.png)は作成されるのですが、画像になっていません。
Docker版Caffe 1.0にインストールされているパッケージを調べてみると、pydotはインストールされているのですが、graphvizがインストールされていません。
以下のコマンドでgraphvizをインストールします。
# apt-get update # apt-get install graphviz # pip install graphviz
再度実行すると、今度は画像化されました。
なお、draw_net.pyのデフォルトでは、ネットワークがLR(左から右)へ向かう画像が生成されますが、--rankdir
オプションでネットワークの向きをTB(上から下)・BT(下から上)・RL(右から左)にも変更できます。
# python /opt/caffe/python/draw_net.py \ /opt/caffe/models/bvlc_alexnet/train_val.prototxt \ alexnet.png --rankdir TB
U-Netのネットワーク構成の可視化
ここ(https://lmb.informatik.uni-freiburg.de/people/ronneber/u-net/)から、U-Netのアーカイブ(u-net-release-2015-10-02.tar.gz)をダウンロードします。
U-Netのアーカイブからtmp-test.prototxtを解凍し、tmp-test.prototxtを解凍したディレクトリに移動して、以下のコマンドを実行します。
# python /opt/caffe/python/draw_net.py \ tmp-test.prototxt \ unet.png --rankdir TB ... google.protobuf.text_format.ParseError: 43:80 : Enum type "caffe.V1LayerParameter.LayerType" has no value named CROP.
Caffeのprototxtの仕様?が変更されているようで、エラーが発生しています。
ここでは、tmp-test.prototxtに対して、以下の3点の変更を行いました。
layers { ... }
をlayer { ... }
に変更type: CROP
等は、type: "Crop"
等に変更blobs_lr ...
をparam { lr_mult: ...}
に変更
U-Netの変更したprototxtを可視化した結果が、下の画像です。
まとめ
Docker版Caffe 1.0を利用して、U-Netのネットワーク構造を可視化してみました。
U-NetのprototxtをCaffe 1.0に対応させたので、今後は、U-Netのアーカイブに含まれるphseg_v5.caffemodelと組み合わせて、予測ができるのかテストしてみたいと思います。