9大主題卷積神經網絡(CNN)的PyTorch實現

2020-12-22 TechWeb

大家還記得這張圖嗎?

深度系統介紹了 52 個目標檢測模型,縱觀 2013 年到 2020 年,從最早的 R-CNN、OverFeat 到後來的 SSD、YOLO v3 再到去年的 M2Det,新模型層出不窮,性能也越來越好!

上文聚焦於源碼和論文,對於各種卷積神經網絡模型的實現,本文將介紹它們的 PyTorch 實現,非常有用!

這份資源已經開源在了 GitHub 上,連結如下:

https://github.com/shanglianlm0525/PyTorch-Networks

先來個總結介紹,該系列的卷積神經網絡實現包含了 9 大主題,目錄如下:

1. 典型網絡

2. 輕量級網絡

3. 目標檢測網絡

4. 語義分割網絡

5. 實例分割網絡

6. 人臉檢測和識別網絡

7. 人體姿態識別網絡

8. 注意力機制網絡

9. 人像分割網絡

下面具體來看一下:

1. 典型網絡(Classical network)

典型的卷積神經網絡包括:AlexNet、VGG、ResNet、InceptionV1、InceptionV2、InceptionV3、InceptionV4、Inception-ResNet。

以 AlexNet 網絡為例,AlexNet 是 2012 年 ImageNet 競賽冠軍獲得者 Hinton 和他的學生 Alex Krizhevsky 設計的。AlexNet 中包含了幾個比較新的技術點,也首次在 CNN 中成功應用了 ReLU、Dropout 和 LRN 等 Trick。同時 AlexNet 也使用了 GPU 進行運算加速。

AlexNet 網絡結構的 PyTorch 實現方式如下:

import torch  import torch.nn as nn  def Conv3x3BNReLU(in_channels,out_channels,stride,padding=1):      return nn.Sequential(              nn.Conv2d(in_channelsin_channels=in_channels, out_channelsout_channels=out_channels, kernel_size=3, stridestride=stride, padding=1),              nn.BatchNorm2d(out_channels),              nn.ReLU6(inplace=True)         )  def Conv1x1BNReLU(in_channels,out_channels):      return nn.Sequential(              nn.Conv2d(in_channelsin_channels=in_channels, out_channelsout_channels=out_channels, kernel_size=1, stride=1, padding=0),              nn.BatchNorm2d(out_channels),              nn.ReLU6(inplace=True)          )  def ConvBNReLU(in_channels,out_channels,kernel_size,stride,padding=1):      return nn.Sequential(             nn.Conv2d(in_channelsin_channels=in_channels, out_channelsout_channels=out_channels, kernel_sizekernel_size=kernel_size, stridestride=stride, paddingpadding=padding),             nn.BatchNorm2d(out_channels),              nn.ReLU6(inplace=True)          )  def ConvBN(in_channels,out_channels,kernel_size,stride,padding=1):      return nn.Sequential(              nn.Conv2d(in_channelsin_channels=in_channels, out_channelsout_channels=out_channels, kernel_sizekernel_size=kernel_size, stridestride=stride, paddingpadding=padding),             nn.BatchNorm2d(out_channels)          )  class ResidualBlock(nn.Module):      def __init__(self, in_channels, out_channels):          super(ResidualBlock, self).__init__()          mid_channels = out_channels//2          self.bottleneck = nn.Sequential(              ConvBNReLU(in_channelsin_channels=in_channels, out_channels=mid_channels, kernel_size=1, stride=1),              ConvBNReLU(in_channels=mid_channels, out_channels=mid_channels, kernel_size=3, stride=1, padding=1),              ConvBNReLU(in_channels=mid_channels, out_channelsout_channels=out_channels, kernel_size=1, stride=1),          )          self.shortcut = ConvBNReLU(in_channelsin_channels=in_channels, out_channelsout_channels=out_channels, kernel_size=1, stride=1)      def forward(self, x):          out = self.bottleneck(x)          return out+self.shortcut(x) 

2.輕量級網絡(Lightweight)

輕量級網絡包括:GhostNet、MobileNets、MobileNetV2、MobileNetV3、ShuffleNet、ShuffleNet V2、SqueezeNet Xception MixNet GhostNet。

以 GhostNet 為例,同樣精度,速度和計算量均少於此前 SOTA 算法。GhostNet 的核心是 Ghost 模塊,與普通卷積神經網絡相比,在不更改輸出特徵圖大小的情況下,其所需的參數總數和計算複雜度均已降低,而且即插即用。

GhostNet 網絡結構的 PyTorch 實現方式如下:

https://github.com/shanglianlm0525/PyTorch-Networks/blob/master/Lightweight/GhostNet.py

3. 目標檢測網絡(ObjectDetection)

目標檢測網絡包括:SSD、YOLO、YOLOv2、YOLOv3、FCOS、FPN、RetinaNet Objects as Points、FSAF、CenterNet FoveaBox。

以 YOLO 系列為例,YOLO(You Only Look Once)是一種基於深度神經網絡的對象識別和定位算法,其最大的特點是運行速度很快,可以用於實時系統。目前 YOLOv3 應用比較多。

YOLOV3 網絡結構的 PyTorch 實現方式如下:

https://github.com/shanglianlm0525/PyTorch-Networks/blob/master/ObjectDetection/YOLOv3.py

4. 語義分割網絡(SemanticSegmentation)

語義分割網絡包括:FCN、Fast-SCNN、LEDNet、LRNNet、FisheyeMODNet。

以 FCN 為例,FCN 誕生於 2014 的語義分割模型先驅,主要貢獻為在語義分割問題中推廣使用端對端卷積神經網絡,使用反卷積進行上採樣。FCN 模型非常簡單,裡面全部是由卷積構成的,所以被稱為全卷積網絡,同時由於全卷積的特殊形式,因此可以接受任意大小的輸入。

FCN 網絡結構的 PyTorch 實現方式如下:

https://github.com/shanglianlm0525/PyTorch-Networks/blob/master/SemanticSegmentation/FCN.py

5. 實例分割網絡(InstanceSegmentation)

實例分割網絡包括:PolarMask。

6. 人臉檢測和識別網絡(commit VarGFaceNet)

人臉檢測和識別網絡包括:FaceBoxes、LFFD、VarGFaceNet。

7. 人體姿態識別網絡(HumanPoseEstimation)

人體姿態識別網絡包括:Stacked Hourglass、Networks Simple Baselines、LPN。

8. 注意力機制網絡

注意力機制網絡包括:SE Net、scSE、NL Net、GCNet、CBAM。

9. 人像分割網絡(PortraitSegmentation)

人像分割網絡包括:SINet。

綜上,該 GitHub 開源項目展示了近些年來主流的 9 大類卷積神經網絡,總共包含了幾十種具體的網絡結構。其中每個網絡結構都有 PyTorch 實現方式。還是很不錯的。

 

相關焦點

  • 9 大主題卷積神經網絡(CNN)的 PyTorch 實現
    本文將介紹它們的 PyTorch 實現,非常有用!這份資源已經開源在了 GitHub 上,連結如下:https://github.com/shanglianlm0525/PyTorch-Networks先來個總結介紹,該系列的卷積神經網絡實現包含了 9 大主題,目錄如下:1.
  • CNN卷積神經網絡實例(基於pytorch)
    1.關於卷積神經網絡卷積神經網絡(Convolutional Neural Network,CNN) 是一種具有局部連接、權重共享等特徵的深層前饋神經網絡
  • pytorch學習筆記(2):在 MNIST 上實現一個 cnn
    接下來進入正文吧~gogogo這篇筆記的內容包含三個部分:讀取 pytorch 自帶的數據集並分割;實現一個 CNN 的網絡結構;完成訓練。這三個部分合起來完成了一個簡單的淺層卷積神經網絡,在 MNIST 上進行訓練和測試。1.
  • 【乾貨】基於pytorch的CNN、LSTM神經網絡模型調參小結
    的結合還有多層多通道CNN、LSTM、BiLSTM等多個神經網絡模型的的實現。Demo Site:  https://github.com/bamtercelboo/cnn-lstm-bilstm-deepcnn-clstm-in-pytorchPytorch是一個較新的深度學習框架,是一個 Python 優先的深度學習框架,能夠在強大的 GPU 加速基礎上實現張量和動態神經網絡。
  • 深度學習100+經典模型TensorFlow與Pytorch代碼實現大集合
    ,如何選擇合適的實現,是個選擇。rasbt在Github上整理了關於深度學習模型TensorFlow和Pytorch代碼實現集合,含有100個,各種各樣的深度學習架構,模型,和技巧的集合Jupyter Notebooks,從基礎的邏輯回歸到神經網絡到CNN到GNN等,可謂一網打盡,值得收藏!
  • 輕鬆學pytorch-構建卷積神經網絡
    大家好,這個是我的pytorch學習筆記第三篇,主要是使用pytorch來構建一個簡單的卷積神經網絡,完成mnist手寫字符識別。涉及到主要知識點是如何使用torch.nn.Module這個基類來實現一個網絡結構定義。這個基類中最重要的是實現自己的forward方法,這個也是自定義網絡結構的實現方法。
  • 從零開始實現卷積神經網絡CNN
    而卷積神經網絡能夠應對這種問題,因為它有參數共享架構及平移不變特性,因此CNN又被稱為位移不變或者空間不變人工神經網絡(SIANN,Shift Invariant Artificial Neural Networks)。 本文將以圖像識別與分類為例,從零開始使用python實現一個卷積神經網絡,以加深大家對卷積神經網絡的理解。
  • 卷積神經網絡算法的一個實現
    目前實現的CNN在MINIT數據集上效果還不錯,但是還有一些bug,因為最近比較忙,先把之前做的總結一下,以後再繼續優化。卷積神經網絡CNN是Deep Learning的一個重要算法,在很多應用上表現出卓越的效果,[1]中對比多重算法在文檔字符識別的效果,結論是CNN優於其他所有的算法。CNN在手寫體識別取得最好的效果,[2]將CNN應用在基於人臉的性別識別,效果也非常不錯。
  • 庫、教程、論文實現,這是一份超全的PyTorch資源列表(Github 2.2K星)
    項目地址:https://github.com/longcw/RoIAlign.pytorch10.pytorch-cnn-finetune:PyTorch 實現的微調預訓練卷積神經網絡。地址:https://github.com/vinhkhuc/PyTorch-Mini-Tutorials9.pytorch text classification:基於文本分類任務的簡單 CNN 實現。
  • Matlab編程之——卷積神經網絡CNN代碼解析
    deepLearnToolbox-master是一個深度學習matlab包,裡面含有很多機器學習算法,如卷積神經網絡CNN,深度信念網絡DBN,
  • Github 2.2K星的超全PyTorch資源列表
    項目地址:https://github.com/longcw/RoIAlign.pytorch10.pytorch-cnn-finetune:PyTorch 實現的微調預訓練卷積神經網絡。地址:https://github.com/vinhkhuc/PyTorch-Mini-Tutorials9.pytorch text classification:基於文本分類任務的簡單 CNN 實現。
  • 數據分析之道|CNN卷積神經網絡之文本分類
    卷積神經網絡(Convolutional Neural Networks, CNN)
  • 卷積神經網絡(CNN)綜述
    卷積神經網絡概念2. 卷積神經網絡的特點   2.1 局部區域連接   2.2 權值共享   2.3 降採樣3. 卷積神經網絡的結構   3.1 卷積層   3.2 池化層4. 卷積神經網絡的研究進展1.
  • 【深度學習】卷積神經網絡-CNN簡單理論介紹
    當然,這裡默認讀者對神經網絡有一定的了解和認識,如果有疑問可留言,本文也不介紹太多關於數學的內容,以便於讀者理解,如有需要後期更新相關數學推導。1 卷積神經網絡簡介通常有:當然也還包括神經網絡常用的激活層,正則化層等。
  • 教程 | 基於Matlab的卷積神經網絡(CNN)
    原文連結:https://blog.csdn.net/walegahaha/article/details/51603040原文標題:卷積神經網絡
  • CNN原理與實踐指南
    本文對CNN的基礎原理及常見的CNN網絡進行了詳細解讀,並介紹了Pytorch構建深度網絡的流程。最後,以阿里天池零基礎入門CV賽事為學習實踐,對Pytorch構建CNN模型進行實現。4. 卷積神經網絡理解因此卷積、ReLu、pooling,不斷重複其實也就基本上構成了卷積神經網絡的框架,如圖8。然後將最終得到的feaure map 排成一列(圖8),接到全連接層,這樣就形成了我們的卷積神經網絡。值得注意的是,排成一列的數值,是有權重,而這些權重是通過訓練、反向傳播得到的,通過權重的計算,可以知道不同分類的概率是怎麼樣的。
  • CNN 原理與實踐指南
    本文對CNN的基礎原理及常見的CNN網絡進行了詳細解讀,並介紹了Pytorch構建深度網絡的流程。最後,以阿里天池零基礎入門CV賽事為學習實踐,對Pytorch構建CNN模型進行實現。4. 卷積神經網絡理解因此卷積、ReLu、pooling,不斷重複其實也就基本上構成了卷積神經網絡的框架,如圖8。然後將最終得到的feaure map 排成一列(圖8),接到全連接層,這樣就形成了我們的卷積神經網絡。值得注意的是,排成一列的數值,是有權重,而這些權重是通過訓練、反向傳播得到的,通過權重的計算,可以知道不同分類的概率是怎麼樣的。
  • 卷積神經網絡(CNN)新手指南
    這些特徵的類型可能是半圓(曲線和直線邊緣的組合)或方形(幾個直邊的組合)。當通過網絡、更多的卷積層,可以激活地圖,代表更多和更複雜的特徵。在神經網絡的結束,可能有一些激活的過濾器,表示其在圖像中看到手寫字跡或者粉紅色的物體時等等。另一個有趣的事情是當你在網絡往更深的地方探索時,過濾器開始有越來越大的接受場,這意味著他們能夠從一個更大的區域或者更多的原始輸入量接收信息。
  • 用於圖像分割的卷積神經網絡:從R-CNN到Mask R-CNN
    選自Athelas作者:Dhruv Parthasarathy機器之心編譯參與:王宇欣、hustcxy、黃小天卷積神經網絡(CNN)的作用遠不止分類那麼簡單!在本文中,我們將看到卷積神經網絡(CNN)如何在圖像實例分割任務中提升其結果。