深度學習方法(十二):卷積神經網路結構變化——Spatial Transformer Networks
歡迎轉載,轉載請註明:本文出自Bin的專欄blog.csdn.net/xbinworld。
技術交流QQ群:433250724,歡迎對演算法、機器學習技術感興趣的同學加入。
今天具體介紹一個Google DeepMind在15年提出的Spatial Transformer Networks,相當於在傳統的一層Convolution中間,裝了一個“外掛”,可以使得傳統的卷積帶有了[裁剪]、[平移]、[縮放]、[旋轉]等特性;理論上,作者希望可以減少CNN的訓練資料量,以及減少做data argument,讓CNN自己學會資料的形狀變換。這篇論文我相信會啟發很多新的改進,也就是對卷積結構作出更多變化,還是比較有創意的。
背景知識:仿射變換、雙線性插值
在理解STN之前,先簡單瞭解一下基本的仿射變換、雙線性插值;其中,雙線性插值請跳轉至我剛剛寫的一篇更詳細的介紹“三十分鐘理解:線性插值,雙線性插值Bilinear Interpolation演算法”。這裡只放一個示意圖[1]:
而仿射變換,這裡只介紹論文中出現的最經典的2D affine transformation,實現[裁剪]、[平移]、[縮放]、[旋轉],只需要一個[2,3]的變換矩陣:
對於平移操作,仿射矩陣為:
對於縮放操作,仿射矩陣為:
對於旋轉操作,設繞原點順時針旋轉αα度,座標仿射矩陣為:
(這裡有個trick,由於影象的座標不是中心座標系,所以只要做下Normalization,把座標調整到[-1,1])[1]
至於裁剪(Crop)操作,作者在論文中提到:
determinant of the left 2×2 sub-matrix has magnitude less than unity
其實作用就是讓變換後的座標範圍變小了,這樣就相當於從原圖中裁剪出來一塊;
Spatial Transformer Networks
OK,開始講正題。論文中作者講的比較簡略,所以初看有點費勁,而且我看了網上很多資料,很對博主自己也沒有理解清楚。最主要的結構圖,還是這張:
圖1 STN架構
按照作者的說法,STN可以被安裝在任意CNN的任意一層中——這裡有些同學有誤解,以為上圖中U到V是原來的卷積,並且在卷積的路徑上加了一個分支,其實並不是,而是將原來的一層結果U,變換到了V,中間並沒有卷積的操作。看下圖右邊,通過U到V的變換,相當於又生成了一個新資料,而這個資料變換不是定死的而是學習來的,即然是學習來的,那它就有讓loss變小的作用,也就是說,通過對輸入資料進行簡單的空間變換,使得特徵變得更容易分類(往loss更小的方向變化)。另外一方面,有了STN,網路就可以動態地做到旋轉不變性,平移不變性等原本認為是Pooling層做的事情,同時可以選擇影象中最終要的區域(有利於分類)並把它變換到一個最理想的姿態(比如把字放正)。
再回到前面圖1 STN架構中,分為三個部分:
- Localisation net
- Grid generator
- Sampler
Localisation net
把feature map U作為輸入,過連續若干層計算(如卷積、FC等),迴歸出引數
Grid generator
名字叫grid生成器,啥意思?理解了這個名字就理解了這一步做啥了——在source圖中找到用於做插值(雙線性插值)的grid。這也是很多人理解錯的地方。仔細看下前面公式1:
s表示source(U中的座標),t表示target(V中的座標)。是不是很奇怪?因為前向計算中,是已知U的,而這個公式怎麼是把V做變換呢?——其實這裡的意思是,通過仿射變換,找到目標V中的座標點變換回source U中的座標在哪裡,而V這時候還沒有產生,需要通過下一層取樣器sampler來產生。
Sampler
作者也叫這一步Differentiable Image Sampling,是希望通過寫成一種形式上可微的影象取樣方法,目的是為了讓整個網路保持可以端到端反向傳播BP訓練,用一種比較簡潔的形式表示雙線性插值的公式:
和最前面雙線性插值的示意圖含義是一樣的,只是因為在影象中,相鄰兩個點的座標差是1,就沒有分母部分了。而迴圈中大部分都沒用的,只取相鄰的四個點作為一個grid。
所以上面 2. Grid generator和 3. Sampler是配合的,先通過V中座標
OK,本文就講到這裡,基本上前向過程都提到了,論文中還有關於求導(因為Sampler不連續,只能求Sub-Gradient)和訓練loss的一些內容,推薦讀者再結合論文看一下,這裡不寫了。另外,希望寫部落格的同學自己能夠多理解清楚一點再寫,不要隨便糊弄一下~~~
歡迎轉載,註明出處即可。預告一下,下一篇講一下最新MSRA的deformable convolutional network,和STN有很多相似的idea,也比較有意思。
參考資料
相關推薦
深度學習方法(十二):卷積神經網路結構變化——Spatial Transformer Networks
歡迎轉載,轉載請註明:本文出自Bin的專欄blog.csdn.net/xbinworld。 技術交流QQ群:433250724,歡迎對演算法、機器學習技術感興趣的同學加入。 今天具體介紹一個Google DeepMind在15年提出的Spatial T
機器學習入坑指南(十一):卷積神經網路
上一篇文章中,我們準備好了深度學習所需的資料。為了實現分辨貓狗的目的,我們決定使用卷積神經網路(Convolutional Neural Networks,CNN),目前它在影象識別方面十分受歡迎,那麼到底什麼是卷積神經網路呢?我們應該怎麼去理解它? 1 CNN
吳恩達深度學習筆記(deeplearning.ai)之卷積神經網路(CNN)(上)
1. Padding 在卷積操作中,過濾器(又稱核)的大小通常為奇數,如3x3,5x5。這樣的好處有兩點: 在特徵圖(二維卷積)中就會存在一箇中心畫素點。有一箇中心畫素點會十分方便,便於指出過濾器的位置。 在沒有padding的情況下,經過卷積操作,輸出的資
Python3學習筆記(十二):閉包
ram 類型 trac 就是 不能 ast 兩種 作用 ror 閉包定義: 在一個外函數中定義了一個內函數,內函數裏引用了外函數的臨時變量,並且外函數的返回值是內函數的引用。這樣就構成了一個閉包。 我們先來看一個簡單的函數: def outer(a): b
java基礎學習總結(十二):深入理解java內部類
內部類 內部類也是語法糖,是因為它僅僅是一個編譯時的概念,outer.java裡面定義了一個內部類inner,一旦編譯成功,就會生成兩個完全不同的.class檔案了,分別是outer.class和outer$inner.class。所以內部類的名字完全可以和它的外部類名字相同。 內部類分為四
javaweb學習筆記(十二):JSP(2)
jsp(2) 目錄 jsp(2) 1.Jsp指令 1.1 include指令 1.2 page指令 1.3 taglib指令 2. Jsp的隱式物件 2.1 out物件 2.2 pageContext物件 1.J
學習筆記(十二):推薦系統-隱語義模型
#程式碼摘自唐宇迪《推薦系統》視訊課程,資料集來自http://pan.baidu.com/s/1eS5VZ8Y中的“ml-1m"資料 from collections import deque from six import next import readers import tensor
機器學習筆記(十二):TensorFlow實戰四(影象識別與卷積神經網路)
1 - 卷積神經網路常用結構 1.1 - 卷積層 我們先來介紹卷積層的結構以及其前向傳播的演算法。 一個卷積層模組,包含以下幾個子模組: 使用0擴充邊界(padding) 卷積視窗過濾器(filter) 前向卷積 反向卷積(可選) 1.1
Python學習筆記(十二):lambda表示式與函數語言程式設計
以Mark Lutz著的《Python學習手冊》為教程,每天花1個小時左右時間學習,爭取兩週完成。 --- 寫在前面的話 2013-7-22 21:00 學習筆記 1,lambda的一般形式是關鍵字lambda後面跟一個或多個引數,緊跟一個冒號,以後是一個表示
機器學習筆記(十二):聚類
目錄 1)Unsupervised learning introduction 2)K-means algorithm 3)Optimization objective 4)Random initialization 5)Choosing the number of clus
Python3《機器學習實戰》學習筆記(十二):線性迴歸提高篇之樂高玩具套件二手價預測
一、前言 本篇文章講解線性迴歸的縮減方法,嶺迴歸以及逐步線性迴歸,同時熟悉sklearn的嶺迴歸使用方法,對樂高玩具套件的二手價格做出預測。 二、嶺迴歸 如果資料的特徵比樣本點還多應該怎麼辦?很顯然,此時我們不能再使用上文的方法進行計算了,因為矩陣X不是滿秩矩
機器學習筆記(十二):TensorFlow實現四(影象識別與卷積神經網路)
1 - 卷積神經網路常用結構 1.1 - 卷積層 我們先來介紹卷積層的結構以及其前向傳播的演算法。 一個卷積層模組,包含以下幾個子模組: 使用0擴充邊界(padding) 卷積視窗過濾器(filter) 前向卷積 反向卷積(可選) 1.1.2 - 邊界填充
各種音視訊編解碼學習詳解之 編解碼學習筆記(十二):其他編解碼(M-JPEG,Motion JPEG 2000,DivX)
最近在研究音視訊編解碼這一塊兒,看到@bitbit大神寫的【各種音視訊編解碼學習詳解】這篇文章,非常感謝,佩服的五體投地。奈何大神這邊文章太長,在這裡我把它分解成很多小的篇幅,方便閱讀。大神部落格傳送門:https://www.cnblogs.com/skyofbitbi
cortex_m3_stm32嵌入式學習筆記(十二):TFTLCD顯示(深入庫函式)
寫點比較常用的顯示函式。 首先顯示一張靜止的畫面,上面顯示字串(目前還不會顯示漢字) 只需要自己編寫主函式,將別人例程裡的lcd.c,lcd.h等相關標頭檔案加到工程即可 #include "led.h" #include "delay.h" #include "sys.
pytorch學習筆記(十二):詳解 Module 類
Module 是 pytorch 提供的一個基類,每次我們要 搭建 自己的神經網路的時候都要繼承這個類,繼承這個類會使得我們 搭建網路的過程變得異常簡單。 本文主要關注 Module 類的內部是怎麼樣
深度學習筆記(十二)--深度學習資料集MNIST、ImageNet、 COCO 、 VOC介紹
1. MNIST 深度學習領域的“Hello World!”,入門必備!MNIST是一個手寫數字資料庫,它有60000個訓練樣本集和10000個測試樣本集,每個樣本影象的寬高為28*28。此資料集是以二進位制儲存的,不能直接以影象格式檢視,不過很容易找到將其轉換成
Docker學習筆記(十二):Docker Swarm
1. 什麼是Docker Swarm? 容器叢集管理工具。 通過docker swarm可以將多臺機器連線在一起,通過swarm的排程可以服務的多臺機器的部署,服務的伸縮。 2. Docker Swarm 使用入門 1)節點初始化(manager節點) dock
計算機圖形學 學習筆記(十二):顏色模型,簡單 / 增量 光照模型
接下來將介紹真實感圖形學的內容。 真實感圖形學包括:顏色模型,簡單光照模型,增量光照模型,區域性光照模型和投射模型,整體光照模型,紋理對映和陰影處理。 真實感圖形學 真實感圖形學研究的是什麼?簡單來說,就是希望用計算機生成像照相機拍的照片一樣逼真地
深度學習之(十一)Deep learning中的優化方法:隨機梯度下降、受限的BFGS、共軛梯度法
三種常見優化演算法:SGD(隨機梯度下降),LBFGS(受限的BFGS),CG(共軛梯度法)。 1.SGD(隨機梯度下降) 隨機梯度下降(Stochastic Gradient Descent, SGD)是隨機和優化相結合的產物,是一種很神奇的優化方法,屬於
多線程學習-基礎(十二)生產者消費者模型:wait(),sleep(),notify()實現
都是 exce 生產 runnable 下午 util 庫存 jason 最大 一、多線程模型一:生產者消費者模型 (1)模型圖:(從網上找的圖,清晰明了) (2)生產者消費者模型原理說明: 這個模型核心是圍繞著一個“倉庫”的概念,生產者消費者都是圍繞著:“倉庫”