公式ドキュメントやチュートリアルを元にPyTorchの概要を把握する|DeepLearningの実装 #8

f:id:lib-arts:20190620151942p:plain

#2~#7まではTensorFlowのチュートリアルについて取り扱ってきました。

Tutorial実装で確認するTensorFlow①(Tutorialsの概要とMNIST問題のサンプル実装の確認)|DeepLearningの実装 #2 - lib-arts’s diary

Tutorial実装で確認するTensorFlow②(MobileNetによる画像分類とTensorFlow Hub)|DeepLearningの実装 #3 - lib-arts’s diary

Tutorial実装で確認するTensorFlow③(MobileNetによる転移学習)|DeepLearningの実装 #4 - lib-arts’s diary

Tutorial実装で確認するTensorFlow④(Pix2Pixの概要と実装)|DeepLearningの実装 #5 - lib-arts’s diary

Tutorial実装で確認するTensorFlow⑤(Simple Audio Recognition_前編)|DeepLearningの実装 #6 - lib-arts’s diary

¥下記の記事で物体検出(Object Detection)系のトレンドを調べていたら、2018年11月時点でSOTAとなったM2Detの著者実装がPyTorchのようなので、#8ではPyTorchの入門として公式ドキュメントやチュートリアルを元に概要をまとめたいと思います。

https://lib-arts.hatenablog.com/entry/object_detection3
下記のM2Detの著者実装を読み解いていけるだけの概要や基本的な書き方について抑えるのを目標とします。

GitHub - qijiezhao/M2Det: M2Det: A Single-Shot Object Detector based on Multi-Level Feature Pyramid Network

以下目次になります。
1. PyTorchの概要
2. インストール&簡易実行
3. まとめ


1. PyTorchの概要
1節ではPyTorchの概要についてまとめます。まずはWikipediaから引用します。

f:id:lib-arts:20190620154023p:plain

PyTorch - Wikipedia
以下簡単に要約します。
要約:『PyTorchはコンピュータのソフトウェアで、Torchライブラリに基づいて自然言語処理(NLP; Natural Language Processing)のような用途に用いられる、プログラミング言語Pythonから呼び出される機械学習ライブラリである。PyTorchは主にはFacebookのAI研究チーム(FAIR)によって開発され、Uberの確率的なプログラミング言語であるPyroも中に組み込まれている。フリーのOSSで、BSDライセンスに基づいてリリースされている。PyTorchは二つの特徴を持っており、「NumPyのようなTensor計算をGPUを介して高速化する」と「tape-based autodiff systemにおいて組み立てられる深層のニューラルネットである」の二つが挙げられています。』
"tape-based autodiff"など、一部わからないことも書いてありますが、この辺はPyTorch独自の仕様と思われるため、一旦気にせず話を進めて良さそうです。

f:id:lib-arts:20190620155223p:plain

また、上記ではModuleについて言及されており、"Autograd module"、"Optim module"、"nn module"の三つが挙げられていますので、キーワードとしてこちらも抑えておくと良さそうです。それぞれ雑に解釈すると、自動微分、最適化、ニューラルネットワークと考えられそうです。
ここまでで大体の概要はつかめたので、次に公式のPyTorchのドキュメントを見ていきます。

f:id:lib-arts:20190620155615p:plain

PyTorch

上記がPyTorchドキュメントのトップページです。"FROM RESEARCH TO PRODUCTION(研究から製品へのデプロイまで)"ということで、R&Dから実際の開発までということを示唆されています。
概要についてはこの辺で十分そうなので、1節はここまでとし、2節ではPyTorchのインストールから簡単な実行まで確認していきます。


2. インストール&簡易実行
2節ではPyTorchのインストールから簡易実行まで見ていきます。

f:id:lib-arts:20190620161747p:plain

Start Locally | PyTorch
まずはPyTorchのトップページにリンクがあるGet Startedを確認していきます。Get Startedにはインストール手順やインストールができているかどうかの確認用のサンプルコードについて載っています。

f:id:lib-arts:20190620161818p:plain
まずは上記を元に、PyTorchをインストールします。(この方式でインストールするとバージョン1.1.0がインストールされるのですが、後述するようにローカルのMacの環境だと1.1.0ではエラーが出たので、1.0.0を入れ直しました。)

f:id:lib-arts:20190620162222p:plain
次に上記を元にインストールの確認を行います。ここで通常だと上記のようにtensorが出力されるはずなのですが、Mac+Pyenv+Python3.6.3で構築したローカル環境だと"from torch._C import *"の実行にあたって、"ImportError"が生じてしまいました。エラー解決にあたって調べたところ、公式リポジトリで下記のイシューを見つけました。

f:id:lib-arts:20190620162714p:plain

from torch._C import * (ImportError: DLL load failed: The specified module could not be found. · Issue #4518 · pytorch/pytorch · GitHub
下まで見ていったところ、下記のようなコメントを見つけ、バージョンの入れ直しをしたら直ったとのことでした。

f:id:lib-arts:20190620163219p:plain
一度アンインストールを行なって、バージョンをダウングレードすると実際に下記のように公式のドキュメントと同様の出力がされることを確認することができました。

f:id:lib-arts:20190620163239p:plain

これまででインストールの確認はできたので、次にTutorialの"What is PyTorch?"を元にもう少し動作確認を行なってみます。

What is PyTorch? — PyTorch Tutorials 1.1.0 documentation

from __future__ import print_function
import torch
x = torch.empty(5, 3)
print(x)

f:id:lib-arts:20190620164207p:plain

x = torch.rand(5, 3)
print(x)

f:id:lib-arts:20190620164247p:plain

x = torch.zeros(5, 3, dtype=torch.long)
print(x)

f:id:lib-arts:20190620164346p:plain

x = torch.tensor([5.5, 3])
print(x)

f:id:lib-arts:20190620164411p:plain

x = x.new_ones(5, 3, dtype=torch.double) # new_* methods take in sizes
print(x)

x = torch.randn_like(x, dtype=torch.float) # override dtype!
print(x)

f:id:lib-arts:20190620164439p:plain

上記を見た感じだと、NumPyライクな値の持ち方をしていることがわかります。何例かの動作確認を通して、大体の動作イメージがつかめたかと思いますので、簡易実行としてはここまでとします。


3. まとめ
#8ではPyTorchの概要の把握や、インストール、簡易実行について行いました。
#9以降では使い方のより詳細について確認するにあたって、公式のチュートリアルを確認していければと思います。