在做影象語義分割的時候,編碼器通過卷積層得到影象的一些特徵,但是解碼器需要該特徵還原到原影象的尺寸大小,才可以對原影象的每個畫素點進行分類。從乙個較小尺寸的矩陣進行變換,得到較大尺寸的矩陣,在這個過程就是上取樣。
常見的上取樣的方法有(1)插值法(最鄰近插值、雙線性插值等) (2)轉置卷積(又稱為反卷積) (3)上取樣(unsampling)(4)上池化(unpooling)
插值法插值法不需要學習任何的引數,只是根據已知的畫素點對未知的點進行**估計,從而可以擴大影象的尺寸,達到上取樣的效果。常見的插值方法可以參考這篇文章:
轉置卷積
與插值法不同,轉置卷積需要學習一些引數。我們知道卷積操作如果不加padding會使影象尺寸縮小;相反地,轉置卷積(反卷積)會讓影象的尺寸增大。這篇文章介紹轉置卷積非常詳細:
這裡對該文章做一下簡單的概括。假如我們對乙個 4∗4
4*44∗
4 的原影象矩陣,用 3∗3
3*33∗
3 的卷積核做 stride為1、padding為 0 的卷積,則會得到乙個 2∗2
2*22∗
2 的特徵圖矩陣。該卷積的過程可以等價為矩陣的乘法:在上述卷積中, 3∗3
3*33∗
3 的卷積核可以轉化為 4∗16
4*16
4∗16
的卷積矩陣, 4∗4
4*44∗
4 的原影象轉化為 16∗1
16*1
16∗1
的向量,兩者進行矩陣乘法可得到 4∗1
4*14∗
1 的向量,最後resize為 2∗2
2*22∗
2 的特徵圖矩陣。
所以重點來了,擁有乙個 4∗16
4*16
4∗16
的卷積矩陣,可將 4∗4
4*44∗
4 的影象變為 2∗2
2*22∗
2;那麼,如果擁有乙個 16∗4
16*4
16∗4
的矩陣,可將 2∗2
2*22∗
2 的矩陣變為 4∗4
4*44∗
4。假如現在的影象尺寸是 2∗2
2*22∗
2,要將其恢復到 4∗4
4*44∗
4。首先將其轉化為 4∗1
4*14∗
1,再與卷積矩陣的轉置矩陣 16∗4
16*4
16∗4
做乘法,可以得到 16∗1
16*1
16∗1
的向量,最後resize為 4∗4
4*44∗
4 的影象矩陣。
轉置卷積的矩陣並不是正向卷積矩陣直接轉置得到,而只是維度上與正向卷積矩陣構成了轉置關係。轉置卷積也不是標準意義上的卷積,但可以當作卷積來使用。在實踐中,可以先將原始矩陣做上池化(即在中間部分填0),再做正向卷積,這樣的效果和轉置卷積是相同的。
unsampling 就是在直接將特徵圖的元素進行複製,以擴充feature map
unpooling 與 unsampling 類似,只是變為用 0 元素對特徵圖進行填充
JavaScript獲採樣式值的幾種方法學習總結
本人經過整理總結出以下獲採樣式值的方法,如有錯誤請各位大佬指正。有四種方法 style,currentstyle,getcomputedstyle,rules 與 cssrules方法。用法 document.getelementbyid id style.property 值 例子 總結 styl...
PCL幾種取樣方法
1 下取樣 downsampling 一般下取樣是通過構造乙個三維體素柵格,然後在每個體素內用體素內的所有點的重心近似顯示體素中的其他點,這樣體素內所有點就用乙個重心點來表示,進行下取樣的來達到濾波的效果,這樣就大大的減少了資料量,特別是在配準,曲面重建等工作之前作為預處理,可以很好的提高程式的執行...
TIdTCPClient的幾種方法
其實indy比較簡單,但是可以提供的方法太多了。我找了很久,才搞明白。比方說這個讀取緩衝區的資料,就有很多種方法。相對於ttcpclient的幾種方法來說,tidtcpclient確實提供了多種選擇,不仔細研究真的容易糊塗 其實我比較喜歡用currentreadbuffer 1 readfromst...