加入收藏 | 设为首页 | 会员中心 | 我要投稿 应用网_阳江站长网 (https://www.0662zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 创业 > 模式 > 正文

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

发布时间:2020-09-18 23:13:52 所属栏目:模式 来源:深度学习这件小事
导读:大家还记得这张图吗? 深度系统介绍了 52 个目标检测模型,纵观 2013 年到 2020 年,从最早的 R-CNN、OverFeat 到后来的 SSD、YOLO v3 再到去年的 M2Det,新模型层出不穷,性能也越来越好! 上文聚焦于源码和论文,对于各种卷积神经网络模型的实现,本文将

大家还记得这张图吗?

9大主题卷积神经网络(CNN)的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 进行运算加速。

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

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)

(编辑:应用网_阳江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读