【Computer VIsion论文笔记】LeNet-5解读 & 入门CNN

论文:GradientBased Learning Applied to Do cument Recognition

前言

LetNet-5被设计用于手写数字识别,成为了卷积神经网络(Convolutional Neural Network,简称CNN)的开山之作,此后,基于CNN的深度学习方法层出不穷,大放异彩。

模型介绍

LetNet-5的结构的简洁明了,但已经完整展现了CNN的三大核心结构

  • 卷积层(Convolution Layer):提取图像特征;
  • 池化层(Pooling Layer):筛选特征;
  • 全连接(Fully Connected Layer):进行分类。

如下:

Input:大小为 32×32 的 image;

Layer C1:使用 6 个大小为 5×5 的卷积核进行卷积(convolutions),stride=1,padding=0,得到 6 张 28×28 feature maps;

Layer S2:使用 6 个大小为 2×2 的卷积核进行下采样(subsampling),stride=2,padding=0,得到 6 张 14×14 feature maps;

Layer C3:使用 16 个大小为 5×5 的卷积核进行卷积,stride=1,padding=0,得到 16 张 10×10 feature maps。在论文中,作者对卷积的方法做了如下要求:

横坐标表示S2中的feature maps(6张),纵坐标表示C3中的feature maps(16张),第1列“0”表示C3的第一张feature map由S2中的前三张feature map参与卷积得到,后面依次类推。

为什么不将每个S2特征映射连接到每个C3特征映射呢? 作者认为原因是双重的。首先,非完整连接方案将连接数量保持在合理范围内。更重要的是,它迫使网络中的对称性被打破。不同的特征映射被迫提取不同的(希望是互补的)特征,因为它们得到不同的输入集。

(在实际写代码时,并不会这样去单个的手动设计卷积范围)

Layer S4:使用 16 个大小为 2×2 的卷积核进行下采样,stride=2,padding=0,得到 16 张 5×5 feature maps;

Layer C5:使用 120 个大小为 5×5 的卷积核进行卷积,stride=1, padding=0,得到 120 张 1×1 feature maps;

Layer F6:线性变换,输入120(上一层的输出维度),输出84;

Output:线性变换,输入84,输出10(类别数,手写数字类别为10)。

上述,Layer C表示卷积层,Layer S是池化层(池化操作往往会减小图像的维度,又可称之为下采样),Layer F是全连接层。

LeNet-5代码

用Pytoch对LeNet-5进行实现,如下:

import torch
import torch.nn as nn
import torch.nn.functional as F


class LeNet(nn.Module):

    def __init__(self):
        super(LeNet, self).__init__()
        self.conv1 = nn.Conv2d(3, 6, 5)
        self.conv2 = nn.Conv2d(6, 16, 5)
        self.conv3 = nn.Conv2d(16, 120, 5)
        self.pool = nn.MaxPool2d(2, 2)
        self.fc1 = nn.Linear(120, 84)
        self.fc2 = nn.Linear(84, 10)

    def forward(self, x):
        x = self.pool(F.relu(self.conv1(x)))
        x = self.pool(F.relu(self.conv2(x)))
        x = F.relu(self.conv3(x))
        x = torch.flatten(x, 1)
        x = F.relu(self.fc1(x))
        x = self.fc2(x)
        return x

if __name__ == "__main__":
    net = LeNet()
    print(net)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 很高兴收到您的消息。这个GitHub项目是一个基于深度学习的垃圾分类项目,旨在通过计算机视觉技术将垃圾分类自动化。该项目使用了深度学习框架TensorFlow和Keras,以及一些常用的计算机视觉库,如OpenCV和Pillow。该项目包含了数据集的处理、模型的训练和测试、以及应用程序的实现等方面。如果您对深度学习和计算机视觉感兴趣,可以尝试学习和使用该项目。如果您有任何问题或建议,欢迎随时联系我。谢谢! ### 回答2: 这个项目是一个基于深度学习的垃圾分类项目,通过计算机视觉技术来实现垃圾的分类和识别。传统的垃圾分类往往需要人工干预,而这个项目利用深度学习的方法可以自动识别垃圾,并进行分类。 该项目的主要目标是训练一个模型,通过输入图片可以判断图像中的垃圾属于什么类型。项目通过使用深度学习框架,如TensorFlow和Keras来搭建一个卷积神经网络(CNN)模型。在训练过程中,将使用大量的垃圾图像数据集进行模型的训练,这有助于模型学习到不同类型垃圾的特征。 项目中的数据集包括了各种垃圾的图像,如玻璃、纸张、塑料、纺织物等。通过训练模型,可以使其具备识别和分类不同类型垃圾的能力。 这个项目的意义在于提供了一种自动化的垃圾分类方法,并且可以方便地应用于实际场景中。垃圾分类是一项重要的环保工作,能够有效地减少垃圾的污染和对环境的破坏。通过这个项目,可以提高垃圾分类的准确性和效率,为垃圾处理和回收提供更好的支持。 此外,该项目还提供了开源的代码和文档,可以帮助其他人学习和使用深度学习进行垃圾分类的方法。这对于促进相关领域的研究和进步具有积极的意义。同时,还可以通过开源社区的合作,不断改进和优化这个项目,使其更加全面和实用。 ### 回答3: 这个链接是一个关于基于深度学习的垃圾分类的GitHub项目。垃圾分类是指将垃圾按照不同的类别进行分类和处理的过程。目前,由于垃圾数量的快速增长和环境保护的迫切需求,垃圾分类成为了一个非常重要的话题。 该项目使用了计算机视觉和深度学习技术来实现垃圾的自动分类。计算机视觉是一门研究如何使计算机能够理解和解释图像或视频的学科,而深度学习是一种机器学习的方法,通过构建神经网络模型来学习和识别图像中的特征。 通过该项目,我们可以学到如何使用深度学习方法对垃圾进行分类。首先,我们需要收集一定数量的垃圾图像作为训练集。然后,我们使用深度学习框架,如TensorFlow或PyTorch,在训练集上构建和训练一个神经网络模型。该模型将学习从图像中提取特征并将垃圾分类到正确的类别中。最后,在测试集上评估模型的性能,并对模型进行调优和优化。 这个项目的意义在于,通过使用深度学习进行垃圾分类,可以减轻人工分类的负担,提高垃圾分类的准确性和效率。另外,通过对垃圾进行分类,可以实现垃圾的有效回收和资源再利用,有助于环境保护和可持续发展。 总结来说,该项目是一个使用深度学习技术实现垃圾分类的GitHub项目。通过该项目,可以学到如何使用深度学习方法对垃圾进行自动分类,减轻人工分类的负担,并促进垃圾的有效回收和资源再利用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值