计算机视觉初探--LeNet原理与实践

这篇具有很好参考价值的文章主要介绍了计算机视觉初探--LeNet原理与实践。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

LeNet:深度学习图像识别的里程碑

LeNet是卷积神经网络(Convolutional Neural Network, CNN)领域的先驱模型,由Yann LeCun等人在1998年提出,被广泛应用于手写数字识别和其他计算机视觉任务。本文将介绍LeNet模型的数学原理,使用PyTorch进行代码实现和实验验证。

数学原理

卷积操作

卷积是CNN中最重要的操作之一,它可以从输入数据中提取特征。在LeNet模型中,卷积操作使用卷积核与输入数据进行逐元素相乘,然后将相乘后的结果相加得到输出特征图。

Y [ i , j ] = ∑ m ∑ n ( X [ m , n ] ∗ K [ i − m , j − n ] ) Y[i, j] = \sum_{m}\sum_{n}(X[m, n] * K[i-m, j-n]) Y[i,j]=mn(X[m,n]K[im,jn])
其中,Y是输出特征图的某个位置上的值,i和j是输出特征图的索引,m和n是卷积核的索引,X是输入特征图的值,K是卷积核的权重。

卷积操作的步骤如下:

1.将卷积核与输入特征图进行逐元素相乘。

2.将相乘后的结果相加得到输出特征图的对应位置的值。
卷积操作的作用是通过滑动窗口的方式对输入特征图进行扫描,提取局部特征,并保留空间关系。卷积核的权重可以学习到不同的特征,例如边缘、纹理等。

池化操作

池化操作用于对特征图进行下采样,以减少数据维度并保留重要特征。在LeNet模型中,常见的池化方式包括最大池化和平均池化。

最大池化(Max Pooling)

最大池化是池化操作中常用的一种类型,它会选取一个滤波器区域内的最大值作为输出。

平均池化(Average Pooling)

平均池化是另一种常见的池化方式,它会选取一个滤波器区域内所有值的平均值作为输出。

池化操作有助于减少数据的维度,降低计算复杂度,同时保留重要的特征信息,有利于提高模型的鲁棒性和泛化能力。

全连接层

全连接层将上一层的所有神经元与当前层的所有神经元进行连接,通过权重矩阵和偏置向量进行线性变换,然后再通过激活函数进行非线性变换。

Y = tanh ⁡ ( ∑ i = 1 n ( W i X i + b i ) ) Y = \tanh(\sum_{i=1}^{n}(W_{i}X_{i} + b_{i})) Y=tanh(i=1n(WiXi+bi))

激活函数

激活函数是CNN中必不可少的组成部分,它可以将线性模型转化为非线性模型,从而提高模型的表达能力。在LeNet模型中,使用tanh作为激活函数。

tanh ⁡ ( x ) = e x − e − x e x + e − x \tanh(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}} tanh(x)=ex+exexex

前向传播

LeNet模型的前向传播过程包括卷积运算、池化操作、全连接层的线性变换和非线性变换,最终通过softmax函数得到分类结果。

反向传播

反向传播用于计算损失函数对模型参数的梯度,通过梯度下降算法来更新模型参数,使损失函数达到最小值,从而训练模型。

代码实现

以下是使用PyTorch实现LeNet模型的代码:

import torch
import torch.nn as nn
import torch.nn.functional as F
from torchvision.datasets import MNIST
from torchvision.transforms import ToTensor
from torch.utils.data import DataLoader
import tqdm

# 定义LeNet模型
class LeNet(nn.Module):
    def __init__(self):
        super(LeNet, self).__init__()
        self.conv1 = nn.Conv2d(in_channels=1, out_channels=6, kernel_size=5)
        self.pool1 = nn.AvgPool2d(kernel_size=2, stride=2)
        self.conv2 = nn.Conv2d(in_channels=6, out_channels=16, kernel_size=5)
        self.pool2 = nn.AvgPool2d(2)
        self.fc1 = nn.Linear(in_features=4 * 4 * 16, out_features=120)
        self.fc2 = nn.Linear(in_features=120, out_features=84)
        self.fc3 = nn.Linear(in_features=84, out_features=10)
    
    def forward(self, x):
        x = F.tanh(self.conv1(x))
        x = self.pool1(x)
        x = F.tanh(self.conv2(x))
        x = self.pool2(x)
        x = x.view(-1, 4 * 4 * 16)
        x = F.tanh(self.fc1(x))
        x = F.tanh(self.fc2(x))
        output = F.softmax(self.fc3(x), dim=1)
        return output

# 准备数据集
train_set = MNIST(root='.', train=True, download=True, transform=ToTensor())
test_set = MNIST(root='.', train=False, download=True, transform=ToTensor())
train_loader = DataLoader(train_set, batch_size=128, shuffle=True)
test_loader = DataLoader(test_set, batch_size=128, shuffle=False)

# 训练模型
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
model = LeNet().to(device)
criterion = nn.CrossEntropyLoss()
optimizer = torch.optim.SGD(model.parameters(), lr=0.01, momentum=0.9)

for epoch in range(10):
    model.train()
    for images, labels in train_loader:
        images, labels = images.to(device), labels.to(device)
        optimizer.zero_grad()
        outputs = model(images)
        loss = criterion(outputs, labels)
        loss.backward()
        optimizer.step()
        print(f"[{epoch+1}] loss:{loss}")

# 测试模型
model.eval()
correct = 0
total = 0
with torch.no_grad():
    for images, labels in test_loader:
        images, labels = images.to(device), labels.to(device)
        outputs = model(images)
        _, predicted = torch.max(outputs.data, 1)
        total += labels.size(0)
        correct += (predicted == labels).sum().item()

accuracy = 100 * correct / total
print('Test Accuracy: {:.2f}%'.format(accuracy))

上述代码首先定义了LeNet模型,包含两个卷积层、两个池化层、三个全连接层,并使用tanh和softmax作为激活函数。然后通过PyTorch的数据加载器准备MNIST数据集,并使用交叉熵损失和随机梯度下降优化算法训练模型。最后在测试集上评估模型的准确率。

总结

LeNet模型是卷积神经网络领域的里程碑,为深度学习图像识别任务的发展做出了重要贡献。本文介绍了LeNet模型的数学原理、PyTorch的代码实现,并通过训练和测试模型展示了其在手写数字识别任务上的性能。文章来源地址https://www.toymoban.com/news/detail-836774.html

到了这里,关于计算机视觉初探--LeNet原理与实践的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 计算机视觉:打开机器之眼看世界

    计算机视觉是人工智能领域中备受关注的一部分,它的目标是赋予计算机类似于人类眼睛的功能,让机器能够感知和理解周围的世界。通过图像和视频数据,计算机视觉技术将信息转化为可理解和可操作的数据,为各种应用领域提供了强大的支持。 计算机视觉起源于20世纪

    2024年02月02日
    浏览(42)
  • 从入门到实践:计算机视觉图像分类完全指南

    计算机视觉图像分类是计算机视觉领域的一个重要分支,它的目标是让计算机能够识别并分类不同的图像。在本文中,我们将介绍计算机视觉图像分类的基本概念、流程和常用算法。   一、图像分类的基本概念 图像分类是指将输入的图像自动分类到预定义的一组类别中的过

    2024年02月10日
    浏览(51)
  • 深度学习核心技术与实践之计算机视觉篇

    非书中全部内容,只是写了些自认为有收获的部分 (1)视觉皮层的神经元是一列一列组织起来的,每一列神经元只喜欢某一种特定的形状或者某些简单的线条组合,而不是鱼、老鼠、鲜花 (2)视觉的前期,并不是对鱼或老鼠进行整体识别,而是对简单的形状结构进行处理,

    2024年02月03日
    浏览(54)
  • 机器视觉、图像处理和计算机视觉:概念和区别

    机器视觉、图像处理和计算机视觉:概念和区别nbsp; 机器视觉、图像处理和计算机视觉是相关但有区别的概念。 机器视觉主要应用于工业领域,涉及图像感知、图像处理、控制理论和软硬件的结合,旨在实现高效的运动控制或实时操作。 图像处理是指利用计算机对图像进行

    2024年02月06日
    浏览(47)
  • 基于计算机视觉的机器人视觉:实现对机器人视觉的理解和应用

    作者:禅与计算机程序设计艺术 目前,人类在收集和处理图像数据方面已经取得了非常大的进步。随着技术的不断迭代升级,机器视觉系统也在迅速发展。人工智能领域的研究者们正在将这些技术应用到工业领域,其中就包括机器人的视觉处理方面。由于机器人本身是个动态

    2024年02月08日
    浏览(60)
  • 计算机竞赛 车道线检测(自动驾驶 机器视觉)

    无人驾驶技术是机器学习为主的一门前沿领域,在无人驾驶领域中机器学习的各种算法随处可见,今天学长给大家介绍无人驾驶技术中的车道线检测。 在无人驾驶领域每一个任务都是相当复杂,看上去无从下手。那么面对这样极其复杂问题,我们解决问题方式从先尝试简化问

    2024年02月08日
    浏览(72)
  • 实现ROS机器人的计算机视觉

    计算机视觉是一种通过计算机来处理和理解人类视觉系统所收集到的图像和视频信息的技术。在过去的几十年里,计算机视觉已经成为了一种非常重要的技术,它在很多领域得到了广泛的应用,如自动驾驶、人脸识别、物体检测等。 在过去的几年里,随着机器人技术的发展,

    2024年01月21日
    浏览(51)
  • 基于机器视觉的车道线检测 计算机竞赛

    🔥 优质竞赛项目系列,今天要分享的是 基于深度学习的视频多目标跟踪实现 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🧿 更多资料, 项目分享: https://gitee.com/dancheng-senior/postgraduate 理解车道检测的概念 那么什么是车道检测?以下是百度百科对车道的定义:

    2024年02月08日
    浏览(55)
  • 计算机竞赛 - 基于机器视觉的图像拼接算法

    图像拼接在实际的应用场景很广,比如无人机航拍,遥感图像等等,图像拼接是进一步做图像理解基础步骤,拼接效果的好坏直接影响接下来的工作,所以一个好的图像拼接算法非常重要。 再举一个身边的例子吧,你用你的手机对某一场景拍照,但是你没有办法一次将所有你

    2024年02月13日
    浏览(72)
  • 计算机竞赛 机器视觉的试卷批改系统 - opencv python 视觉识别

    🔥 优质竞赛项目系列,今天要分享的是 基于机器视觉的试卷系统 - opencv python 视觉识别 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🧿 更多资料, 项目分享: https://gitee.com/dancheng-senior/postgraduate 机器视觉的发展对存在的作业批改问题, 提供了有效的解决方案

    2024年02月07日
    浏览(63)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包