[學習筆記] STN、DCN 、MORAN簡單總結


STN、DCN 、MORAN簡單總結

題外話

最近沒啥時間寫blog了,陸續接了一些活在干,但是對OCR開始感興趣起來了,看了一篇MORAN和一篇DCN,讓我感覺和我之前做的一些工作是很接近的,感覺大家都是在從不同角度去讓CNN學習一種對形變更魯棒的表示,簡單總結一下。

STN、DCN和MORAN

STN是通過一個loc_net來回歸一組仿射變換的參數,利用仿射變換的關系得到outfeature map與input feature map在位置上的對應關系,然后利用插值保證對應的位置存在。此外,插值還保證了整個操作是可導的,一來有了從輸出位置到輸入位置的導數,二來仿射關系也能根據公式導出輸出對仿射變換參數的導數,用於更新loc_net。

DCN是通過一個卷積子網絡回歸卷積核的offset,然后卷積核在采樣加權時,不在原來固定的位置采樣,而是在原來的位置的基礎上加上回歸的offset,在這些位置進行采樣加權,同樣的,為了使操作是可導的,也使用了插值操作。

MORAN是OCR領域的一篇paper的方法,為了解決輸入字符不對齊(比如一個字符偏上,一個字符偏下),網絡學習輸出每個像素值的offset,然后相當於得到了input featuremap到output featuremap的對應關系,同樣插值,使得操作可導。

我在最近的工作中,需要做的是去學習給定輸入的最合適的crop位置,也就是讓網絡學會crop,雖然STN的仿射變換已經包含的這一操作,但是在實際訓練中,端到端的訓練很難使得我的任務收斂到很好的結果,我也提出了一些改進,不贅述。

上述三種方法的共同點是:

  1. 都希望利用一個子網回歸網絡的一組參數,然后利用這個參數得到輸入和輸出對應的關系,通過輸出來優化輸入或者被回歸的參數。
  2. 都在作用這種“操作”之后,使得output featuremap更適合任務,能夠對任務結果有提升。
  3. STN和MORAN都是對原圖進行操作,得到的結果實際上對人而言有可解釋性。

不同點:

  1. STN和MORAN的結果對人而言有可解釋性,DCN的結果其實對人而言沒有解釋性,offset對應的位置有可解釋性,結果只是采樣后的另一種表示。
  2. STN是針對整張圖像而言,做仿射變換;MORAN是對輸入拆分成塊,每塊有自己的offset,然后平移塊;DCN是針對卷積核做offset,試圖改變采樣的位置,而非定點采樣。

此外,還有一些問題:

MORAN V1的訓練是curriculum learning,端到端訓練收斂的結果並不好(雖然作者后面做了改進v2已經不需要端到端訓練了),STN其實同樣也存在這樣的問題,據實驗室的師兄說,STN在輸入和輸出很接近的情況下訓練的效果很好,要是輸入的目標占總圖像很小,很難訓練出一個好結果,STN在我自己實驗的時候也是端到端訓練收斂效果並不好。MORAN V1通過先訓練OCR識別網絡,然后再去優化矯正網絡,這樣可以學的很好,我自己在訓練的時候,針對STN也是交替訓練后面的分類/回歸網絡,然后固定其參數訓練前面的loc網絡,效果能達到最好。

此外,還有一篇論文也是做相似的東西的,叫RA-CNN,這篇文章也是通過訓練crop用於細粒度圖像分類。很有意思的是,他也不是端到端訓練,但這篇文章和上面的都不太相同,這里他根據實際情況定義了crop操作的梯度,梯度的回傳是自己定義的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM