反面教師あり学習

*/

反面教師あり学習

Negative Supervised Learning

【論文読み】Kornia: an Open Source Differentiable Computer Vision Library for PyTorch

TL;DR

Kornia (旧 torchgeometry) はOpenCVに影響を受けたコンピュータビジョンのライブラリであり,PyTorchで実装することでGPUによる高速化と自動微分の恩恵を受けている.

概要

KorniaはPyTorchをバックエンドとしたオープンソースのコンピュータビジョンライブラリ.

arraiyopensource.github.io

arxiv.org

共著者のうち一番後ろに名前のあるGary BradskiはOpenCV創始者のひとり.

色空間の変換,空間フィルタリング(ガウシアンフィルタ,ラプラシアンなど)や幾何学変換といった OpenCVにも実装されているような低レベルの画像処理演算をPyTorchで実装することで, 既存の画像処理系のライブラリには無いPyTorchのReverse-mode自動微分の恩恵を受けられるようになっている. また,ニューラルネットの構造の中に画像処理演算を入れることも可能である.

KorniaはOpenCVに強く影響を受けていて,それに加えてGPUのサポートを強化したものという位置づけの模様.

PyTorchユーザフレンドリーなAPI

korniaを用いたコード例がFigure 2の左側に示されている. 以下のコードはその引用:

# load data: Bx3xHxW
img_batch = load_data_batch(...)

# send data to CUDA
if torch.cuda.is_available():
    img_batch = img_batch.cuda()

# define vision pipeline
sobel_fcn = torch.nn.Sequential(
    kornia.color.RgbToGrayscale(),
    kornia.filters.Sobel()
)

# distribute data
sobel_fcn = torch.nn.DataParallel(
    sobel_fcn, [device_ids_list]
)

# run the pipeline: Bx1xHxW
img_sobel = sobel_fcn(img_batch)

処理の内容は,読み込んだRGB画像を(GPUが使えるならGPUのメモリに置いてから) グレースケール画像に変換し,Sobelフィルタをかけるというシンプルな内容.

KorniaのTransparent APIのお陰で,Kornia以外のPyTorchのコンポネント(torch.nn.Sequentialtorch.nn.DataParallel) との組み合わせが非常に自然になっているのがわかる.

OpenCVにはtorch.nn.Sequential相当のAPIが無いので, 画像処理のパイプラインの記述が非常に簡潔なのが良い感じだと思う.

画像処理の実装例

ペーパーの中では処理の例を通じて,複雑な損失関数の微分を簡単に計算できることと 既存のライブラリのAPIとの違いを示している. 処理の例はImage RegistrationやDepth Estimationなど,4つ紹介されている (GitHubでJuptyer Notebookを上手く表示できなかったので,代わりにnbviewerのリンクを貼っている. また,tgmkorniaと読み替える必要あり).

https://nbviewer.jupyter.org/github/arraiyopensource/kornia/tree/d7662253ce478204b72b294d953e260ff5e2a9a8/examples/

自動微分の恩恵はImage Registration (Homography Regression) の例がたぶん一番わかりやすい.

https://nbviewer.jupyter.org/github/arraiyopensource/kornia/blob/d7662253ce478204b72b294d953e260ff5e2a9a8/examples/homography_regression/homography.ipynb

kornia.HomographyWarperが射影変換の演算を表していて, 変換行列の成分(このコードでは明示されないけど)が学習可能なパラメタになっている. OpenCVを使ってるとSIFT計算してcv2.findHomographyでRANSAC実行して変換行列を推定したくなるところだが, ここでは変換前後の画像間の $L_1$ 損失を勾配降下で小さくして変換行列を推定している.

Korniaの名称について(元々の名称はtorchgeometryだった)

サンプルコードを見てもどこにもkorniaという名前が見当たらない. 代わりにtorchgeometryというライブラリがやたら使われている.

調べてみたら,どうやら元々torchgeometryという名前で開発されていたが, より一般的なコンピュータビジョンライブラリを目指す意味でkorniaに改名された模様. 名称の変更にサンプルコードの更新が追い付いていないのかも.

参考: github.com github.com

まとめ

PyTorchをバックエンドとしたオープンソースのコンピュータビジョンライブラリであるKorniaを紹介した. 個人的には,幾何学演算のPyTorch実装がライブラリとしてまとまった形になってるのは大きいかも.今後の活躍に期待.

詳解 OpenCV3 コンピュータビジョンライブラリを使った画像処理・認識ー [ Gary Bradski ]

価格:7,480円
(2019/10/17 01:18時点)
感想(0件)