<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          目標(biāo)檢測 | 盤點目標(biāo)檢測中的特征融合技巧(根據(jù)YOLO v4總結(jié))

          共 14844字,需瀏覽 30分鐘

           ·

          2022-11-24 21:10

          點擊上方小白學(xué)視覺”,選擇加"星標(biāo)"或“置頂

          重磅干貨,第一時間送達(dá)

          特征融合分類



          在深度學(xué)習(xí)的很多工作中(例如目標(biāo)檢測、圖像分割),融合不同尺度的特征是提高性能的一個重要手段。低層特征分辨率更高,包含更多位置、細(xì)節(jié)信息,但是由于經(jīng)過的卷積更少,其語義性更低,噪聲更多。高層特征具有更強(qiáng)的語義信息,但是分辨率很低,對細(xì)節(jié)的感知能力較差。如何將兩者高效融合,取其長處,棄之糟泊,是改善分割模型的關(guān)鍵。


          很多工作通過融合多層來提升檢測和分割的性能,按照融合與預(yù)測的先后順序,分類為早融合(Early fusion)和晚融合(Late fusion)。


          早融合(Early fusion): 先融合多層的特征,然后在融合后的特征上訓(xùn)練預(yù)測器(只在完全融合之后,才統(tǒng)一進(jìn)行檢測)。這類方法也被稱為skip connection,即采用concat、add操作。這一思路的代表是Inside-Outside Net(ION)和HyperNet。兩個經(jīng)典的特征融合方法:


          (1)concat:系列特征融合,直接將兩個特征進(jìn)行連接。兩個輸入特征x和y的維數(shù)若為p和q,輸出特征z的維數(shù)為p+q;


          (2)add:并行策略,將這兩個特征向量組合成復(fù)向量,對于輸入特征x和y,z = x + iy,其中i是虛數(shù)單位。


          晚融合(Late fusion):通過結(jié)合不同層的檢測結(jié)果改進(jìn)檢測性能(尚未完成最終的融合之前,在部分融合的層上就開始進(jìn)行檢測,會有多層的檢測,最終將多個檢測結(jié)果進(jìn)行融合)。這一類研究思路的代表有兩種:


          (1)feature不融合,多尺度的feture分別進(jìn)行預(yù)測,然后對預(yù)測結(jié)果進(jìn)行綜合,如Single Shot MultiBox Detector (SSD) , Multi-scale CNN(MS-CNN)


          (2)feature進(jìn)行金字塔融合,融合后進(jìn)行預(yù)測,如Feature Pyramid Network(FPN)等。


          接下來,主要對晚融合方法進(jìn)行歸納總結(jié)。


          Feature Pyramid Network(FPN)



          論文地址

          https://arxiv.org/abs/1612.03144


          FPN(Feature Pyramid Network)算法同時利用低層特征高分辨率和高層特征的高語義信息,通過融合這些不同層的特征達(dá)到預(yù)測的效果。并且預(yù)測是在每個融合后的特征層上單獨進(jìn)行的,這和常規(guī)的特征融合方式不同。


          FPN將深層信息上采樣,與淺層信息逐元素地相加,從而構(gòu)建了尺寸不同的特征金字塔結(jié)構(gòu),性能優(yōu)越,現(xiàn)已成為目標(biāo)檢測算法的一個標(biāo)準(zhǔn)組件。FPN的結(jié)構(gòu)如下所示。

          • 自下而上:最左側(cè)為普通的卷積網(wǎng)絡(luò),默認(rèn)使用ResNet結(jié)構(gòu),用作提取語義信息。C1代表了ResNet的前幾個卷積與池化層,而C2至C5分別為不同的ResNet卷積組,這些卷積組包含了多個Bottleneck結(jié)構(gòu),組內(nèi)的特征圖大小相同,組間大小遞減。


          • 自上而下:首先對C5進(jìn)行1×1卷積降低通道數(shù)得到P5,然后依次進(jìn)行上采樣得到P4、P3和P2,目的是得到與C4、C3與C2長寬相同的特征,以方便下一步進(jìn)行逐元素相加。這里采用2倍最鄰近上采樣,即直接對臨近元素進(jìn)行復(fù)制,而非線性插值。


          • 橫向連接(Lateral Connection):目的是為了將上采樣后的高語義特征與淺層的定位細(xì)節(jié)特征進(jìn)行融合。高語義特征經(jīng)過上采樣后,其長寬與對應(yīng)的淺層特征相同,而通道數(shù)固定為256,因此需要對底層特征C2至C4進(jìn)行11卷積使得其通道數(shù)變?yōu)?56,然后兩者進(jìn)行逐元素相加得到P4、P3與P2。由于C1的特征圖尺寸較大且語義信息不足,因此沒有把C1放到橫向連接中。


          • 卷積融合:在得到相加后的特征后,利用3×3卷積對生成的P2至P4再進(jìn)行融合,目的是消除上采樣過程帶來的重疊效應(yīng),以生成最終的特征圖。


          FPN對于不同大小的RoI,使用不同的特征圖,大尺度的RoI在深層的特征圖上進(jìn)行提取,如P5,小尺度的RoI在淺層的特征圖上進(jìn)行提取,如P2。FPN的代碼實現(xiàn)如下:



          import torch.nn as nnimport torch.nn.functional as Fimport math
          class Bottleneck(nn.Module):    expansion = 4    def __init__(self, in_planes, planes, stride=1, downsample=None):        super(Bottleneck, self).__init__()        self.bottleneck = nn.Sequential(                nn.Conv2d(in_planes, planes, 1, bias=False),                nn.BatchNorm2d(planes),                nn.ReLU(inplace=True),                nn.Conv2d(planes, planes, 3, stride, 1, bias=False),                nn.BatchNorm2d(planes),                nn.ReLU(inplace=True),                nn.Conv2d(planes, self.expansion * planes, 1, bias=False),                nn.BatchNorm2d(self.expansion * planes),            )        self.relu = nn.ReLU(inplace=True)        self.downsample = downsample    def forward(self, x):        identity = x        out = self.bottleneck(x)        if self.downsample is not None:            identity = self.downsample(x)        out += identity        out = self.relu(out)        return out
          class FPN(nn.Module):    def __init__(self, layers):        super(FPN, self).__init__()        self.inplanes = 64        self.conv1 = nn.Conv2d(3, 64, 7, 2, 3, bias=False)        self.bn1 = nn.BatchNorm2d(64)        self.relu = nn.ReLU(inplace=True)        self.maxpool = nn.MaxPool2d(3, 2, 1)
                 self.layer1 = self._make_layer(64, layers[0])        self.layer2 = self._make_layer(128, layers[1], 2)        self.layer3 = self._make_layer(256, layers[2], 2)        self.layer4 = self._make_layer(512, layers[3], 2)        self.toplayer = nn.Conv2d(2048, 256, 1, 1, 0)
                 self.smooth1 = nn.Conv2d(256, 256, 3, 1, 1)        self.smooth2 = nn.Conv2d(256, 256, 3, 1, 1)        self.smooth3 = nn.Conv2d(256, 256, 3, 1, 1)
                 self.latlayer1 = nn.Conv2d(1024, 256, 1, 1, 0)        self.latlayer2 = nn.Conv2d( 512, 256, 1, 1, 0)        self.latlayer3 = nn.Conv2d( 256, 256, 1, 1, 0)
             def _make_layer(self, planes, blocks, stride=1):        downsample  = None        if stride != 1 or self.inplanes != Bottleneck.expansion * planes:            downsample  = nn.Sequential(                nn.Conv2d(self.inplanes, Bottleneck.expansion * planes, 1, stride, bias=False),                nn.BatchNorm2d(Bottleneck.expansion * planes)            )        layers = []        layers.append(Bottleneck(self.inplanes, planes, stride, downsample))        self.inplanes = planes * Bottleneck.expansion        for i in range(1, blocks):            layers.append(Bottleneck(self.inplanes, planes))        return nn.Sequential(*layers)
             def _upsample_add(self, x, y):        _,_,H,W = y.shape        return F.upsample(x, size=(H,W), mode='bilinear') + y
             def forward(self, x):
                 c1 = self.maxpool(self.relu(self.bn1(self.conv1(x))))        c2 = self.layer1(c1)        c3 = self.layer2(c2)        c4 = self.layer3(c3)        c5 = self.layer4(c4)
                 p5 = self.toplayer(c5)        p4 = self._upsample_add(p5, self.latlayer1(c4))        p3 = self._upsample_add(p4, self.latlayer2(c3))        p2 = self._upsample_add(p3, self.latlayer3(c2))
                 p4 = self.smooth1(p4)        p3 = self.smooth2(p3)        p2 = self.smooth3(p2)        return p2, p3, p4, p5


          PANet(Path Aggregation Network)



          論文地址:

          https://arxiv.org/abs/1803.01534

          代碼地址:

          https://github.com/ShuLiu1993/PANet


          1、縮短信息路徑和用低層級的準(zhǔn)確定位信息增強(qiáng)特征金字塔,創(chuàng)建了自下而上的路徑增強(qiáng)


          2、為了恢復(fù)每個建議區(qū)域和所有特征層級之間被破壞的信息,作者開發(fā)了適應(yīng)性特征池化(adaptive feature pooling)技術(shù),可以將所有特征層級中的特征整合到每個建議區(qū)域中,避免了任意分配的結(jié)果。


          3、全連接融合層:使用一個小型fc層用于補(bǔ)充mask預(yù)測



          自下而上的路徑增強(qiáng)

          Bottom-up Path Augemtation的提出主要是考慮到網(wǎng)絡(luò)的淺層特征對于實例分割非常重要,不難想到淺層特征中包含大量邊緣形狀等特征,這對實例分割這種像素級別的分類任務(wù)是起到至關(guān)重要的作用的。因此,為了保留更多的淺層特征,論文引入了Bottom-up Path Augemtation。

          紅色的箭頭表示在FPN中,因為要走自底向上的過程,淺層的特征傳遞到頂層需要經(jīng)過幾十個甚至上百個網(wǎng)絡(luò)層,當(dāng)然這取決于BackBone網(wǎng)絡(luò)用的什么,因此經(jīng)過這么多層傳遞之后,淺層的特征信息丟失就會比較嚴(yán)重。

          綠色的箭頭表作者添加了一個Bottom-up Path Augemtation結(jié)構(gòu),這個結(jié)構(gòu)本身不到10層,這樣淺層特征經(jīng)過原始FPN中的橫向連接到P2然后再從P2沿著Bottom-up Path Augemtation傳遞到頂層,經(jīng)過的層數(shù)不到10層,能較好的保存淺層特征信息。注意,這里的N2和P2表示同一個特征圖。 但N3,N4,N5和P3,P4,P5不一樣,實際上N3,N4,N5是P3,P4,P5融合后的結(jié)果。

          Bottom-up Path Augemtation的詳細(xì)結(jié)構(gòu)如下圖所示,經(jīng)過一個尺寸為,步長為的卷積之后,特征圖尺寸減小為原來的一半然后和這個特征圖做add操作,得到的結(jié)果再經(jīng)過一個卷積核尺寸為的卷積層得到。

          Bottom-up Path Augemtation詳細(xì)結(jié)構(gòu)


          適應(yīng)性特征池化(adaptive feature pooling)

          論文指出,在Faster-RCNN系列的標(biāo)檢測或分割算法中,RPN網(wǎng)絡(luò)得到的ROI需要經(jīng)過ROI Pooling或ROI Align提取ROI特征,這一步操作中每個ROI所基于的特征都是單層特征,F(xiàn)PN同樣也是基于單層特征,因為檢測頭是分別接在每個尺度上的。

          本文提出的Adaptive Feature Pooling則是將單層特征換成多層特征,即每個ROI需要和多層特征(論文中是4層)做ROI Align的操作,然后將得到的不同層的ROI特征融合在一起,這樣每個ROI特征就融合了多層特征。

          RPN網(wǎng)絡(luò)獲得的每個ROI都要分別和特征層做ROI Align操作,這樣個ROI就提取到4個不同的特征圖,然后將4個不同的特征圖融合在一起就得到最終的特征,后續(xù)的分類和回歸都是基于此最終的特征進(jìn)行。


          全連接融合層(Fully-Connected Fusion)

          全連接融合層對原有的分割支路(FCN)引入一個前景二分類的全連接支路,通過融合這兩條支路的輸出得到更加精確的分割結(jié)果。這個模塊的具體實現(xiàn)如圖所示。

          Fully-Connected Fusion模塊

          從圖中可以看到這個結(jié)構(gòu)主要是在原始的Mask支路(即帶deconv那條支路)的基礎(chǔ)上增加了下面那個支路做融合。增加的這個支路包含的卷積層,然后接一個全連接層,再經(jīng)過reshape操作得到維度和上面支路相同的前背景Mask,即是說下面這個支路做的就是前景和背景的二分類,輸出維度類似于文中說的。而上面的支路輸出維度類似,其中代表數(shù)據(jù)集目標(biāo)類別數(shù)。最終,這兩條支路的輸出Mask做融合以獲得更加精細(xì)的最終結(jié)果。

          MLFPN



          MLFPN來自《M2det: A single-shot object detector based on multi-level feature pyramid network》。

          論文地址:

          https://arxiv.org/abs/1811.04533

          代碼地址:

          https://github.com/qijiezhao/M2Det


          之前的特征金字塔目標(biāo)檢測網(wǎng)絡(luò)共有的兩個問題是:

          1、原本 backbone 是用于目標(biāo)分類的網(wǎng)絡(luò),導(dǎo)致用于目標(biāo)檢測的語義特征不足;


          2、每個用于目標(biāo)檢測的特征層主要或者僅僅是由單級特征層(single-level layers)構(gòu)成,也就是僅僅包含了單級信息

          這種思想導(dǎo)致一個很嚴(yán)重的問題,對分類子網(wǎng)絡(luò)來說更深更高的層更容易區(qū)分,對定位的回歸任務(wù)來說使用更低更淺的層比較好。此外,底層特征更適合描述具有簡單外觀的目標(biāo),而高層特征更適合描述具有復(fù)雜外觀的目標(biāo)。在實際中,具有相似大小目標(biāo)實例的外觀可能非常不同。例如一個交通燈和一個遠(yuǎn)距離的人可能具有可以比較的尺寸,但是人的外表更加復(fù)雜。因此,金字塔中的每個特征圖主要或者僅僅由單層特征構(gòu)成可能會導(dǎo)致次優(yōu)的檢測性能。


          為了更好地解決目標(biāo)檢測中尺度變化帶來的問題,M2det提出一種更有效的特征金字塔結(jié)構(gòu)MLFPN, 其大致流程如下圖所示:首先,對主干網(wǎng)絡(luò)提取到的特征進(jìn)行融合;然后通過TUM和FFM提取更有代表性的Multi-level&Mutli-scale特征;最后通過SFAM融合多級特征,得到多級特征金字塔用于最終階段的預(yù)測。M2Det使用主干網(wǎng)絡(luò)+MLFPN來提取圖像特征,然后采用類似SSD的方式預(yù)測密集的包圍框和類別得分,通過NMS得到最后的檢測結(jié)果。



          如上圖所示,MLFPN主要有3個模塊組成:

          1)特征融合模塊FFM;

          2)細(xì)化U型模塊TUM;

          3)尺度特征聚合模塊SFAM.

          首先, FFMv1對主干網(wǎng)絡(luò)提取到的淺層和深層特征進(jìn)行融合,得到base feature;

          其次,堆疊多個TUM和FFMv2,每個TUM可以產(chǎn)生多個不同scale的feature map,每個FFMv2融合base feature和上一個TUM的輸出,并給到下一個TUM作為輸入(更高level)。

          最后,SFAM通過scale-wise拼接和channel-wise attention來聚合multi-level&multi-scale的特征。

          • 特征融合模塊FFM

          FFM用于融合M2Det中不同級別的特征,先通過1x1卷積壓縮通道數(shù),再進(jìn)行拼接。

          FFM1 用于融合深層和和淺層特征,為 MLFPN 提供基本輸入的特征層(Base Feature);由于 M2Det 使用了 VGG 作為 backbone,因此 FFM1 取出了 Conv4_3 和 Conv5_3 作為輸入:FFMv1使用兩種不同scale的feature map作為輸入,所以在拼接操作之前加入了上采樣操作來調(diào)整大??;

          FFMv2用于融合 MLFPN 的基本輸入(Base Feature)和上一個 TUM 模塊的輸出,兩個輸入的scale相同,所以比較簡單。

          • 細(xì)化U型模塊TUM

          TUM使用了比FPN和RetinaNet更薄的U型網(wǎng)絡(luò)。在上采樣和元素相加操作之后加上1x1卷積來加強(qiáng)學(xué)習(xí)能力和保持特征平滑度。TUM中每個解碼器的輸出共同構(gòu)成了該TUM的multi-scale輸出。每個TUM的輸出共同構(gòu)成了multi-level&multi-scale特征,前面的TUM提供low level feature,后面的TUM提供high level feature。

          TUM 的編碼器(encoder)使用 3×3 大小、步長為 2 的卷積層進(jìn)行特征提取,特征圖不斷縮??;解碼器(decoder)同過雙線性插值的方法將特征圖放大回原大小。

          • 尺度特征聚合模塊SFAM

          SFAM旨在聚合TUMs產(chǎn)生的多級多尺度特征,以構(gòu)造一個多級特征金字塔。在first stage,SFAM沿著channel維度將擁有相同scale的feature map進(jìn)行拼接,這樣得到的每個scale的特征都包含了多個level的信息。然后在second stage,借鑒SENet的思想,加入channel-wise attention,以更好地捕捉有用的特征。SFAM的細(xì)節(jié)如下圖所示:

          網(wǎng)絡(luò)配置

          M2Det的主干網(wǎng)絡(luò)采用VGG-16和ResNet-101。

          MLFPN的默認(rèn)配置包含有8個TUM,每個TUM包含5個跨步卷積核5個上采樣操作,所以每個TUM的輸出包含了6個不同scale的特征。

          在檢測階段,為6組金字塔特征每組后面添加兩個卷積層,以分別實現(xiàn)位置回歸和分類。

          后處理階段,使用soft-NMS來過濾無用的包圍框。

          ASFF:自適應(yīng)特征融合方式



          ASFF來自論文:《Learning Spatial Fusion for Single-Shot Object Detection》,也就是著名的yolov3-asff

          論文地址:

          https://arxiv.org/pdf/1911.09516.pdf

          代碼地址:

          https://github.com/ruinmessi/ASFF


          金字塔特征表示法(FPN)是解決目標(biāo)檢測尺度變化挑戰(zhàn)的常用方法。但是,對于基于FPN的單級檢測器來說,不同特征尺度之間的不一致是其主要限制。因此這篇論文提出了一種新的數(shù)據(jù)驅(qū)動的金字塔特征融合方式,稱之為自適應(yīng)空間特征融合(ASFF)。它學(xué)習(xí)了在空間上過濾沖突信息以抑制梯度反傳的時候不一致的方法,從而改善了特征的比例不變性,并且推理開銷降低。借助ASFF策略和可靠的YOLOV3 BaseLine,在COCO數(shù)據(jù)集上實現(xiàn)了45FPS/42.4%AP以及29FPS/43.9%AP。


          ASFF簡要思想就是:原來的FPN add方式現(xiàn)在變成了add基礎(chǔ)上多了一個可學(xué)習(xí)系數(shù),該參數(shù)是自動學(xué)習(xí)的,可以實現(xiàn)自適應(yīng)融合效果,類似于全連接參數(shù)。 



          以ASFF-3為例,圖中的綠色框描述了如何將特征進(jìn)行融合,其中X1,X2,X3分別為來自level,level2,level3的特征,與為來自不同層的特征乘上權(quán)重參數(shù)α3,β3和γ3并相加,就能得到新的融合特征ASFF-3,如下面公式所示:

          因為采用相加的方式,所以需要相加時的level1~3層輸出的特征大小相同,且通道數(shù)也要相同,需要對不同層的feature做upsample或downsample并調(diào)整通道數(shù)。對于需要upsample的層,比如想得到ASFF3,需要將level1調(diào)整至和level3尺寸一致,采用的方式是先通過1×1卷積調(diào)整到與level3通道數(shù)一致,再用插值的方式resize到相同大小;而對于需要downsample的層,比如想得到ASFF1,此時對于level2到level1只需要用一個3×3,stride=2的卷積就可以了,如果是level3到level1則需要在3×3卷積的基礎(chǔ)上再加一個stride=2的maxpooling,這樣就能調(diào)整level3和level1尺寸一致。


          對于權(quán)重參數(shù)α,β和γ,則是通過resize后的level1~level3的特征圖經(jīng)過1×1的卷積得到的。并且參數(shù)α,β和γ經(jīng)過concat之后通過softmax使得他們的范圍都在[0,1]內(nèi)并且和為1:


          具體步驟可以概況為:


          1、首先對于第l級特征圖輸出cxhxw,對其余特征圖進(jìn)行上下采樣操作,得到同樣大小和channel的特征圖,方便后續(xù)融合 

          2、對處理后的3個層級特征圖輸出,輸入到1x1xn的卷積中(n是預(yù)先設(shè)定的),得到3個空間權(quán)重向量,每個大小是nxhxw 


          3、然后通道方向拼接得到3nxhxw的權(quán)重融合圖 


          4、為了得到通道為3的權(quán)重圖,對上述特征圖采用1x1x3的卷積,得到3xhxw的權(quán)重向量 


          5、在通道方向softmax操作,進(jìn)行歸一化,將3個向量乘加到3個特征圖上面,得到融合后的cxhxw特征圖 


          6、采用3x3卷積得到輸出通道為256的預(yù)測輸出層


          為什么ASFF有效?


          文章通過梯度和反向傳播來解釋為什么ASFF會有效。首先以最基本的YOLOv3為例,加入FPN后通過鏈?zhǔn)椒▌t我們知道在backward的時候梯度是這樣計算的:



          其中因為不同尺度的層之間的尺度變換無非就是up-sampling或者down-sampling,因此這一項通常為固定值,為了簡化表達(dá)式我們可以設(shè)置為1,,則上面的式子變成了:



          進(jìn)一步的,這一項相當(dāng)于對輸出特征的activation操作,其導(dǎo)數(shù)也將為固定值,同理,我們可以將他們的值簡化為1,則表達(dá)式進(jìn)一步簡化成了:


          假設(shè)level1(i,j)對應(yīng)位置feature map上剛好有物體并且為正樣本,那其他level上對應(yīng)(i,j)位置上可能剛好為負(fù)樣本,這樣反傳過程中梯度既包含了正樣本又包含了負(fù)樣本,這種不連續(xù)性會對梯度結(jié)果造成干擾,并且降低訓(xùn)練的效率。而通過ASFF的方式,反傳的梯度表達(dá)式就變成了:



          我們可以通過權(quán)重參數(shù)來控制,比如剛才那種情況,另α2和α3=0,則負(fù)樣本的梯度不會結(jié)果造成干擾。另外這也解釋了為什么特征融合的權(quán)重參數(shù)來源于輸出特征+卷積,因為融合的權(quán)重參數(shù)和特征是息息相關(guān)的。


          Bi-FPN


           BiFPN來自論文:《EfficientDet: Scalable and efficient object detection 》。BiFPN思想和ASFF非常類似,也是可學(xué)習(xí)參數(shù)的自適應(yīng)加權(quán)融合,但是比ASFF更加復(fù)雜。

          論文地址:

          https://arxiv.org/abs/1901.01892

          代碼地址:

          https://github.com/google/automl/tree/master/efficientdet(Google官方)

          https://github.com/zylo117/Yet-Another-EfficientDet-Pytorch(高星PyTorch復(fù)現(xiàn))

          EfficientDet的方法論和創(chuàng)新性圍繞兩個關(guān)鍵挑戰(zhàn):


          • 更好地融合多層特征。這個毋庸置疑,肯定是從 FPN 發(fā)展過來的,至于 Bi 就是雙向,原始的FPN實現(xiàn)的自頂向下(top-down)融合,所謂的BiFPN就是兩條路線既有top-down也有down-top。在融合過程中,之前的一些模型方法沒有考慮到各級特征對融合后特征的g共享度問題,即之前模型認(rèn)為各級特征的貢獻(xiàn)度相同,而本文作者認(rèn)為它們的分辨率不同,其對融合后特征的貢獻(xiàn)度不同,因此在特征融合階段引入了weight。

          • 模型縮放。這個主要靈感來自于 EfficientNet,即在基線網(wǎng)絡(luò)上同時對多個維度進(jìn)行縮放(一般都是放大),這里的維度體現(xiàn)在主干網(wǎng)絡(luò)、特征網(wǎng)絡(luò)、以及分類/回歸網(wǎng)絡(luò)全流程的整體架構(gòu)上整體網(wǎng)絡(luò)由主干網(wǎng)絡(luò)、特征網(wǎng)絡(luò)以及分類/回歸網(wǎng)絡(luò)組成,可以縮放的維度比 EfficientNet 多得多,所以用網(wǎng)絡(luò)搜索方式不合適了,作者提出一些啟發(fā)式方法。


          BiFPN



          BiFPN的思想其實是基于路徑增強(qiáng)FPN(PANet)的思想,在自頂向下特征融合之后緊接著自底向上再融合一遍。在圖2中文章列舉了三類FPN以及BiFPN。圖2(a) 是傳統(tǒng)FPN,圖2(b)是PANet,圖2(c)是利用網(wǎng)絡(luò)自動搜索的方式生成的不規(guī)則特征融合模塊,且這個模塊可以重復(fù)疊加使用【即堆疊同樣的模塊,不停地使用相同的結(jié)構(gòu)融合多層特征】。可以看到,PANet可以看做一個na?ve的雙向FPN。


          BiFPN針對PANet的改進(jìn)點主要有三個:


          • 削減了一些邊。BiFPN刪除了只有一個入度的節(jié)點,因為這個節(jié)點和前一個節(jié)點的信息是相同的【因為沒有別的新的信息傳進(jìn)來】,這樣就祛除了一些冗余計算。

          • 增加了一些邊。BiFPN增加了一些跳躍連接【可以理解為residual連接,圖2(d)中橫向曲線3個連接】,這些連接由同一層的原始特征節(jié)點【即沒有經(jīng)歷自頂向下融合的特征】連接到輸出節(jié)點【參與自底向上特征融合】。

          • 將自頂向下和自底向上融合構(gòu)造為一個模塊,使其可以重復(fù)堆疊,增強(qiáng)信息融合【有了一種遞歸神經(jīng)網(wǎng)絡(luò)的趕腳】。PANet只有一層自頂向下和一層自底向上。


          而對于特征融合的計算,BiFPN也做了改進(jìn)。傳統(tǒng)融合計算一般就是把輸入特征圖resize到相同尺寸然后相加【或相乘,或拼接】。但是BiFPN考慮到不同特征的貢獻(xiàn)可能不同,所以考慮對輸入特征加權(quán)。文章中把作者們對如何加權(quán)的探索過程也列了出來。


          • 首先嘗試簡單加權(quán)相加,對權(quán)值不做約束。這樣得到的實驗結(jié)果還可以,但是沒有約束的權(quán)值會造成訓(xùn)練困難和崩潰。


          • 然后為了歸一化權(quán)值,作者嘗試了用softmax操作把權(quán)值歸一化到[0, 1]。雖然達(dá)到了歸一化效果,但是softmax極大增加了GPU計算負(fù)擔(dān)。


          • 最后,回歸本質(zhì),不整什么指數(shù)計算了。直接權(quán)值除以所有權(quán)值加和(分母加了一個極小量防止除0)來歸一化【也就是計算權(quán)值在整個權(quán)值中的比例】,同樣把權(quán)值歸一化到[0,1],性能并沒有下降,還增加了計算速度。


          BiFPN介紹的最后,作者還提醒大家注意在特征融合模塊里為了進(jìn)一步提高計算效率,卷積使用的是逐深度卷積【就是每個通道自成一個分組】,并在每個卷積之后加了BN和激活函數(shù)。


          EfficientDet



          EfficientDet使用在imagenet上預(yù)訓(xùn)練的EfficientNet作為backbone模型,并對網(wǎng)絡(luò)中第3到第7層特征進(jìn)行了BiFPN特征融合,用來檢測和分類。


          EfficientDet同樣對模型進(jìn)行了縮放。與EfficientNet對傳統(tǒng)提升模型尺度方法的態(tài)度一樣,文章認(rèn)為傳統(tǒng)提升模型尺度指示簡單地針對單一維度【深度,寬度或分辨率】進(jìn)行增加,而EfficientNet提出的符合縮放才是真香。EfficientDet提出了自己的符合縮放,要聯(lián)合對backbone,BiFPN,預(yù)測模塊,和輸入分辨率進(jìn)行縮放。然而僅僅對EfficientNet本身縮放的參數(shù)進(jìn)行網(wǎng)格搜索就已經(jīng)很貴了,對所有網(wǎng)絡(luò)的所有維度進(jìn)行網(wǎng)格搜索顯然也是不可承受之重。所以EfficientDet用了一個“啟發(fā)式”方法【在我看來是對每個網(wǎng)絡(luò)的每個維度自定了一些簡單的規(guī)則而已】。


          • Backbone依然遵循EfficientNet。

          • BiFPN的深度隨系數(shù)?線性增長,寬度隨?指數(shù)增長。而對寬度指數(shù)的底做了一個網(wǎng)格搜索,確定底為1.35 。



          • 對預(yù)測模塊,寬度與BiFPN一致。深度隨?線性增長。



          • 輸入分辨率也是隨?線性增長。



          參考文章

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

          https://blog.csdn.net/weixin_44936889/article/details/104269829

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

          https://blog.csdn.net/watermelon1123/article/details/103277773

          漲分利器!攻克目標(biāo)檢測難點秘籍三,多尺度檢測

          “白話”目標(biāo)檢測系列:EfficientDet

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

          好消息!

          小白學(xué)視覺知識星球

          開始面向外開放啦??????




          下載1:OpenCV-Contrib擴(kuò)展模塊中文版教程
          在「小白學(xué)視覺」公眾號后臺回復(fù):擴(kuò)展模塊中文教程,即可下載全網(wǎng)第一份OpenCV擴(kuò)展模塊教程中文版,涵蓋擴(kuò)展模塊安裝、SFM算法、立體視覺、目標(biāo)跟蹤、生物視覺、超分辨率處理等二十多章內(nèi)容。

          下載2:Python視覺實戰(zhàn)項目52講
          小白學(xué)視覺公眾號后臺回復(fù):Python視覺實戰(zhàn)項目,即可下載包括圖像分割、口罩檢測、車道線檢測、車輛計數(shù)、添加眼線、車牌識別、字符識別、情緒檢測、文本內(nèi)容提取、面部識別等31個視覺實戰(zhàn)項目,助力快速學(xué)校計算機(jī)視覺。

          下載3:OpenCV實戰(zhàn)項目20講
          小白學(xué)視覺公眾號后臺回復(fù):OpenCV實戰(zhàn)項目20講,即可下載含有20個基于OpenCV實現(xiàn)20個實戰(zhàn)項目,實現(xiàn)OpenCV學(xué)習(xí)進(jìn)階。

          交流群


          歡迎加入公眾號讀者群一起和同行交流,目前有SLAM、三維視覺、傳感器、自動駕駛、計算攝影、檢測、分割、識別、醫(yī)學(xué)影像、GAN算法競賽等微信群(以后會逐漸細(xì)分),請掃描下面微信號加群,備注:”昵稱+學(xué)校/公司+研究方向“,例如:”張三 + 上海交大 + 視覺SLAM“。請按照格式備注,否則不予通過。添加成功后會根據(jù)研究方向邀請進(jìn)入相關(guān)微信群。請勿在群內(nèi)發(fā)送廣告,否則會請出群,謝謝理解~


          瀏覽 31
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  无码狠狠躁久久久久久久网址 | 成人免费视频夜夜撸 | 欧美亚洲三区久久 | 欧美一级毛片免费高清老鸭窝 | 美性中文成人娱乐网 |