PyTorch を利用した画像認識・画像分類
画像分類
PyTorch は深層学習を行うための Python ライブラリーの一つである。PyTorch の他にも tensorflow/Keras や Caffee といったライブラリーも存在するが、とりわけ近年 PyTorch のユーザー数が急速に伸びし、大きなシェアを占めるようになった。機械学習のトップカンファレンスでも PyTorch が tensorflow などに比べて優位である。
PyTorch は、define-by-run 形式で学習・推論を行うアプローチを取っている。define-by-run では、まずモデルのアーキテクチャを構築して、次にデータをそのアーキテクチャに流して計算グラフを構築する。続けて、その計算グラフを利用して誤差逆伝播により学習を進めることができる。define-by-run では、データを流すたびに計算グラフを構築するため、計算グラフの構築コストが高い。しかし、モデルのアーキテクチャを順伝播の形で定義することができるので、コードの可読性が高い。また、アーキテクチャを定義しているコード群の中に、Python のプログラムを埋め込むことができるため、非常にデバッグしやすいといったメリットがある。
PyTorch の使用例は PyTorch tutorials で多く紹介されている。例えば、物体分類、転移学習や物体検出などの例が掲載されている。PyTorch のチュートリアルにある使用例を真似て勉強していけば、PyTorch の基本的な使い方を身に付けることができる。このページでは、PyTorch のチュートリアルにある使用例をもう少し簡単に砕いた使用例など紹介する。
PyTorch 基本
テンソル
tensor の作り方、CPU-GPU 間の移動方法や NumPy 配列との交互変換など。
テンソル自動微分
tensor で自動微分が可能な計算グラフを構築する方法と自動微分のオン・オフの切り替え方法。
DataLoader
torch の Dataset および transforms を独自に定義して使用する方法。
ニューラルネットワーク
回帰 (1 特徴量)
1 つの特徴量で 1 つの目的変数を予測する回帰問題をニューラルネットワークで解く方法。
回帰 (複数特徴量)
複数の特徴量で 1 つの目的変数を予測する回帰問題をニューラルネットワークで解く方法。
畳み込みニューラルネットワーク
CNN 画像分類 (1)
6 層からなるシンプルな CNN を構築し、オリジナルデータで学習と検証を行う方法。
CNN 画像分類 (2)
PyTorch で CNN を構築し、各エポックごとに学習と検証を行う一般的な使い方。
VGG16 物体認識
PyTorch/torchvision に実装されている VGG16 を使って、簡単あ画像分類モデルを作る方法。
VGG16 転移学習
PyTorch/torchvision に実装されている VGG16 を利用した転移学習・ファインチューニング。
Data Augmentation
imgaug パッケージを利用して、画像増幅を行いながら学習を進めている方法。
VGG16 アーキテクチャ自作
PyTorch の基本関数を使用て VGG16 アーキテクチャを自作する方法。
CNN 回帰問題
画像を使った回帰問題の解き方。顔写真から年齢を推定するなどに使う。
Grad-CAM
Grad-CAM を利用して CNN による画像判定の判定根拠を可視化する方法。
Guided Grad-CAM
Guided Grad-CAM を利用して CNN による画像判定の判定根拠を可視化する方法。