9大主题卷积神经网络(CNN)的PyTorch实现

人工智能 深度学习
对于各种卷积神经网络模型的实现,本文将介绍它们的 PyTorch 实现,非常有用!

大家还记得这张图吗?

深度系统介绍了 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 实现方式如下: 

  1. import torch  
  2. import torch.nn as nn  
  3. def Conv3x3BNReLU(in_channels,out_channels,stride,padding=1):  
  4.     return nn.Sequential(  
  5.             nn.Conv2d(in_channelsin_channels=in_channels, out_channelsout_channels=out_channels, kernel_size=3stridestride=stride, padding=1),  
  6.             nn.BatchNorm2d(out_channels),  
  7.             nn.ReLU6(inplace=True
  8.         )  
  9. def Conv1x1BNReLU(in_channels,out_channels):  
  10.     return nn.Sequential(  
  11.             nn.Conv2d(in_channelsin_channels=in_channels, out_channelsout_channels=out_channels, kernel_size=1stride=1padding=0),  
  12.             nn.BatchNorm2d(out_channels),  
  13.             nn.ReLU6(inplace=True 
  14.         )  
  15. def ConvBNReLU(in_channels,out_channels,kernel_size,stride,padding=1):  
  16.     return nn.Sequential( 
  17.             nn.Conv2d(in_channelsin_channels=in_channels, out_channelsout_channels=out_channels, kernel_sizekernel_size=kernel_size, stridestride=stride, paddingpadding=padding), 
  18.             nn.BatchNorm2d(out_channels),  
  19.             nn.ReLU6(inplace=True 
  20.         )  
  21. def ConvBN(in_channels,out_channels,kernel_size,stride,padding=1):  
  22.     return nn.Sequential(  
  23.             nn.Conv2d(in_channelsin_channels=in_channels, out_channelsout_channels=out_channels, kernel_sizekernel_size=kernel_size, stridestride=stride, paddingpadding=padding), 
  24.             nn.BatchNorm2d(out_channels)  
  25.         )  
  26. class ResidualBlock(nn.Module):  
  27.     def __init__(self, in_channels, out_channels):  
  28.         super(ResidualBlock, self).__init__()  
  29.         mid_channels = out_channels//2  
  30.         self.bottleneck = nn.Sequential(  
  31.             ConvBNReLU(in_channelsin_channels=in_channels, out_channels=mid_channelskernel_size=1stride=1),  
  32.             ConvBNReLU(in_channels=mid_channelsout_channels=mid_channelskernel_size=3stride=1padding=1),  
  33.             ConvBNReLU(in_channels=mid_channelsout_channelsout_channels=out_channels, kernel_size=1stride=1),  
  34.         )  
  35.         self.shortcut = ConvBNReLU(in_channelsin_channels=in_channels, out_channelsout_channels=out_channels, kernel_size=1stride=1 
  36.     def forward(self, x):  
  37.         out = self.bottleneck(x)  
  38.         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 实现方式。还是很不错的。 

 

责任编辑:庞桂玉 来源: 深度学习这件小事
相关推荐

2017-05-04 18:30:34

大数据卷积神经网络

2021-06-29 09:53:06

神经网络数据图形

2016-12-20 09:55:52

卷积神经网络无人驾驶

2021-06-22 09:46:52

神经网络人工智能深度学习

2022-04-07 09:01:52

神经网络人工智能

2017-04-26 08:31:10

神经网络自然语言PyTorch

2017-04-24 23:46:40

卷积神经网络图像R-CNN

2018-04-03 14:42:46

Python神经网络深度学习

2020-12-19 11:05:57

循环神经网络PyTorch神经网络

2024-07-04 08:23:55

2019-01-05 08:40:17

VGG神经网络

2018-06-15 07:10:57

CNN神经网络视觉系统

2019-06-03 13:10:30

神经网络机器学习人工智能

2022-10-11 23:35:28

神经网络VGGNetAlexNet

2019-08-19 00:31:16

Pytorch神经网络深度学习

2022-02-17 10:34:21

神经网络识别验证码

2024-10-10 08:12:12

2018-04-08 11:20:43

深度学习

2022-06-16 10:29:33

神经网络图像分类算法

2024-04-30 14:54:10

点赞
收藏

51CTO技术栈公众号