具有薄板樣條(TPS)的空間變壓器網絡(STN)的Pytorch實現。
STN是[1]中DeepMind提出的強大神經網絡架構。 STN通過將輸入圖像自動整流為正常分類網絡,從而實現實際空間不變性。 STN最令人驚奇的部分是它是端到端的差異,並且可以直接插入現有的網絡體系結構(Alexnet,Resnet等),而無需任何額外的監督。
原始STN紙[1]對三種特定轉換形式進行實驗:仿射轉換,投射轉換和薄板樣條鍵轉換(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網格大小的其他組合。下面的詳細信息。
有三個可控的參數: --model , --angle , --grid_size 。
--model :str,必需
no_stn ,STN模塊被丟棄,只有一個CNN分類器保留。bounded_stn , F.tanh將本地化網絡的輸出擠壓到[-1,1],就像[2]中所做的那樣unbounded_stn ,Locolizaition網絡的輸出不會被擠壓--angle :int,默認值= 60
[-angle, angle]內的隨機角度旋轉--grid_size :int,默認= 4
(grid_size x grid_size)控制點來定義薄板樣條變換 angle = 90的結果通常不好:
如果grid_size <= 3 : bounded_stn的結果很差
但是,如果grid_size >= 4 :
帶有unbounded_stn結果還可以:
當然,每種組合中總是有壞病例。您可以從Baidu NetDisk(文件大小2G)下載我的所有GIF。
[1]空間變壓器網絡
[2]自動矩陣穩健的場景識別
[3]數值方法————薄板樣條)