计算机视觉与深度学习-经典网络解析-AlexNet-[北邮鲁鹏]

news2025/1/7 6:13:40

这里写目录标题

  • AlexNet
    • 参考文章
    • AlexNet模型结构
      • AlexNet共8层:
      • AlexNet运作流程
    • 简单代码实现
    • 重要说明
    • 重要技巧
    • 主要贡献

AlexNet

AlexNet 是一种卷积神经网络(Convolutional Neural Network,CNN)的架构。它是由Alex Krizhevsky、Ilya Sutskever和Geoffrey Hinton提出的,并在2012年的ImageNet大规模视觉识别挑战赛(ILSVRC)中获胜。
AlexNet是推动深度学习在计算机视觉任务中应用的先驱之一

AlexNet跟LeNet-5类似也是一个用于图像识别的卷积神经网络。AlexNet网络结构更加复杂,参数更多。

验证了深度卷积神经网络的高效性

参考文章

手撕 CNN 经典网络之 AlexNet(理论篇)
论文《ImageNet Classification with Deep Convolutional Neural Networks》
【动手学计算机视觉】第十六讲:卷积神经网络之AlexNet

AlexNet模型结构

在这里插入图片描述
AlexNet中使用的是ReLU激活函数,它5层卷积层除了第一层卷积核为 11 ∗ 11 11*11 1111、第二次为 5 ∗ 5 5*5 55之外,其余三层均为 3 ∗ 3 3*3 33

1. 第一层:卷积层

输入

输入为 224 ∗ 224 ∗ 3 224 * 224 * 3 2242243的图像,输入之前进行了去均值处理(AlexNet对数据集中所有图像向量求均值,均值为 224 ∗ 224 ∗ 3 224 * 224 * 3 2242243,去均值操作为原图减去均值,绝对数值对分类没有意义,去均值之后的相对数值可以正确分类且计算量小)

卷积
卷积核的数量为96,论文中两块GPU分别计算48个核;

卷积核大小 11 ∗ 11 ∗ 3 , s t r i d e = 4 11 * 11 * 3,stride=4 11113stride=4,stride表示的是步长,padding = 0,表示不填充边缘。

卷积后的图形大小:

w i d e = ( 224 − k e r n e l _ s i z e + 2 ∗ p a d d i n g ) / s t r i d e + 1 = 54 wide = (224 - kernel\_size+2 * padding) / stride + 1 = 54 wide=(224kernel_size+2padding)/stride+1=54
h e i g h t = ( 224 − k e r n e l _ s i z e + 2 ∗ p a d d i n g ) / s t r i d e + 1 = 54 height = (224 - kernel\_size+2 * padding) / stride + 1 = 54 height=(224kernel_size+2padding)/stride+1=54
d i m e n t i o n = 96 dimention = 96 dimention=96

参考个数: ( 11 × 11 × 3 + 1 ) × 96 = 35 k (11 \times 11 \times 3 + 1) \times 96 = 35k (11×11×3+1)×96=35k

在这里插入图片描述
池化

输入通道数根据输入图像而定,输出通道数为96,步长为4。
在这里插入图片描述
注:窗口大小3*3,步长2,池化过程出现重叠,现在一般不使用重叠池化。

池化结果:27x27x96 特征图组
局部响应归一化层(Local Response Normalized)
在这里插入图片描述

为什么要引入LRN层?

首先要引入一个神经生物学的概念:侧抑制(lateral inhibitio),即指被激活的神经元抑制相邻的神经元。
归一化(normaliazation)的目的就是“抑制”,LRN就是借鉴这种侧抑制来实现局部抑制,尤其是我们使用RELU的时候,这种“侧抑制”很有效 ,因而在AlexNet里使用有较好的效果。

归一化有什么好处?

1 归一化有助于快速收敛;

2 对局部神经元的活动创建竞争机制,使得其中响应比较大的值变得相对更大,并抑制其他反馈较小的神经元,增强了模型的泛化能力。

【补充:神经网络学习过程本质就是为了学习数据分布,一旦训练数据与测试数据的分布不同,那么网络的泛化能力也大大降低;另外一方面,一旦每批训练数据的分布各不相同(batch 梯度下降),那么网络就要在每次迭代都去学习适应不同的分布,这样将会大大降低网络的训练速度,这也正是为什么我们需要对数据都要做一个归一化预处理的原因。
深度网络的训练是复杂的过程,只要网络的前面几层发生微小的改变,那么后面几层就会被累积放大下去。一旦网络某一层的输入数据的分布发生改变,那么这一层网络就需要去适应学习这个新的数据分布,所以如果训练过程中,训练数据的分布一直在发生变化,那么将会影响网络的训练速度。】

2. 第二层:卷积层
输入为上一层卷积的 feature map, 27 × 27 × 96 27 \times 27 \times 96 27×27×96大小的特诊图组。

卷积核的个数为256个,论文中的两个GPU分别有128个卷积核。
卷积核大小 5 ∗ 5 5*5 55,输入通道数为96,输出通道数为256,步长为2,padding = 2。
卷积结果: ( 27 − 5 + 2 × 2 ) / 1 + 1 , 27 × 27 × 256 (27 - 5 + 2 \times 2) / 1 + 1,27 \times 27 \times 256 (275+2×2)/1+1,27×27×256的特征图组。

然后做LRN。

最后最大化池化
池化层窗口大小为3*3,步长为2。
池化结果: 13 × 13 × 256 13 \times 13 \times 256 13×13×256的特征图组。

在这里插入图片描述

3. 第三层:卷积层
输入为第二层的输出,没有LRN和Pool。

卷积核大小 3 ∗ 3 3*3 33,输入通道数为256,输出通道数为384,stride为1,padding = 1。
图像尺寸为: ( 13 − 3 + 2 × 1 ) / 1 + 1 = 13 (13 - 3 + 2 \times 1) / 1 + 1 = 13 (133+2×1)/1+1=13
输出: 13 × 13 × 384 13 \times 13 \times 384 13×13×384

4. 第四层:卷积层

输入为第三层的输出,没有LRN和Pool。

卷积核个数为384,大小 3 ∗ 3 3*3 33,输入通道数为384,输出通道数为384,stride为1,padding = 1。
图像尺寸为: ( 13 − 3 + 2 × 1 ) / 1 + 1 = 13 (13 - 3 + 2 \times 1) / 1 + 1 = 13 (133+2×1)/1+1=13
输出: 13 × 13 × 384 13 \times 13 \times 384 13×13×384

5. 第五层:卷积层

输入为第四层的输出。

卷积核大小 3 ∗ 3 3*3 33,输入通道数为384,输出通道数为256,stride为1,padding = 1。
图像尺寸为: ( 13 − 3 + 2 × 1 ) / 1 + 1 = 13 (13 - 3 + 2 \times 1) / 1 + 1 = 13 (133+2×1)/1+1=13
卷积结果为: 13 × 13 × 256 13 \times 13 \times 256 13×13×256

池化层窗口大小为 3 ∗ 3 3*3 33,步长为2。
图像尺寸为: ( 13 − 3 ) / 2 + 1 = 6 (13 - 3) / 2 + 1 = 6 (133)/2+1=6
池化结果为: 6 × 6 × 256 6 \times 6 \times 256 6×6×256

6. 第六层:全连接层

输入大小为上一层的输出,输出大小为4096。

Dropout概率为0.5。

7. 第七层:全连接层

输入大小为上一层的输出,输出大小为4096。

Dropout概率为0.5。

8. 第八层:全连接层

输入大小为4096,输出大小为分类数。

Dropout概率为0.5。

在这里插入图片描述
需要将第五层池化结果6×6×256转换为向量9216×1。因为全连接层不能输入矩阵,要输入向量。

注意: 需要注意一点,5个卷积层中前2个卷积层后面都会紧跟一个池化层,而第3、4层卷积层后面没有池化层,而是连续3、4、5层三个卷积层后才加入一个池化层。

AlexNet共8层:

  • 5个卷积层(CONV1——CONV5)
  • 3个全连接层(FC6-FC8)
    在这里插入图片描述

AlexNet运作流程

  • conv1:输入→卷积→ReLU→局部响应归一化→重叠最大池化层
  • conv2:卷积→ReLU→局部响应归一化→重叠最大池化层
  • conv3:卷积→ReLU
  • conv4:卷积→ReLU
  • conv5:卷积→ReLU→重叠最大池化层(经过这层之后还要进行flatten展平操作)
  • FC1:全连接→ReLU→Dropout
  • FC2:全连接→ReLU→Dropout
  • FC3(可看作softmax层):全连接→ReLU→Softmax

简单代码实现

使用pytorch

import torch
import torch.nn as nn

class AlexNet(nn.Module):
    def __init__(self, num_classes=1000):
        super(AlexNet, self).__init__()
        # 第一个卷积层,输入通道3(RGB图像),输出通道64,卷积核大小11x11,步长4,填充2
        self.conv1 = nn.Conv2d(3, 64, kernel_size=11, stride=4, padding=2)
        self.relu1 = nn.ReLU(inplace=True)
        
        # 最大池化层,窗口大小3x3,步长2
        self.maxpool1 = nn.MaxPool2d(kernel_size=3, stride=2)
        
        # 第二个卷积层,输入通道64,输出通道192,卷积核大小5x5,填充2
        self.conv2 = nn.Conv2d(64, 192, kernel_size=5, padding=2)
        self.relu2 = nn.ReLU(inplace=True)
        
        # 第二个最大池化层,窗口大小3x3,步长2
        self.maxpool2 = nn.MaxPool2d(kernel_size=3, stride=2)
        
        # 第三个卷积层,输入通道192,输出通道384,卷积核大小3x3,填充1
        self.conv3 = nn.Conv2d(192, 384, kernel_size=3, padding=1)
        self.relu3 = nn.ReLU(inplace=True)
        
        # 第四个卷积层,输入通道384,输出通道256,卷积核大小3x3,填充1
        self.conv4 = nn.Conv2d(384, 256, kernel_size=3, padding=1)
        self.relu4 = nn.ReLU(inplace=True)
        
        # 第五个卷积层,输入通道256,输出通道256,卷积核大小3x3,填充1
        self.conv5 = nn.Conv2d(256, 256, kernel_size=3, padding=1)
        self.relu5 = nn.ReLU(inplace=True)
        
        # 第三个最大池化层,窗口大小3x3,步长2
        self.maxpool3 = nn.MaxPool2d(kernel_size=3, stride=2)
        
        # 自适应平均池化层,输出特征图大小为6x6
        self.avgpool = nn.AdaptiveAvgPool2d((6, 6))
        
        # 全连接层,输入大小为256x6x6,输出大小为4096
        self.fc1 = nn.Linear(256 * 6 * 6, 4096)
        self.relu6 = nn.ReLU(inplace=True)
        
        # 全连接层,输入大小为4096,输出大小为4096
        self.fc2 = nn.Linear(4096, 4096)
        self.relu7 = nn.ReLU(inplace=True)
        
        # 全连接层,输入大小为4096,输出大小为num_classes
        self.fc3 = nn.Linear(4096, num_classes)

    def forward(self, x):
        x = self.conv1(x)
        x = self.relu1(x)
        x = self.maxpool1(x)
        x = self.conv2(x)
        x = self.relu2(x)
        x = self.maxpool2(x)
        x = self.conv3(x)
        x = self.relu3(x)
        x = self.conv4(x)
        x = self.relu4(x)
        x = self.conv5(x)
        x = self.relu5(x)
        x = self.maxpool3(x)
        x = self.avgpool(x)
        x = x.view(x.size(0), -1)
        x = self.fc1(x)
        x = self.relu6(x)
        x = self.fc2(x)
        x = self.relu7(x)
        x = self.fc3(x)
        return x

# 创建AlexNet模型的实例
model = AlexNet(num_classes=1000)

# 打印模型结构
print(model)

重要说明

  • 用于提取图像特征的卷积层以及用于分类的全连接层是同时学习的。
  • 卷积层与全连接层在学习过程中会相互影响、相互促进

重要技巧

  • Dropout策略防止过拟合;
  • 使用动量的随机梯度下降算法,加速收敛;
  • 验证集损失不下降时,手动降低10倍的学习率;
  • 采用样本增强策略增加训练样本数量,防止过拟合;
  • 集成多个模型,进一步提高精度。

在这里插入图片描述
现在显存基本都够用,不需要再考虑分两个GPU计算。

AlexNet卷积层在做什么?

在这里插入图片描述

主要贡献

  1. 提出了一种卷积层加全连接层的卷积神经网络结构
  2. 首次使用ReLU函数做为神经网络的激活函数
  3. 首次提出Dropout正则化来控制过拟合
  4. 使用加入动量的小批量梯度下降算法加速了训练过程的收敛
  5. 使用数据增强策略极大地抑制了训练过程的过拟合
  6. 利用了GPU的并行计算能力,加速了网络的训练与推断

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1030896.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

工作应当有挑战

有挑战 才能有所成长 正所谓人到山前必有路 是挑战 一般就会有未知 未知往往伴随着困难 有困难 并不可怕,也不必自我抱怨,自我抱怨只会陷入无尽的精神内耗 我们只要做好自己 困难就会迎刃而解 如果自己的获得 没有达到自己的期望 其实那也不必气馁 再…

【深度学习】实验12 使用PyTorch训练模型

文章目录 使用PyTorch训练模型1. 线性回归类2. 创建数据集3. 训练模型4. 测试模型 附:系列文章 使用PyTorch训练模型 PyTorch是一个基于Python的科学计算库,它是一个开源的机器学习框架,由Facebook公司于2016年开源。它提供了构建动态计算图…

【Spatial-Temporal Action Localization(七)】论文阅读2022年

文章目录 1. TubeR: Tubelet Transformer for Video Action Detection摘要和结论引言:针对痛点和贡献模型框架TubeR Encoder:TubeR Decoder:Task-Specific Heads: 2. Holistic Interaction Transformer Network for Action Detect…

少儿编程 2023年5月中国电子学会图形化编程等级考试Scratch编程三级真题解析(判断题)

2023年5月scratch编程等级考试三级真题 判断题(共10题,每题2分,共20分) 26、运行下列程序后,变量c的值是6 答案:错 考点分析:考查积木综合使用,重点考查变量积木的使用 最后一步c设为a+b,所以c=1+2=3,答案错误 27、变量a与变量b的初始值都是1,a+b等于2。运行下列…

【2023华为杯B题】DFT类矩阵的整数分解逼近(思路及代码下载)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

ETHERNET IP站转CCLKIE协议网关

产品介绍 JM-EIP-CCLKIE是自主研发的一款 ETHERNET/IP 从站功能的通讯网关。该产品主要功能是实现 CCLINK IEFB 总线和 ETHERNET/IP 网络的数据互通。 本网关连接到 ETHERNET/IP 总线中做为从站使用,连接到 CCLINK IEFB 总线中做为从站使用。 产品参数 技术参数 …

A : DS顺序表--类实现

Description 实现顺序表的用C语言和类实现顺序表 属性包括&#xff1a;数组、实际长度、最大长度&#xff08;设定为1000&#xff09; 操作包括&#xff1a;创建、插入、删除、查找 类定义参考 #include<iostream> using namespace std; #define ok 0 #define error…

Unity实现角色受到攻击后屏幕抖动的效果

文章目录 实现效果摄像机抖动脚本 玩家受伤其他文章 实现效果 首先看一下实现效果。 摄像机 我们要使用屏幕抖动&#xff0c;使用的是CinemachineVirtualCamera这个组件&#xff0c;这个组件需要在包管理器中进行导入。 导入这个组件之后&#xff0c;创建一个Chinemachine-…

学习记忆——宫殿篇——记忆宫殿——记忆桩——单间+客厅+厨房+厕所+书房+院子

文章目录 单间客厅厨房厕所书房院子 单间 水壶 水龙头 香皂 果汁机 电视 门空间 花 红酒 葡萄 不锈钢 白毛沙发 彩色垫子 吉他 皮椅 挂画 风扇 糖抱枕 盒子 花土 水晶腿 衣柜 笔 三环相框 水壶 壁挂 台灯 被 网球拍 足球 抽屉 闹钟 蝴蝶 心 斑马 三轮车 音响 椅子 碗 玩偶 烟灰…

Android 12 源码分析 —— 应用层 六(StatusBar的UI创建和初始化)

Android 12 源码分析 —— 应用层 六&#xff08;StatusBar的UI创建和初始化) 在前面的文章中,我们分别介绍了Layout整体布局,以及StatusBar类的初始化.前者介绍了整体上面的布局,后者介绍了三大窗口的创建的入口处,以及需要做的准备工作.现在我们分别来细化三大窗口的UI创建和…

苹果手机怎么录屏?1分钟轻松搞定

虽然一直使用苹果手机&#xff0c;但是对它的录屏功能还不是很会使用。苹果手机怎么录屏&#xff1f;录屏可以录制声音吗&#xff1f;麻烦大家教教我&#xff01; 苹果手机为用户提供了十分便捷的内置录屏功能&#xff0c;可以让您随时随地录制手机上的内容。但是很多小伙伴在第…

六角形锌饼的尺寸及其允许偏差

声明 本文是学习GB-T 3610-2010 电池锌饼. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本标准规定了电池锌饼的产品分类、要求、试验方法、检验规则及标志、包装、运输、贮存、质量证明 书和合同(或订货单)等内容。 本标准适用于制造锌-…

如何把.mhd和.raw文件转换为DICOM文件

之前拿到体渲染的人头数据Manix&#xff0c;格式为mhd和raw格式的需要转换为DICOM ResearchGate上的一个帖子帮了大忙&#xff08;链接如下&#xff09;&#xff0c;有人说用ImageJ&#xff0c;有的说用XMedCon。我试了半天也没用ImageJ弄成功&#xff0c;但是XMedCon一下就好…

【有关mysql的实操记录】

一. 导入导出数据 1. 导出mysql的数据库作为备份文件 mysqldump -u 用户名 -p 数据库名 >导出文件路径.sql 回车之后&#xff0c;提示输入密码. 2. 导入mysql之前备份的数据库文件 mysql -u 用户名 -p 数据库名 <导入文件路径.sql 回车之后&#xff0c;提示输入密码 …

总结分析 | 基于phpmyadmin的渗透测试

一、什么是phpmyadmin&#xff1f; phpMyAdmin 是一个以PHP为基础&#xff0c;以Web-Base方式架构在网站主机上的MySQL的数据库管理工具&#xff0c;让管理者可用Web接口管理MySQL数据库。借由此Web接口可以成为一个简易方式输入繁杂SQL语法的较佳途径&#xff0c;尤其要处理大…

CG-78静力水准仪采用压力传感器测量液体的压差

CG-78静力水准仪采用压力传感器测量液体的压差产品概述 静力水准仪是测量两点间或多点间相对高程变化的仪器。由储液器、高精度芯体和特别定制电路模块、保护罩等部件组成。沉降系统由多个同型号传感器组成&#xff0c;储液罐之间由通气管和通液管相连通&#xff0c;基准点置于…

循环神经网络——下篇【深度学习】【PyTorch】【d2l】

文章目录 6、循环神经网络6.7、深度循环神经网络6.7.1、理论部分6.7.2、代码实现 6.8、双向循环神经网络6.8.1、理论部分6.8.2、代码实现 6.9、机器翻译6.9.1、理论部分 6.10、编码器解码器架构6.10.1、理论部分 6、循环神经网络 6.7、深度循环神经网络 6.7.1、理论部分 设计…

瑞慈医疗:H1体检业务同比上涨101.2%,因何领跑医疗健康行业?

悄然间&#xff0c;医疗健康行业碰上历史性变革。水面之上&#xff0c;医院体检医院体检人潮涌动&#xff0c;愈来愈多的医院迈上扩建体检中心的步伐&#xff0c;赛道激增 20%为所有科室之首。水面之下&#xff0c;依靠信息技术使体检数字化、智能化的转型浪潮&#xff0c;也在…

TypeError: res.data.map is not a function微信小程序报错

从数据库查&#xff1a; 调用的是&#xff1a; 访问的springboot后端是这个&#xff1a; 打印出来如下&#xff1a; 看到是json格式的数据 [Users [id3, name刘雨昕, phone18094637788, admintrue, actionsJsonadmin, createAtSat Sep 16 10:11:20 CST 2023, tokentest], User…

小节9:Python之numpy

numpy全称为Numerical Python&#xff0c;是很多数据或科学相关Python包的基础。 1、numpy数组&#xff08;ND array N维数组&#xff09; numpy数组是更适合数据分析的列表。 numpy的数组和Python的内置列表有相似之处&#xff0c;也有不同之处。 相似之处&#xff1a;我们…