大家还记得这张图吗?深度系统引入了52种目标检测模型。从2013年到2020年,从最早的R-CNN、OverFeat到后来的SSD、YOLOv3再到去年的M2Det,新模型层出不穷,而且性能越来越好!以上重点介绍源码和论文。对于各种卷积神经网络模型的实现,本文将介绍它们的PyTorch实现,很有用!该资源已经在GitHub上开源,链接如下:https://github.com/shanglianlm0525/PyTorch-Networks首先总结一下介绍一下。本系列卷积神经网络实现包括9大主题,目录如下:1.典型网络2.轻量级网络3.目标检测网络4.语义分割网络5.实例分割网络6.人脸检测识别网络7.人体姿态识别网络8.注意力机制网络9.人像分割网络下面我们来看看具体来说:1.典型网络(Classicalnetwork)典型的卷积神经网络包括:AlexNet、VGG、ResNet、InceptionV1、InceptionV2、InceptionV3、InceptionV4、Inception-ResNet。以2012年ImageNet竞赛冠军Hinton和他的学生AlexKrizhevsky设计的AlexNet网络为例。AlexNet包含了几个比较新的技术点,并首次在CNN中成功应用了ReLU、Dropout、LRN等Tricks。同时,AlexNet还使用GPU进行计算加速。AlexNet网络结构的PyTorch实际方式如下:importtorchimporttorch.nnasnndefConv3x3BNReLU(in_channels,out_channels,stride,padding=1):returnnn.Sequential(nn.Conv2d(in_channelsin_channels=in_channels,out_channelsout_channels=out_channels,stridestridesize=31),nn.BatchNorm2d(out_channels),nn.ReLU6(inplace=True))defConv1x1BNReLU(in_channels,out_channels):returnnn.Sequential(nn.Conv2d(in_channelsin_channels=in_channels,out_channelsout_channels=out_channels,kernel_size=1,stride=1,填充=0),nn.BatchNorm2d(out_channels),nn.ReLU6(inplace=True))defConvBNReLU(in_channels,out_channels,kernel_size,stride,padding=1):returnnn.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))defConvBN(in_channels,out_channels,kernel_size,stride,padding=1):returnnn.Sequential(nn.Conv2d(in_channelsin_channels=in_channels,out_channelsout_channels=out_channels,kernel_sizekernel_size=kernel_size,stridestride=步幅,paddingpadding=padding),nn.BatchNorm2d(out_channels))classResidualBlock(nn.Module):def__init__(self,in_channels,out_channels):super(ResidualBlock,self).__init__()mid_channels=out_channels//2self.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)defforward(self,x):out=self.bottleneck(x)returnout+self.shortcut(x)2.轻量级网络(Lightweight)轻量级网络包:GhostNet、MobileNets、MobileNetV2、MobileNetV3、ShuffleNet、ShuffleNetV2、SqueezeNetXceptionMixNetGhostNet以GhostNet为例,同样的精度、速度和计算量都不及之前的SOTA算法。GhostNet的核心是Ghost模块。与普通的卷积神经网络相比,在不改变输出特征图大小的情况下,减少了参数总数和所需的计算复杂度,即插即用。GhostNet网络结构的PyTorch实现如下:https://github.com/shanglianlm0525/PyTorch-Networks/blob/master/Lightweight/GhostNet.py3。ObjectDetection物体检测网络包括:SSD、YOLO、YOLOv2、YOLOv3、FCOS、FPN、RetinaNetObjectsasPoints、FSAF、CenterNetFoveaBox。以YOLO系列为例。YOLO(YouOnlyLookOnce)是一种基于深度神经网络的物体识别和定位算法。它最大的特点是运行速度非常快,可以用于实时系统。目前YOLOv3的应用有很多。YOLOV3网络结构的PyTorch实现如下:https://github.com/shanglianlm0525/PyTorch-Networks/blob/master/ObjectDetection/YOLOv3.py4。语义分割语义分割网络包括:FCN、Fast-SCNN、LEDNet、LRNNet、FisheyeMODNet。以FCN为例,FCN诞生于2014年,是语义分割模型的先驱。它的主要贡献是促进端到端卷积神经网络在语义分割问题中的使用,以及使用反卷积进行上采样。FCN模型非常简单,全部由卷积组成,所以称为全卷积网络。同时,由于全卷积的特殊形式,它可以接受任意大小的输入。FCN网络结构的PyTorch实现如下:https://github.com/shanglianlm0525/PyTorch-Networks/blob/master/SemanticSegmentation/FCN.py5。InstanceSegmentation实例分割网络包括:PolarMask。6.人脸检测识别网络(commitVarGFaceNet)人脸检测识别网络包括:FaceBoxes、LFFD、VarGFaceNet。7.HumanPoseEstimationHumanPoseEstimation人体姿态识别网络包括:StackedHourglass、NetworksSimpleBaselines、LPN。8、注意力机制网络注意力机制网络包括:SENet、scSE、NLNet、GCNet、CBAM。9.人像分割网络(PortraitSegmentation)人像分割网络包括:SINet。综上所述,这个GitHub开源项目展示了近年来主流的九种卷积神经网络,包括几十种具体的网络结构。这些网络结构中的每一个都有一个PyTorch实现。还是很不错的。
