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 實現方式。還是很不錯的。

 

相關焦點

  • 人工智慧TensorFlow(十三)讀懂CNN卷積神經網絡
    TensorFlow神經網絡  那什麼是卷積神經網絡呢,這就要我們追溯一下人類識別圖像的原理  人類的視覺原理如下:從原始信號攝入開始(瞳孔攝入像素 Pixels),接著做初步處理(大腦皮層某些細胞發現邊緣和方向
  • 圖像識別技術——卷積神經網絡CNN詳解
    前言卷積神經網絡不同於神經網絡,在圖片處理這方面有更好的表現。本文主要對神經網絡和卷積神經網絡做了簡要的對比,著重介紹了卷積神經網絡的層次基礎,同時也簡要介紹了卷積神經網絡參數更新方式和其優缺點,並結合具體實例對卷積神經網絡的工作方式做了介紹。
  • 大話卷積神經網絡CNN,小白也能看懂的深度學習算法教程,全程乾貨...
    這個定義太大了,反而讓人有點不懂,簡答來說,深度學習就是通過多層神經網絡上運用各種機器學習算法學習樣本數據的內在規律和表示層次,從而實現各種任務的算法集合。各種任務都是啥,有:數據挖掘,計算機視覺,語音識別,自然語言處理等。可能有人會問那麼深度學習,機器學習還有人工智慧的關係是怎麼樣的呢?
  • 三種卷積神經網絡模型:Light-CNN,雙分支CNN和預先訓練的CNN
    打開APP 三種卷積神經網絡模型:Light-CNN,雙分支CNN和預先訓練的CNN 發表於 2020-04-17 10:55:01
  • 卷積神經網絡的卷積到底是什麼
    打開APP 卷積神經網絡的卷積到底是什麼 人工智慧遇見磐創 發表於 2020-05-05 08:40:00 卷積神經網絡是一種特殊的神經網絡結構,是自動駕駛汽車、人臉識別系統等計算機視覺應用的基礎,其中基本的矩陣乘法運算被卷積運算取代。
  • Facebook 發布 Detectron2:基於 PyTorch 的新一代目標檢測工具
    而 Detectron2 則是剛推出的新版 PyTorch 1.3 (詳情查看:https://www.leiphone.com/news/201910/9J4PTd833WMwdVoQ.html)中一重大新工具,它源於 maskrcnn 基準測試,但它卻是對先前版本 detectron 的一次徹底重寫。
  • 人工智慧之卷積神經網絡(CNN)
    今天我們重點探討一下卷積神經網絡(CNN)算法。  1980年,K.Fukushima提出的新識別機是卷積神經網絡的第一個實現網絡。隨後,更多的科研工作者對該網絡進行了改進。其中,具有代表性的研究成果是Alexander和Taylor提出的「改進認知機」,該方法綜合了各種改進方法的優點並避免了耗時的誤差反向傳播。
  • 卷積神經網絡預測模型:提前24個月預測ENSO
    通過不斷探索,研究團隊選取相對成熟的卷積神經網絡進行ENSO 預測。近年來,卷積神經網絡在多個方向得到應用,在語音識別、人臉識別、通用物體識別等方面均有突破。在人工智慧領域,它是比較成熟的方法,並且有很多的開源程序和網站,可以直接使用。「卷積神經網絡的優點是可以處理大量數據。其實,這既是優點,也是缺點。
  • 匯總 Pytorch 踩過的10個坑
    pytorch中的交叉熵pytorch的交叉熵nn.CrossEntropyLoss在訓練階段,裡面是內置了softmax操作的,因此只需要餵入原始的數據結果即可,不需要在之前再添加softmax層。關於retain_graph的使用在對一個損失進行反向傳播時,在pytorch中調用out.backward()即可實現,給個小例子如:import torchimport torch.nn as nnimport numpy as npclass net(nn.Module): def __init__(self)
  • 乾貨|語音識別框架最新進展——深度全序列卷積神經網絡登場
    目前最好的語音識別系統採用雙向長短時記憶網絡(LSTM,LongShort Term Memory),這種網絡能夠對語音的長時相關性進行建模,從而提高識別正確率。但是雙向LSTM網絡存在訓練複雜度高、解碼時延高的問題,尤其在工業界的實時識別系統中很難應用。因而科大訊飛使用深度全序列卷積神經網絡來克服雙向LSTM的缺陷。
  • 深度學習概述:NLP vs CNN
    現在,每家公司都希望在其系統中實現這一尖端技術,以降低成本、節省時間,並通過自動化使整個工作流程更加高效。最初的人工智慧和深度學習算法比較簡單,就像我們所知的簡單感知器模型和單層神經網絡一樣。隨著時間的推移和更加專注的研究,我們已經擁有了具有多層結構的複雜神經網絡。一些公司在他們的軟體和服務中使用了LSTMs、GANs、變分自編碼器等算法。
  • 華為開發者學院|卷積神經網絡與圖像處理,聽這一節課就夠了
    華為開發者學院特邀國內首本TensorFlow知名書籍作者鄭澤宇老師,帶您了解卷積神經網絡基本原理和基本的卷積神經網絡結構,介紹圖像分類和圖像識別的核心思路和基本算法,在直播間中,您可將當前在學習中遇到的難點和困惑與大咖講師鄭澤宇交流,通過大咖的解讀,帶給你學習的方法與捷徑。
  • PyTorch官方教程大更新:增加標籤索引,更加新手友好
    PyTorch官方教程大更新:增加標籤索引,更加新手友好 2020-05-17 19:08 來源:澎湃新聞·澎湃號·湃客
  • TensorFlow與PyTorch之爭,哪個框架最適合深度學習
    神經網絡起初是被用於解決手寫數字識別或用相機識別汽車註冊車牌等簡單的分類問題。但隨著近來框架的發展以及英偉達高計算性能圖形處理單元(GPU)的進步,我們可以在 TB 級的數據上訓練神經網絡並求解遠遠更加複雜的問題。一個值得提及的成就是在 TensorFlow 和 PyTorch 中實現的卷積神經網絡在 ImageNet 上都達到了當前最佳的表現。
  • 中科院計算所沈華偉:圖卷積神經網絡的思想起源
    智源社區 & AI科技評論作者 | 周寅張皓小到分子相互作用,物質結構,大至氣候變化,星系模型,很多自然界和社會生活中的現象都能用圖結構描述。而如何將神經網絡應用到圖網絡中進行計算,在幾年前卻是懸而未決的難題。
  • 人工智慧TensorFlow(十五)CNN 結構(代碼實現)
    MNIST  通過上期的分享,我們了解了手寫數字識別的基本原理以及CNN卷積神經網絡的基本原理,本期我們結合MNIST數據集,來用代碼來實現CNN。h_conv2d1 = conv2d(x_image, W_convl) + b_convlh_conv1 = tf.nn.relu(h_conv2d1) # output size 28*28*32h_pool1 = max_pool_2x2(h_conv1) # output size 14*14*32  9、
  • NeurIPS 2020線上分享 | 華為諾亞方舟:超越CNN的加法神經網絡
    具有大量可學習參數和乘法運算的卷積神經網絡(CNN)在圖像分類、目標檢測、語義分割和低級圖像任務中表現出了卓越的性能,但由此帶來的功耗過大問題限制了 CNN 在手機和相機等可攜式設備上的應用。所以,近來的一些研究著力探索降低計算成本的高效方法。
  • Siamese network 孿生神經網絡:一個簡單神奇的結構
    孿生神經網絡大家可能會有疑問:共享權值是什麼意思?左右兩個神經網絡的權重一模一樣?答:是的,在代碼實現的時候,甚至可以是同一個網絡,不用實現另外一個,因為權值都一樣。對於siamese network,兩邊可以是lstm或者cnn,都可以。大家可能還有疑問:如果左右兩邊不共享權值,而是兩個不同的神經網絡,叫什麼呢?答:pseudo-siamese network,偽孿生神經網絡,如下圖所示。
  • 476個PyTorch資源大合集推薦,GitHub超過3600星
    乾明 編輯整理 量子位 報導 | 公眾號 QbitAI最近,GitHub的「趨勢」版塊出現了一份PyTorch資源,內容從庫到教程再到論文實現
  • 深度學習資訊|用於人體動作識別的26層卷積神經網絡
    諸如卷積神經網絡(CNN)之類的深度學習算法已在各種任務上取得了顯著成果,包括那些涉及識別圖像中特定人物或物體的任務。基於視覺的人類動作識別(HAR)是計算機科學家經常嘗試使用深度學習解決的任務,它特別需要識別圖像或視頻中捕獲的人類動作。