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

          輕松學(xué)Pytorch – 全局池化層詳解

          共 3107字,需瀏覽 7分鐘

           ·

          2022-06-01 11:00

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

          重磅干貨,第一時間送達

          大家好,這是輕松學(xué)Pytorch系列的第九篇分享,本篇你將學(xué)會什么是全局池化,全局池化的幾種典型方式與pytorch相關(guān)函數(shù)調(diào)用。

          ?

          全局池化


          卷積神經(jīng)網(wǎng)絡(luò)可以解決回歸跟分類問題,但是常見的卷積神經(jīng)網(wǎng)絡(luò)到最后都要通過全連接層實現(xiàn)分類,這個其實會導(dǎo)致很多時候神經(jīng)元數(shù)目跟計算量在全連接層暴增,特別對一些回歸要求比較高的網(wǎng)絡(luò)往往會帶來一些后遺癥。所以陸陸續(xù)續(xù)有人提出了不同全連接層解決方案,最常見的兩個就是把最后卷積層flatten改為全局最大/均值池化,對比一下這兩種方式,圖示如下:

          可以看到全局池化會根據(jù)需要產(chǎn)生神經(jīng)元,神經(jīng)元個數(shù)可控,可調(diào)。而flatten方式就是一個硬鏈接,無法在flatten的時候調(diào)整鏈接數(shù)目。全局均值池化輸出最常見的做法是把每個通道feature map輸出一個神經(jīng)元(均值結(jié)果輸出),圖示如下:

          全局最大池化圖示如下,它是取每個feature map的最大值:

          全局均值池化跟全局最大池化的輸入一般為NxCxHxW,輸出為NxCx1x1但是實際上有時候我們還會有另外一個需求,就是全局深度池化,它的輸出是Nx1xHxW。這個方式的池化通常會先把數(shù)據(jù)轉(zhuǎn)換為NxH*WxC的方式,然后使用一維度最大/均值池化在C上完成,最后在轉(zhuǎn)換為Nx1xHxW即可。了解常見幾種全局池化方式之后,下面就來一起看看Pytorch中支持的相關(guān)函數(shù)。

          ?

          Pytorch全局池化函數(shù)與代碼演示


          Pytorch函數(shù)支持全局最大池化與均值池化,相關(guān)函數(shù)分別為:

          全局最大池化

          torch.nn.AdaptiveMaxPool2d(output_size, return_indices=False)


          全局均值池化

          torch.nn.AdaptiveAvgPool2d(output_size)


          其中output_size表示輸出HxW正常設(shè)為HxW=1x1=(1, 1)。代碼演示如下:

          # 全局均值池化 avg_pooling = torch.nn.AdaptiveAvgPool2d((1,1)) B, C, H, W = input.size() output = avg_pooling(input).view(B, -1) print("全局均值池化:", output.size()) print(output, "\n")
          # 全局最大池化 avg_pooling = torch.nn.AdaptiveMaxPool2d((1, 1)) B, C, H, W = input.size() output = avg_pooling(input).view(B, -1) print("全局最大池化:", output.size()) print(output, "\n")


          輸入為NxCxHxW=1x8x4x4輸出結(jié)果如下:

          但是pytorch中沒有全局深度池化函數(shù)支持,這個是我在寫一個程序時候才發(fā)現(xiàn),后來經(jīng)過一番折騰,在別人代碼的基礎(chǔ)上我改寫了一個符合我要求的全局深度池化函數(shù)。經(jīng)過測試工作良好。演示如下:

          class DeepWise_Pool(torch.nn.MaxPool1d):     def __init__(self, channels, isize):         super(DeepWise_Pool, self).__init__(channels)         self.kernel_size = channels         self.stride = isize
          def forward(self, input): n, c, w, h = input.size() input = input.view(n,c,w*h).permute(0,2,1) pooled = torch.nn.functional.max_pool1d(input, self.kernel_size, self.stride, self.padding, self.dilation, self.ceil_mode, self.return_indices) _, _, c = pooled.size() pooled = pooled.permute(0,2,1) return pooled.view(n,c,w,h).view(w, h)

          input = torch.randn(1, 8, 4, 4) print("input data:/n", input) print("input data:", input.size()) B, C, W, H = input.size() dw_max_pool = DeepWise_Pool(C, W*H) output = dw_max_pool(input) print("全局深度池化:", output.view(-1, 16).size()) print(output, "\n")


          針對輸入為NxCxHxW=1x8x4x4深度最大池化運行結(jié)果如下:

          ?

          全局池化優(yōu)點


          關(guān)于使用GAP或者全局池化的好處,卷積神經(jīng)網(wǎng)絡(luò)在圖像分類中,把卷積層作為特征提取,全鏈接層+softmax作為歸回分類,這樣方式會導(dǎo)致在全連接層輸入神經(jīng)元太多容易導(dǎo)致過擬合,所以Hinton等人提出了Dropout概念,提高網(wǎng)絡(luò)泛化能力防止了過擬合發(fā)生。但是GAP是另外方式避免全連接層的處理,直接通過全局池化+softmax進行分類,它的優(yōu)點是更加符合卷積層最后的處理,另外一個優(yōu)點是GAP不會產(chǎn)生額外的參數(shù),相比全連接層的處理方式,降低整個計算量,此外全局池化還部分保留來輸入圖像的空間結(jié)構(gòu)信息,所以全局池化在有些時候會是一個特別有用的選擇。更多請讀該論文:

          https://arxiv.org/pdf/1312.4400.pdf

          好消息!?

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

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




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

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

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

          交流群


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


          瀏覽 152
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

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

          手機掃一掃分享

          分享
          舉報
          <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>
                  看一级片视频 | 亚洲天堂无码播放 | 欧美猛男操欧美美女 | 欧美1区 日本A∨ 色婷婷色 | 黄色免费网站在线观看 |