深入浅出之NIN网络

NIN网络,全称为Network In Network,是一种创新的卷积神经网络架构。以下是对NIN网络的详细介绍:

一、概述

NIN网络由加州大学伯克利分校的研究团队提出,并在《Network In Network》论文中进行了详细阐述。该论文发表于ICLR-2014,NIN以一种全新的角度审视了卷积神经网络中的卷积核设计,通过引入子网络结构代替纯卷积中的线性映射部分,从而提高了网络的表达能力和非线性特性。

二、核心组件

  1. 多层感知机(MLP)卷积层

    • NIN网络引入了称为“多层感知机(MLP)卷积”的新型卷积层。
    • 该层使用1x1的卷积核来在通道维度上进行特征组合,从而增强了网络的表达能力。
    • 1x1卷积层的主要作用是对输入特征进行通道间的线性组合,增加网络的非线性表达能力。
  2. 全局平均池化层

    • NIN网络用全局平均池化层代替传统的全连接层。
    • 全局平均池化层对每个通道中的所有元素求平均,然后直接用于分类。
    • 这种设计显著减少了模型参数的数量,有助于防止过拟合。

三、NIN网络主要贡献

NIN网络(Network In Network)的主要贡献体现在以下几个方面:

  1. 引入MLP卷积层
    • NIN网络提出了使用多层感知机(MLP)作为卷积层的替代,以增强网络的局部建模能力。传统的卷积层使用线性滤波器结构,而NIN则通过MLP卷积层(即1x1卷积层后接非线性激活函数,有时再后接一个或多个1x1卷积层)来抽象局部感受野的数据,从而提高了模型对于局部感受野的判别力。
  2. 使用全局平均池化
    • NIN网络去掉了传统的全连接层,引入了全局平均池化层。全局平均池化层将最后的特征图数量变成了分类的数量,这样的操作不仅增强了模型的可解释性,还大大减少了参数量,降低了过拟合的风险。
  3. 参数效率
    • 通过MLP卷积层和全局平均池化的使用,NIN网络在保持高性能的同时,显著降低了模型的参数数量。这使得NIN网络在资源受限的环境下(如移动设备或嵌入式系统)具有更好的应用前景。
  4. 提升模型表达能力
    • NIN网络通过堆叠多个MLP卷积层,形成了更深的网络结构,从而提升了模型的表达能力。这种结构使得NIN网络能够学习到更复杂的特征表示,进而在图像分类等任务上取得更好的性能。
  5. 启发后续研究
    • NIN网络的思想和结构设计对后续的深度学习研究产生了重要影响。例如,1x1卷积层在后续的网络结构(如GoogLeNet的Inception模块和ResNet的Bottleneck设计)中得到了广泛应用。此外,全局平均池化也被视为一种有效的替代全连接层的方法,在多个网络结构中得到了采用。

综上所述,NIN网络通过引入MLP卷积层、使用全局平均池化、提高参数效率以及提升模型表达能力等方面的创新,为深度学习领域的发展做出了重要贡献。

三、网络结构

网络中的网络(NiN)是一种卷积神经网络架构,由加州大学伯克利分校的研究团队提出。它引入了一个称为“多层感知机(MLP)卷积”的新型卷积层,使用1x1的卷积核来在通道维度上进行特征组合,从而增强了网络的表达能力。NiN网络可以应用于图像分类、目标检测等计算机视觉任务中。

NiN块以一个普通卷积层开始,后面是两个1×1的卷积层。这两个1×1卷积层充当带有ReLU激活函数的逐像素全连接层。 第一层的卷积窗口形状通常由用户设置。 随后的卷积窗口形状固定为1×1。

最初的NiN网络是在AlexNet后不久提出的,显然从中得到了一些启示。 NiN使用窗口形状为11×11、5×5和3×3

的卷积层,输出通道数量与AlexNet中的相同。 每个NiN块后有一个最大汇聚层,汇聚窗口形状为3×3,步幅为2。

NiN和AlexNet之间的一个显著区别是NiN完全取消了全连接层。 相反,NiN使用一个NiN块,其输出通道数等于标签类别的数量。最后放一个全局平均汇聚层(global average pooling layer),生成一个对数几率 (logits)。NiN设计的一个优点是,它显著减少了模型所需参数的数量。然而,在实践中,这种设计有时会增加训练模型的时间。

四、优势与应用

  1. 优势

    • NIN网络通过引入MLP卷积层和全局平均池化层,显著提高了网络的表达能力和非线性特性。
    • 该网络结构能够更好地提取和组合复杂的特征,从而提高模型的准确性和泛化能力。
  2. 应用

    • NIN网络可以应用于图像分类、目标检测等计算机视觉任务中。
    • 在CIFAR-10和CIFAR-100分类任务中,NIN网络达到了当时的最好水平。

五、与其他网络的比较

与传统卷积神经网络(如AlexNet)相比,NIN网络在以下几个方面有所不同:

  1. 卷积层设计:NIN网络使用MLP卷积层代替传统的卷积层,从而增强了网络的表达能力。
  2. 全连接层替代:NIN网络用全局平均池化层代替全连接层,显著减少了模型参数的数量。
  3. 网络结构:NIN网络通过叠加多个NIN块来形成更深层次的网络结构,从而提取更复杂的特征。

NIN网络(Network In Network)和VGG网络在深度卷积神经网络架构中都有其独特之处,它们之间的主要区别体现在以下几个方面:

1、结构设计

  1. NIN网络

    • 采用了串联多个由卷积层和“全连接层”(实际为1x1卷积层)构成的小网络来构建深层网络。

    • 引入了MLP卷积层,即在卷积层内部使用了多层感知机结构,以更好地捕捉特征。

    • 使用了全局平均池化层来代替传统的全连接层,显著减少了模型参数数量,降低了过拟合风险。

  2. VGG网络

    • 使用了较小的3x3卷积核和2x2的最大池化层,通过堆叠这些基础模块来构建深度网络。

    • VGG网络有多个版本,如VGG16和VGG19,分别表示网络中包含16个和19个卷积层(不包括全连接层)。

    • 采用了更深的层次结构和较小的卷积核,能够提取到更丰富的图像特征,对于复杂的视觉任务具有很好的性能。

2、特征提取能力

  1. NIN网络

    • MLP卷积层增强了网络的局部建模能力,使得NIN网络能够学习到更复杂的特征表示。

    • 全局平均池化层有助于捕捉全局特征和空间结构,提高了网络的泛化性能。

  2. VGG网络

    • 由于采用了较深的层次结构和较小的卷积核,VGG网络能够提取到更丰富的图像特征。

    • 在多个计算机视觉任务中表现出色,如图像分类、目标检测、图像分割等。

3、参数数量和计算量

  1. NIN网络

    • 通过使用1x1卷积层和全局平均池化层,NIN网络显著降低了模型的参数数量。

    • 这有助于减小过拟合的风险,并在资源受限的环境下具有更好的应用前景。

  2. VGG网络

    • 尽管VGG网络具有强大的特征提取能力,但其参数数量相对较多。

    • 这可能导致模型过拟合,并增加训练和优化的难度。为了缓解这个问题,通常需要采用正则化、数据增强等技术来提高模型的泛化能力。

4、应用场景

  1. NIN网络

    • 由于其参数效率高和泛化性能好的特点,NIN网络适用于资源受限的环境下的计算机视觉任务。

    • 同时,其设计理念也为后续的深度学习研究提供了重要启示。

  2. VGG网络

    • VGG网络在多个计算机视觉任务中表现出色,特别是在图像分类和目标检测方面。

    • 其预训练模型可以作为特征提取器用于各种计算机视觉任务。

综上所述,NIN网络和VGG网络在结构设计、特征提取能力、参数数量和计算量以及应用场景等方面都存在显著差异。这些差异使得它们在不同的任务和环境下具有各自的优势和适用性。

六、pytorch实现

在PyTorch中实现Network In Network(NIN)网络,我们需要定义一个自定义的神经网络类,该类将包含多层感知机(MLP)卷积层和全局平均池化层。以下是一个完整的NIN网络实现,它适用于图像分类任务,比如CIFAR-10数据集。

import torch  
import torch.nn as nn  
import torch.nn.functional as F  
  
class MLPConvLayer(nn.Module):  
    def __init__(self, in_channels, out_channels, hidden_channels=None, use_bn=True, use_relu=True):  
        super(MLPConvLayer, self).__init__()  
        if hidden_channels is None:  
            hidden_channels = out_channels // 2  # 如果没有指定隐藏层通道数,则默认为输出通道数的一半  
        self.mlp = nn.Sequential(  
            nn.Conv2d(in_channels, hidden_channels, kernel_size=1, bias=False),  
            nn.BatchNorm2d(hidden_channels) if use_bn else nn.Sequential(),  
            nn.ReLU(inplace=True) if use_relu else nn.Sequential(),  
            nn.Conv2d(hidden_channels, out_channels, kernel_size=1, bias=False)  
        )  
  
    def forward(self, x):  
        return self.mlp(x)  
  
class GlobalAveragePooling(nn.Module):  
    def forward(self, x):  
        return F.avg_pool2d(x, x.size()[2:])  
  
class NIN(nn.Module):  
    def __init__(self, num_classes=10):  
        super(NIN, self).__init__()  
        self.conv1 = nn.Conv2d(3, 96, kernel_size=11, stride=4, padding=2)  
        self.mlpconv2 = MLPConvLayer(96, 256, use_bn=True)  
        self.pool = nn.MaxPool2d(kernel_size=3, stride=2)  
        self.mlpconv3 = MLPConvLayer(256, 384, use_bn=True)  
        self.dropout = nn.Dropout(p=0.5)  
        self.mlpconv4 = MLPConvLayer(384, 1024, use_bn=True)  
        self.gap = GlobalAveragePooling()  
        self.fc = nn.Linear(1024, num_classes)  
  
    def forward(self, x):  
        x = F.relu(self.conv1(x))  
        x = self.pool(self.mlpconv2(x))  
        x = self.pool(self.mlpconv3(x))  
        x = self.dropout(self.mlpconv4(x))  
        x = self.gap(x)  
        x = x.view(x.size(0), -1)  # Flatten the tensor for the fully connected layer  
        x = self.fc(x)  
        return x  
  
# 示例用法  
if __name__ == "__main__":  
    model = NIN(num_classes=10)  # 假设有10个分类  
    print(model)  
  
    # 创建一个随机输入张量,假设输入图像大小为32x32,通道数为3(RGB)  
    input_tensor = torch.randn(1, 3, 32, 32)  
    output = model(input_tensor)  
    print(output)  # 输出应该是形状为[1, 10]的张量,表示10个类别的预测分数

在这个实现中:

  1. MLPConvLayer 类定义了一个多层感知机卷积层,它包含两个1x1的卷积层,中间可能有一个批量归一化层(BatchNorm2d)和一个ReLU激活函数。

  2. GlobalAveragePooling 类是一个简单的全局平均池化层,它对输入特征图的所有元素求平均。

  3. NIN 类是NIN网络的主要结构,它包含了一系列卷积层、MLP卷积层和全局平均池化层,最后是一个全连接层用于分类。注意,这里我们在第一个卷积层后直接使用了ReLU激活函数,而不是在MLPConvLayer内部。这是因为第一个卷积层没有使用批量归一化,所以直接在外部应用ReLU可能更合适。然而,这取决于你的具体需求和实验设置。

  4. forward方法中,我们按照网络的结构顺序传递输入张量,并应用相应的层和激活函数。

  5. 在示例用法部分,我们创建了一个NIN模型实例,并传入一个随机生成的输入张量来测试模型的前向传播。输出是一个形状为[1, 10]的张量,表示10个类别的预测分数。

输出:
tensor([[ 0.2917, -0.1653,  0.1137, -0.1486,  0.0760,  0.0263,  0.0092,  0.1124,
          0.0255, -0.0554]], grad_fn=<AddmmBackward0>)

综上所述,NIN网络是一种具有创新性的卷积神经网络架构,通过引入MLP卷积层和全局平均池化层等核心组件,显著提高了网络的表达能力和非线性特性。该网络结构在计算机视觉任务中表现出色,具有广泛的应用前景。

参考:

  1. https://zhuanlan.zhihu.com/p/619178349
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浩瀚之水_csdn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值