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

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

 

相關焦點

  • PyTorch實現TPU版本CNN模型
    為此,PyTorch一直在通過提供最先進的硬體加速器來支持機器學習的實現。PyTorch對雲TPU的支持是通過與XLA(加速線性代數)的集成實現的,XLA是一種用於線性代數的編譯器,可以針對多種類型的硬體,包括CPU、GPU和TPU。本文演示了如何使用PyTorch和TPU實現深度學習模型,以加快訓練過程。
  • PyTorch可視化理解卷積神經網絡
    如今,機器已經能夠在理解、識別圖像中的特徵和對象等領域實現99%級別的準確率。生活中,我們每天都會運用到這一點,比如,智慧型手機拍照的時候能夠識別臉部、在類似於谷歌搜圖中搜索特定照片、從條形碼掃描文本或掃描書籍等。造就機器能夠獲得在這些視覺方面取得優異性能可能是源於一種特定類型的神經網絡——卷積神經網絡(CNN)。
  • 從R-CNN到YOLO,一文帶你了解目標檢測模型(附論文下載)
    大數據文摘作品編譯:Yanruo、小魚這是一份詳細介紹了目標檢測的相關經典論文、學習筆記、和代碼示例的清單,想要入坑目標檢測的同學可以收藏了!在大數據文摘後臺回復「目標檢測」可打包下載全部論文~R-CNNR-CNN是2014年出現的。
  • 卷積神經網絡(CNN)新手指南
    當通過網絡、更多的卷積層,可以激活地圖,代表更多和更複雜的特徵。在神經網絡的結束,可能有一些激活的過濾器,表示其在圖像中看到手寫字跡或者粉紅色的物體時等等。另一個有趣的事情是當你在網絡往更深的地方探索時,過濾器開始有越來越大的接受場,這意味著他們能夠從一個更大的區域或者更多的原始輸入量接收信息。
  • DenseNet——CNN經典網絡模型詳解(pytorch實現)
    DenseNet——CNN經典網絡模型詳解(pytorch實現)一個CV小白,寫文章目的為了讓和我意義的小白輕鬆如何,讓大佬鞏固基礎(手動狗頭),大家有任何問題可以一起在評論區留言討論~一、概述論文:Densely Connected Convolutional Networks 論文連結:https://arxiv.org/pdf
  • 卷積神經網絡(CNN)介紹與實踐
    - 來源:http://cs231n.github.io/classification/為了「教會」一種算法如何識別圖像中的對象,我們使用特定類型的人工神經網絡:卷積神經網絡(CNN)。他們的名字源於網絡中最重要的一個操作:卷積。卷積神經網絡受到大腦的啟發。
  • 給卷積神經網絡動動刀:加法網絡探究
    卷積神經網絡(CNN)在計算機視覺任務中有著廣泛的應用,然而它的運算量非常巨大,這使得我們很難將CNN直接運用到計算資源受限的行動裝置上。為了減少CNN的計算代價,許多模型壓縮和加速的方法被提出。由於訓練和測試的代碼以及網絡結構的代碼和正常的卷積神經網絡一樣,這裡我們不對它們做解析,我們主要解讀定義adder算子的adder.py文件。adder.py中共含有兩個類和一個函數,兩個類分別是adder2d和adder,一個函數為adder2d_function。我們首先來看adder2d這個類。
  • ResNet——CNN經典網絡模型詳解(pytorch實現)
    ResNet的結構可以極快的加速神經網絡的訓練,模型的準確率也有比較大的提升。同時ResNet的推廣性非常好,甚至可以直接用到InceptionNet網絡中。下圖是ResNet34層模型的結構簡圖。2、ResNet詳解在ResNet網絡中有如下幾個亮點:提出residual結構(殘差結構),並搭建超深的網絡結構(突破1000層)使用Batch Normalization加速訓練(丟棄dropout)在ResNet網絡提出之前,傳統的卷積神經網絡都是通過將一系列卷積層與下採樣層進行堆疊得到的。但是當堆疊到一定網絡深度時,就會出現兩個問題。
  • 應用豐富的「卷積神經網絡」技術,怎樣實現了圖像識別?
    (原標題:應用豐富的「卷積神經網絡」技術,怎樣實現了圖像識別?)圖像識別的其他應用還包括——照片和視頻網站、互動營銷、創意活動、社交網絡上的面部及圖像識別,以及龐大數據集下的網絡圖像分類等。圖像識別是一項相當困難的任務圖像識別並不是一件容易的事,實現它的一種好辦法是將元數據應用於非結構化的數據。
  • 13個算法工程師必須掌握的PyTorch Tricks
    指定GPU的命令需要放在和神經網絡相關的一系列操作的前面。2、查看模型每層輸出詳情Keras有一個簡潔的API來查看模型的每一層輸出尺寸,這在調試網絡時非常有用。現在在PyTorch中也可以實現這個功能。
  • 雲計算學習:用PyTorch實現一個簡單的分類器
    回想了一下自己關於 pytorch 的學習路線,一開始找的各種資料,寫下來都能跑,但是卻沒有給自己體會到學習的過程。有的教程一上來就是寫一個 cnn,雖然其實內容很簡單,但是直接上手容易讓人找不到重點,學的雲裡霧裡。有的教程又淺嘗輒止,師傅領到了門檻跟前,總感覺自己還沒有進門,教程就結束了。
  • Mask R-CNN官方實現「又」來了!基於PyTorch,訓練速度是原來2倍
    曉查 發自 凹非寺量子位 報導 | 公眾號 QbitAI來自官方的Mask R-CNN實現終於「又」來了!PyTorch官方Twitter今天公布了一個名為Mask R-CNN Benchmark的項目。10個月前Facebook曾發布過名叫Detecron的項目,也是一款圖像分割與識別平臺,其中也包含Mask R-CNN。
  • 大話卷積神經網絡CNN,小白也能看懂的深度學習算法教程,全程乾貨...
    這個定義太大了,反而讓人有點不懂,簡答來說,深度學習就是通過多層神經網絡上運用各種機器學習算法學習樣本數據的內在規律和表示層次,從而實現各種任務的算法集合。各種任務都是啥,有:數據挖掘,計算機視覺,語音識別,自然語言處理等。可能有人會問那麼深度學習,機器學習還有人工智慧的關係是怎麼樣的呢?
  • 在多目標識別方面,maskr-cnn已經取得了一些進展
    maskr-cnn是業界首款實用的全卷積神經網絡模型,為計算機視覺中的多目標識別與自動對焦,開創性的成為計算機視覺發展的新方向。無論是基於計算機視覺的自動對焦系統、模式識別系統,還是圖像識別,maskr-cnn都是有標誌性意義的。它強調平滑準確的計算輸入、檢測框和定位點,訓練過程與特徵提取過程採用多級感受野融合技術進行自動優化提高目標解析度及精度,以及做出精度更高的語義推理判斷。
  • 《PyTorch中文手冊》來了
    PyTorch 是一個深度學習框架,旨在實現簡單靈活的實驗。自 2017 年初首次推出,PyTorch 很快成為 AI 研究人員的熱門選擇並受到推崇。PyTorch 1.0 增加了一系列強大的新功能,大有趕超深度學習框架老大哥 TensorFlow 之勢。因此,學習 PyTorch 大有裨益!
  • 圖像識別技術——卷積神經網絡CNN詳解
    前言卷積神經網絡不同於神經網絡,在圖片處理這方面有更好的表現。本文主要對神經網絡和卷積神經網絡做了簡要的對比,著重介紹了卷積神經網絡的層次基礎,同時也簡要介紹了卷積神經網絡參數更新方式和其優缺點,並結合具體實例對卷積神經網絡的工作方式做了介紹。
  • 自注意力可以替代CNN,能表達任何卷積濾波層
    卷積層卷積神經網絡由多個卷積層和子採樣層組成。每個卷積層可以學習大小為K x K的卷積濾波器,輸入和輸出的維度分別是Din和Dout。用一個4D核張量(維度為K x K x Din x Dout)和一個偏置向量b(維度為Dout)來對層進行參數化。下面這張動圖便展示了如何計算q的輸出值。
  • 如何在PyTorch和TensorFlow中訓練圖像分類模型
    然後,我們將使用MNIST手寫數字分類數據集,並在PyTorch和TensorFlow中使用CNN(卷積神經網絡)建立圖像分類模型。這將是你的起點,然後你可以選擇自己喜歡的任何框架,也可以開始構建其他計算機視覺模型。
  • CNN卷積神經網絡(超詳解析)
    1、神經網絡首先了解神經網絡,大家移步這倆篇博客,一篇為純理論,一篇為實戰加理論。機器學習之神經網絡學習及其模型入門講解:使用numpy實現簡單的神經網絡(BP算法)2、卷積神經網絡之層級結構cs231n課程裡給出了卷積神經網絡各個層級結構,如下圖上圖中CNN要做的事情是:給定一張圖片,是車還是馬未知,是什麼車也未知,現在需要模型判斷這張圖片裡具體是一個什麼東西,總之輸出一個結果:如果是車那是什麼車所以最左邊是數據輸入層
  • 卷積神經網絡中的參數共享/權重複制
    但是了解這個簡單的概念有助於更廣泛地理解卷積神經網絡的內部。卷積神經網絡(cnn)能夠使那些通過網絡饋送的圖像在進行仿射變換時具有不變性。 這個特點提供了識別偏移圖案、識別傾斜或輕微扭曲的圖像的能力。仿射不變性的這些特徵是由於CNN架構的三個主要屬性而引入的。