<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>

          CV中的Attention機(jī)制:簡單而有效的CBAM模塊

          共 5134字,需瀏覽 11分鐘

           ·

          2020-09-22 20:57

          ↑ 點(diǎn)擊藍(lán)字?關(guān)注極市平臺(tái)

          作者丨pprp
          來源丨GiantPandaCV
          編輯丨極市平臺(tái)

          極市導(dǎo)讀

          ?
          CBAM模塊由于其使用的廣泛性以及易于集成得到很多應(yīng)用。目前CV領(lǐng)域中的Attention機(jī)制也是在2019年論文中非?;稹_@篇CBAM雖然是在2018年提出的,但是其影響力比較深遠(yuǎn),在很多領(lǐng)域都用到了該模塊。>>加入極市CV技術(shù)交流群,走在計(jì)算機(jī)視覺的最前沿

          1. 什么是注意力機(jī)制?

          注意力機(jī)制(Attention Mechanism)是機(jī)器學(xué)習(xí)中的一種數(shù)據(jù)處理方法,廣泛應(yīng)用在自然語言處理、圖像識(shí)別及語音識(shí)別等各種不同類型的機(jī)器學(xué)習(xí)任務(wù)中。
          通俗來講:注意力機(jī)制就是希望網(wǎng)絡(luò)能夠自動(dòng)學(xué)出來圖片或者文字序列中的需要注意的地方。比如人眼在看一幅畫的時(shí)候,不會(huì)將注意力平等地分配給畫中的所有像素,而是將更多注意力分配給人們關(guān)注的地方。
          從實(shí)現(xiàn)的角度來講:注意力機(jī)制通過神經(jīng)網(wǎng)絡(luò)的操作生成一個(gè)掩碼mask, mask上的值一個(gè)打分,評(píng)價(jià)當(dāng)前需要關(guān)注的點(diǎn)的評(píng)分。
          注意力機(jī)制可以分為:
          • 通道注意力機(jī)制:對(duì)通道生成掩碼mask,進(jìn)行打分,代表是senet, Channel Attention Module
          • 空間注意力機(jī)制:對(duì)空間進(jìn)行掩碼的生成,進(jìn)行打分,代表是Spatial Attention Module
          • 混合域注意力機(jī)制:同時(shí)對(duì)通道注意力和空間注意力進(jìn)行評(píng)價(jià)打分,代表的有BAM, CBAM

          2. CBAM模塊的實(shí)現(xiàn)

          CBAM全稱是Convolutional Block Attention Module, 是在**ECCV2018**上發(fā)表的注意力機(jī)制代表作之一。本人在打比賽的時(shí)候遇見過有人使用過該模塊取得了第一名的好成績,證明了其有效性。
          在該論文中,作者研究了網(wǎng)絡(luò)架構(gòu)中的注意力,注意力不僅要告訴我們重點(diǎn)關(guān)注哪里,還要提高關(guān)注點(diǎn)的表示。目標(biāo)是通過使用注意機(jī)制來增加表現(xiàn)力,關(guān)注重要特征并抑制不必要的特征。為了強(qiáng)調(diào)空間和通道這兩個(gè)維度上的有意義特征,作者依次應(yīng)用通道和空間注意模塊,來分別在通道和空間維度上學(xué)習(xí)關(guān)注什么、在哪里關(guān)注。此外,通過了解要強(qiáng)調(diào)或抑制的信息也有助于網(wǎng)絡(luò)內(nèi)的信息流動(dòng)。
          主要網(wǎng)絡(luò)架構(gòu)也很簡單,一個(gè)是通道注意力模塊,另一個(gè)是空間注意力模塊,CBAM就是先后集成了通道注意力模塊和空間注意力模塊。

          2.1 通道注意力機(jī)制

          通道注意力機(jī)制按照上圖進(jìn)行實(shí)現(xiàn):
          class ChannelAttention(nn.Module): def __init__(self, in_planes, rotio=16): super(ChannelAttention, self).__init__() self.avg_pool = nn.AdaptiveAvgPool2d(1) self.max_pool = nn.AdaptiveMaxPool2d(1)
          self.sharedMLP = nn.Sequential( nn.Conv2d(in_planes, in_planes // ratio, 1, bias=False), nn.ReLU(), nn.Conv2d(in_planes // rotio, in_planes, 1, bias=False)) self.sigmoid = nn.Sigmoid()
          def forward(self, x): avgout = self.sharedMLP(self.avg_pool(x)) maxout = self.sharedMLP(self.max_pool(x)) return self.sigmoid(avgout + maxout)
          核心的部分Shared MLP使用了11卷積完成的,進(jìn)行信息的提取。需要注意的是,其中的bias需要人工設(shè)置為False。

          2.2 空間注意力機(jī)制

          空間注意力機(jī)制按照上圖進(jìn)行實(shí)現(xiàn):
          class SpatialAttention(nn.Module): def __init__(self, kernel_size=7): super(SpatialAttention, self).__init__() assert kernel_size in (3,7), "kernel size must be 3 or 7" padding = 3 if kernel_size == 7 else 1
          self.conv = nn.Conv2d(2,1,kernel_size, padding=padding, bias=False) self.sigmoid = nn.Sigmoid()
          def forward(self, x): avgout = torch.mean(x, dim=1, keepdim=True) maxout, _ = torch.max(x, dim=1, keepdim=True) x = torch.cat([avgout, maxout], dim=1) x = self.conv(x) return self.sigmoid(x)
          這個(gè)部分實(shí)現(xiàn)也很簡單,分別從通道維度進(jìn)行求平均和求最大,合并得到一個(gè)通道數(shù)為2的卷積層,然后通過一個(gè)卷積,得到了一個(gè)通道數(shù)為1的spatial attention。

          2.3 Convolutional bottleneck attention module

          class BasicBlock(nn.Module): expansion = 1 def __init__(self, inplanes, planes, stride=1, downsample=None): super(BasicBlock, self).__init__() self.conv1 = conv3x3(inplanes, planes, stride) self.bn1 = nn.BatchNorm2d(planes) self.relu = nn.ReLU(inplace=True) self.conv2 = conv3x3(planes, planes) self.bn2 = nn.BatchNorm2d(planes) self.ca = ChannelAttention(planes) self.sa = SpatialAttention() self.downsample = downsample self.stride = stride def forward(self, x): residual = x out = self.conv1(x) out = self.bn1(out) out = self.relu(out) out = self.conv2(out) out = self.bn2(out) out = self.ca(out) * out # 廣播機(jī)制 out = self.sa(out) * out # 廣播機(jī)制 if self.downsample is not None: residual = self.downsample(x) out += residual out = self.relu(out) return out
          最后的使用一個(gè)類進(jìn)行兩個(gè)模塊的集成,得到的通道注意力和空間注意力以后,使用廣播機(jī)制對(duì)原有的feature map進(jìn)行信息提煉,最終得到提煉后的feature map。以上代碼以ResNet中的模塊作為對(duì)象,實(shí)際運(yùn)用可以單獨(dú)將以下模塊融合到網(wǎng)絡(luò)中:
          class cbam(nn.Module): def __init__(self, planes): self.ca = ChannelAttention(planes)# planes是feature map的通道個(gè)數(shù) self.sa = SpatialAttention() def forward(self, x): x = self.ca(out) * x # 廣播機(jī)制 x = self.sa(out) * x # 廣播機(jī)制

          3. 在什么情況下可以使用?

          提出CBAM的作者主要對(duì)分類網(wǎng)絡(luò)和目標(biāo)檢測網(wǎng)絡(luò)進(jìn)行了實(shí)驗(yàn),證明了CBAM模塊確實(shí)是有效的。
          以ResNet為例,論文中提供了改造的示意圖,如下圖所示:
          也就是在ResNet中的每個(gè)block中添加了CBAM模塊,訓(xùn)練數(shù)據(jù)來自benchmark ImageNet-1K。檢測使用的是Faster R-CNN, Backbone選擇的ResNet34,ResNet50, WideResNet18, ResNeXt50等,還跟SE等進(jìn)行了對(duì)比。
          消融實(shí)驗(yàn):消融實(shí)驗(yàn)一般是控制變量,最能看出模型變好起作用的部分在那里。分為三個(gè)部分:
          1. 如何更有效地計(jì)算channel attention?
          可以看出來,使用avgpool和maxpool可以更好的降低錯(cuò)誤率,大概有1-2%的提升,這個(gè)組合就是dual pooling,能提供更加精細(xì)的信息,有利于提升模型的表現(xiàn)。
          1. 如何更有效地計(jì)算spatial attention?
          這里的空間注意力機(jī)制參數(shù)也是有avg, max組成,另外還有一個(gè)卷積的參數(shù)kernel_size(k), 通過以上實(shí)驗(yàn),可以看出,當(dāng)前使用通道的平均和通道的最大化,并且設(shè)置kernel size=7是最好的。
          1. 如何組織這兩個(gè)部分?
          可以看出,這里與SENet中的SE模塊也進(jìn)行了比較,這里使用CBAM也是超出了SE的表現(xiàn)。除此以外,還進(jìn)行了順序和并行的測試,發(fā)現(xiàn),先channel attention然后spatial attention效果最好,所以也是最終的CBAM模塊的組成。
          在MSCOCO數(shù)據(jù)及使用了ResNet50,ResNet101為backbone, Faster RCNN為檢測器的模型進(jìn)行目標(biāo)檢測,如下圖所示:
          在VOC2007數(shù)據(jù)集中采用了StairNet進(jìn)行了測試,如下圖所示:
          官方貌似沒有提供目標(biāo)檢測部分的代碼,CBAM的作用在于對(duì)信息進(jìn)行精細(xì)化分配和處理,所以猜測是在backbone的分類器之前添加的CBAM模塊,歡迎有研究的小伙伴留言。

          4. 參考

          CBAM arxiv link:
          https://arxiv.org/pdf/1807.06521.pdf
          核心代碼:
          https://github.com/pprp/SimpleCVReproduction/blob/master/attention/CBAM/cbam.py


          推薦閱讀


          添加極市小助手微信(ID : cvmart2),備注:姓名-學(xué)校/公司-研究方向-城市(如:小極-北大-目標(biāo)檢測-深圳),即可申請(qǐng)加入極市目標(biāo)檢測/圖像分割/工業(yè)檢測/人臉/醫(yī)學(xué)影像/3D/SLAM/自動(dòng)駕駛/超分辨率/姿態(tài)估計(jì)/ReID/GAN/圖像增強(qiáng)/OCR/視頻理解等技術(shù)交流群:月大咖直播分享、真實(shí)項(xiàng)目需求對(duì)接、求職內(nèi)推、算法競賽、干貨資訊匯總、與?10000+來自港科大、北大、清華、中科院、CMU、騰訊、百度等名校名企視覺開發(fā)者互動(dòng)交流~

          △長按添加極市小助手

          △長按關(guān)注極市平臺(tái),獲取最新CV干貨

          覺得有用麻煩給個(gè)在看啦~??
          瀏覽 45
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <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>
                  内射精品视频直播 | 日韩黄片大全亚卅久久… | 影音先锋成人在线资源站 | www.黄片视频 | 一区二区三区四区欧美精品 |