mutil scale有三種形式,第一種是融合中間層的不同尺度的特徵圖,比如常見的encoder-decoder結構;另一種是使用不同大小比例的影象batch送進網路,考慮用多尺度的融合特徵做決策。第三種是pspnet和deeplab採用的做法,分別為spp和aspp。
第一種被稱作skip-net,第二種被稱作share-net。
把輸入影象按照給定了多個尺度縮放,送進網路中,得到多個不同尺寸的score map。接下來就是這類方法的重點,使用何種方式做特徵的融合。其中attention to scale的做法是讓網路學習每一種尺度的score map的權重,使用加權求和來融合特徵。至於尺寸不一樣怎麼融合,這個有待以後看**才明白具體細節。
update on 4.17.2019
將輸入影象多個尺度縮放,獲得不一樣解析度的用於**的特徵圖(此特徵圖的通道數應等同分類數目),在deeplabv2是這麼做融合的。
先看原文。
就是說,來自不同尺度的**maps通過雙線性差值將影象縮放為原始影象大小。通過逐畫素點選擇每個位置最大的值。原始碼寫的很清楚:
self.interp1 = nn.upsamplingbilinear2d(size=(int(input_size_1 * 0.75) + 1, int(input_size_2 * 0.75) + 1))
self.interp2 = nn.upsamplingbilinear2d(size=(int(input_size_1 * 0.5) + 1, int(input_size_2 * 0.5) + 1))
self.interp3 = nn.upsamplingbilinear2d(size=(outs(input_size_1), outs(input_size_2)))
out =
x2 = self.interp1(x)
x3 = self.interp2(x)
# print(out[0].shape)
# print(out[1].shape)
x2out_interp = out[1]
x3out_interp = out[2]
temp1 = torch.max(out[0], x2out_interp)
也正是因為多個尺度的影象都經過相同的網路,引數共享,所以這種方式叫做share-net
顧名思義,模型存在捷徑連線。
其實skip方式如上圖那麼限制的那麼死,我們不僅可以入上圖所示,使用不同的中間層的特徵做融合,我們還能像encoder-decoder那樣特徵在對應層中使用,比如u-net和segnet。或者更加複雜的方式如dfn,使用逐stage不斷的refine 輸出結果。
全稱是atrous spatial pyramid pooling。看名字也知道有幾個componet了:空洞卷積,空間金字塔,pooling操作
deeplab系列的強大很大程度在於空洞卷積。空洞卷積有兩點好處。
其實對於熟悉空洞卷積的同學應該能發現,這兩點其實就是一點:能在增大感受野的情況下,不依靠池化等丟失資訊的操作,依然能保持很大的解析度,使得最終的資訊沒有丟失太多,進而提公升分割效果。
看上圖a,乙個點對應輸入的三個跨度。再看圖b,乙個輸出點對應於輸入的跨度是5。這不就是增大了感受野嗎?而且通過padding,我們也能控制輸出的解析度。**那麼在輸入輸出大小都一致的情況下,使用atrous conv獲得了更大的感受野,那麼得到的特徵圖理應更加密集。**當然例子是一維的情況,對於二維的特徵圖,本質是一致的。
在deeplabv2中也有例子說明空洞卷積的有效性。
如pan(pyramid attention network for semantic segmentation)),dfn的cab
我發現注意力機制在cnn領域常常用作特徵通道選擇,特徵放大,特徵抑制的作用
見pan的注意力機制模組
dfn的cab如下:
以上兩種結構很相似,共同點都是用了high level的特徵求出乙個權重係數向量,用這個向量重標定lower level的特徵,最後加上原始的high level特徵,形成對富含語義資訊的特徵的殘差學習。
aspp中除了卷積部分,還有乙個對image-level的輸出結果進行pooling的操作,我記得是使用gap。然後對該1x1的塊(形式上仍然屬於特徵圖)直接上取樣到和卷積部分解析度一致的大小。**中說這個操作可以解決因為atrous rate過大帶來的卷積核退化問題(degradation)。接著跟著256個1x1的卷積核的卷積層。
在語義分割中,引入上下文先驗資訊是很有效的方式。
未完待續。。。
vue中的一些用法,持續更新中
1 跳轉用法 1 在template模板中通常使用router link to url 2 在js中 1 this.router.push 2 this.router.push 3 this.router.push 第一種不傳參直接跳轉到某乙個頁面,第二種,第三種傳參跳轉到某個頁面,第二種和第三種不...
unittest的一些坑 機制 持續更新中
def test0 self self.b 5 def test1 self pring self.b這個執行起來之後,雖然會先執行test0,但是執行到test1時 會報錯類變數裡根本沒有b 這點是和普通類方法截然相反的,普通類方法,是可以輸出b 5的 還有,在unittest中的用例方法中,是沒...
秒殺活動中的一些技術挑戰
假設某 秒殺活動只推銷一件商品,預計會吸引一萬使用者參加活動,也就是說最大併發請求數是10k,此時,秒殺系統面臨的一些技術挑戰有哪些呢?1.對現有 業務造成衝擊 秒殺活動只是 營銷的乙個附加活動,這個活動具有時間短,併發訪問量大的特點。如果和 原有應用部署在一起,必然會對現有業務造成衝擊,稍有不慎,...