天天看點

[語義分割]SPP、空洞卷積與ASPP總結

ASPP全稱:Atrous Spatial Pyramid Pooling,中文可以了解為空洞空間卷積池化金字塔或者多孔空間金字塔池化。在這其中,要了解兩個概念:一個是SPP,池化金字塔結構或者叫空間金字塔池化層,都是一個東西;另一個是Atrous,空洞卷積,兩個概念加在一起産生了ASPP。

首先說一下SPP:Spatial Pyramid Pooling。這個結構出自于論文《Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition》,原文連接配接:https://arxiv.org/pdf/1406.4729.pdf

一、SPP

1.問題的産生

這裡問了讓邏輯更通順,多講一些,大佬們請跳到2

通常在神經網絡的訓練過程中,我們都需要保證資料集圖檔大小的一緻性,可這是為什麼呢?我們知道一個神經網絡通常包含三個部分:卷積、池化、全連接配接。

假設給定一個30*30大小的輸入圖檔,通過一個3*3的卷積核得到大小為29*29的輸出和給定一個40*40大小的輸入圖檔,得到大小為39*39的輸出之間有差別嗎?其實是沒有差別的,因為在這裡我們要訓練的是卷積核的參數,與輸入的圖檔大小無關。

再來看池化層,池化層其實可以了解成一個壓縮的過程,無論是AVE還是MAX其實也輸入都沒啥關系,輸出大小直接變為輸出一半就完了(參數為2)。

是以問題出現在全連接配接層上,假設同一個池化層的輸出分别是32*32*1和64*64*1,這就出問題了,因為全連接配接層的權重矩陣W是一個固定值,池化層的不同尺寸的輸出會導緻全連接配接層無法進行訓練。

針對這個問題,原有的解決思路是通過拉伸或者裁剪去統一圖檔的尺寸,但是會造成資訊丢失,失真等等衆多問題。

[語義分割]SPP、空洞卷積與ASPP總結

                                                                                圖1.圖檔變換後失去了原有的樣子

是以大佬們就想了個辦法,将原有的神經網絡處理流程從圖2改變為了圖3,提出了SPP結構,也就是池化金字塔,利用多尺度解決這個問題。

[語義分割]SPP、空洞卷積與ASPP總結

                                                                                   圖2.原有神經網絡處理流程

[語義分割]SPP、空洞卷積與ASPP總結

                                                                         圖3.帶有SPP結構的神經網絡處理流程

2.解決方案-SPP

[語義分割]SPP、空洞卷積與ASPP總結

                                                                                    圖4.SPP子產品示意圖

SPP的思想就是利用多個不同尺度的池化層進行特征的提取,融合成一個21維的向量輸入至全連接配接層。

如圖4所示,從下往上看,輸入圖檔的大小可以是任意的,經過卷積層卷積之後擷取特征圖的channels數量為256,将其輸入到SPP結構中。圖中從左往右看,分别将特征圖分成了16個格子,4個格子和1個格子。

假設特征圖大小是:width*height,這裡藍色格子的大小就是width/4*height/4,綠色格子的大小就是width/2*height/2,灰色格子的大小就是width*height。對每個格子分别進行池化,一般是采用MAX pooling,這樣子我們分别可以得到16*256、4*256、1*256的向量,将其疊加就是21維向量,這樣子就保證了無論輸入圖檔尺寸是多少,最終經過SPP輸出的尺度都是一緻的,也就可以順利地輸入到全連接配接層。

這就是SPP層的處理過程,思路和結構都很巧妙。

二、空洞卷積

再一個就是空洞卷積,這裡直接丢個連接配接:https://blog.csdn.net/lipengfei0427/article/details/108968914

三、ASPP

ASPP一開始在DeepLabv2中提出,DeepLab系列也是語義分割效果很棒的一個系列,丢個原文連結:https://arxiv.org/pdf/1606.00915.pdf

其實在了解了SPP子產品和空洞卷積之後再來看ASPP就十分簡單了。

[語義分割]SPP、空洞卷積與ASPP總結

                                                                                  圖5.ASPP子產品示意圖

圖5就是ASPP子產品示意,對于給定的輸入以不同采樣率的空洞卷積并行采樣,将得到的結果concat到一起,擴大通道數,然後再通過1*1的卷積将通道數降低到預期的數值。相當于以多個比例捕捉圖像的上下文。

[語義分割]SPP、空洞卷積與ASPP總結

                                                                            圖6.添加ASPP子產品網絡示意圖

添加ASPP子產品後的網絡如圖6所示,将Block4的輸出輸入到ASPP,經過多尺度的空洞卷積采樣後經過池化操作,然後由1*1卷積将通道數降低至預期值。

在DeepLabv3中,在ASPP中加入了BN層,再丢一個DeepLabv3原文連結:https://arxiv.org/pdf/1706.05587.pdf

最後附一個沒有BN層的ASPP代碼(PyTorch)

#without bn version
class ASPP(nn.Module):
    def __init__(self, in_channel=512, depth=256):
        super(ASPP,self).__init__()
        self.mean = nn.AdaptiveAvgPool2d((1, 1)) #(1,1)means ouput_dim
        self.conv = nn.Conv2d(in_channel, depth, 1, 1)
        self.atrous_block1 = nn.Conv2d(in_channel, depth, 1, 1)
        self.atrous_block6 = nn.Conv2d(in_channel, depth, 3, 1, padding=6, dilation=6)
        self.atrous_block12 = nn.Conv2d(in_channel, depth, 3, 1, padding=12, dilation=12)
        self.atrous_block18 = nn.Conv2d(in_channel, depth, 3, 1, padding=18, dilation=18)
        self.conv_1x1_output = nn.Conv2d(depth * 5, depth, 1, 1)
 
    def forward(self, x):
        size = x.shape[2:]
 
        image_features = self.mean(x)
        image_features = self.conv(image_features)
        image_features = F.upsample(image_features, size=size, mode='bilinear')
 
        atrous_block1 = self.atrous_block1(x)
        atrous_block6 = self.atrous_block6(x)
        atrous_block12 = self.atrous_block12(x)
        atrous_block18 = self.atrous_block18(x)
 
        net = self.conv_1x1_output(torch.cat([image_features, atrous_block1, atrous_block6,
                                              atrous_block12, atrous_block18], dim=1))
        return net
           

參考連接配接:

https://www.cnblogs.com/zongfa/p/9076311.html

https://blog.csdn.net/qq_26898461/article/details/50424240

https://zhuanlan.zhihu.com/p/27485018

https://blog.csdn.net/qq_36530992/article/details/102628455

https://blog.csdn.net/qq_21997625/article/details/87080576

https://www.pianshen.com/article/5912309758/

繼續閱讀