薄いプレートスプライン(TPS)を使用した空間変圧器ネットワーク(STN)のPytorch実装。
STNは、[1]でDeepMindによって提案された強力なニューラルネットワークアーキテクチャです。 STNは、通常の分類ネットワークにフィードされる前に、入力画像を自動的に修正することにより、実際の空間不変性を実現します。 STNの最も驚くべき部分は、エンドツーエンドの差であり、既存のネットワークアーキテクチャ(AlexNet、ResNetなど)に直接プラグインできることです。
元のSTNペーパー[1] 3つの特定の変換形態に関する実験:アフィン変換、射影形質転換、薄板スプライン変換(TPS) 。その中でも、TPSは任意の方法で画像をゆがめることができるため、最も強力な翻訳だと思います。以下に示すように、私は自分のアバターをゆがめることができます
の中へ
TPS-STNはOCRアプリケーションで使用されています[2]。このペーパーでは、TPS-STNは、通常のOCRテキスト認識モデルに供給される前に、歪んだテキスト画像を自動的に修正することです。
imageioを使用して、GIFの視覚化を作成します。 pip install imageioでインストールするだけです。
python mnist_train.py --model unbounded_stn --angle 90 --grid_size 4
python mnist_visualize.py --model unbounded_stn --angle 90 --grid_size 4
python mnist_make_gif.py --model unbounded_stn --angle 90 --grid_size 4
その後、PNGおよびGIF Resutlsは./image/unbounded_stn_angle60_grid4/および./gif/unbounded_stn_angle60_grid4/に保存されます。
モデルアーキテクチャ、MNISTランダム回転角度、TPSグリッドサイズの他の組み合わせを試すことができます。以下の詳細。
3つの制御可能な引数があります: --model 、 --angle 、 --grid_size 。
--model :str、必須
no_stnを使用すると、STNモジュールが破棄され、CNN分類器が1つだけ残ります。bounded_stn使用すると、[2]で行われたように、ローカリゼーションネットワークの出力はF.tanhによって[-1、1]に圧縮されます。unbounded_stnを使用すると、locolizaitionネットワークの出力が絞られていません--angle :int、default = 60
[-angle, angle]内でランダムな角度で回転します。 --grid_size :int、default = 4
(grid_size x grid_size)制御ポイントを使用して、薄いプレートスプライン変換を定義しますangle = 90の結果は一般的に悪いです:
grid_size <= 3の場合、 bounded_stnの結果は悪いです:
しかし、 grid_size >= 4場合はOK:
unbounded_stnの結果は問題ありません:
もちろん、それぞれの組み合わせには常に悪いケースがあります。 Baidu NetDisk(ファイルサイズ2G)からすべてのGIFをダウンロードできます。
[1]空間変圧器ネットワーク
[2]自動修正による堅牢なシーンテキスト認識
[3] 数值方法—— 薄板样条插值(薄い板のスプライン