经典卷积神经网络(CNN)图像分类算法详解

2023-10-27

本文原创,转载请引用 https://blog.csdn.net/dan_teng/article/details/87192430

CNN图像分类网络

一点废话:CNN网络主要特点是使用卷积层,这其实是模拟了人的视觉神经,单个神经元只能对某种特定的图像特征产生响应,比如横向或者纵向的边缘,本身是非常简单的,但是这些简单的神经元构成一层,在层数足够多后,就可以获取足够丰富的特征。从机制上讲,卷积神经网络与人的视觉神经还真是像。下面进入正题。

LeNet(1998)

网络基本架构为:conv1 (6) -> pool1 -> conv2 (16) -> pool2 -> fc3 (120) -> fc4 (84) -> fc5 (10) -> softmax,括号内数字表示channel数。这是个很小的五层网络(特指卷积或者全连接层),图中subsampling下采样是pooling layer, kernel size 是2x2, stride 2,feature map刚好为上层一半大小。该网络用于对支票(还是邮政?)的手写数字分类。网络受制于当时的硬件条件和训练数据大小,并未带来神经网络的爆发。
LeNet网络结构

AlexNet(2012)

AlexNet是2012年ILSVRC(ImageNet Large Scale Visual Recognition Challenge)冠军,以高出10%的正确率力压第二名,这是CNN网络首次获胜,将卷积神经网络的巨大优势带入人们视野。
ILSVRC 历年top5错误率及神经网络深度(层数):
ILSVRC top5错误率及网络深度
AlexNet基本架构为:conv1 (96) -> pool1 -> conv2 (256) -> pool2 -> conv3 (384) -> conv4 (384) -> conv5 (256) -> pool5 -> fc6 (4096) -> fc7 (4096) -> fc8 (1000) -> softmax。AlexNet有着和LeNet相似网络结构,但更深、有更多参数。conv1使用11×11的滤波器、步长为4使空间大小迅速减小(227×227 -> 55×55)。

AlexNet的特点:

  • 第一次使用ReLU激活函数,有更好的梯度特性、训练更快。
  • 使用了随机失活(dropout),p=0.5,可以防止过拟合
  • 大量使用数据扩充技术
  • 使用SGD,Momentum 0.9
  • learning rate 1e-2 (0.01), reduced by 10 manually when val accuracy plateaus
  • L2 weight decay 5e-4
  • batch size 128
  • 使用Norm layers(不再使用)

由于当时GPU不够强大,网络有两个分支,放在两个GPU上分别训练,当前已经不存在这个问题了,因此也常见到只有一个分支的网络结构图。另外需说明的是,图上表的输入图片大小是224,其实应该是227,否则网络跑不通。

双分支网络结构:
AlexNet原网络单分支网络结构(当下使用这个就行)
AlexNet单分支网络结构
ILSVRC 2013冠军是ZFNet,仅在AlexNet上做了一些改进,没有突破性技术,这里不再赘述。

VGGNet

ILSVRC 2014冠军是GoogLeNet,亚军是VGG。虽然VGG网络是亚军,但是其应用更加广泛。
VGG网络作者尝试了多种结构,较常用的有VGG16和VGG19(VGG16网络更简单,性能也可以,应用最广泛)。
VGG16的基本架构为conv1^2 (64) -> pool1 -> conv2^2 (128) -> pool2 -> conv3^3 (256) -> pool3 -> conv4^3 (512) -> pool4 -> conv5^3 (512) -> pool5 -> fc6 (4096) -> fc7 (4096) -> fc8 (1000) -> softmax。 ^3代表重复3次。
VGG网络结构
VGG16内存主要消耗在前两层卷积,而参数最主要在第一层全连接中最多。这里说的内存消耗,主要是指存储各层feature map所用的空间,对第一层而言,输入是图片,占用大小就是图片长×宽×通道数,卷积后输出占用的内存就是输出尺寸乘积;参数量中参数是网络需要学习的部分,也就是卷积和全连接层的权重矩阵大小,因为网络中权重矩阵以kernel形式存在,因此参数量就是kernel的(长x宽x通道数)x个数。
VGG16内存和参数消耗tricks:由于主要参数消耗在fc6(各层命名见后图)这一层,可以替换为对上一层7x7x512的feature map 在7x7上做average pooling,得到512个数,也是可行的(Andrej Karpathy在2016 CS231n课上讲的),这点在GoogLeNet中有应用。

VGGNet特点:

  • 结构简单,只有3x3,stride 1,pad 1的卷积和2x2,stride 2的max pooling,每过一次pooling,feature map大小降低一半。
  • 参数量大(参数和内存解析见上图)
  • 合适的网络初始化
  • 使用batch normalization
  • FC7提取的特征对其他任务有帮助。FC7始于AlexNet,表示某一全连接层,该层提取特征用于分类任务。

VGG16中对各层的命名如下:
VGG16各层命名
需注意的是,VGGNet之所以使用更小的kernel,是因为3个3x3的conv和1个7x7的conv具有的感受野是相同的,但是3层3x3带来更深的网络结构,非线性更强,另外参数量更少:3*(3x3xCxC)vs 7x7xCxC (这里C是channel数,同时认为kernel数也是C,等价于输出的channel是C)

GoogLeNet

GoogLeNet是ILSVRC2014冠军,取名源自作者所处单位Google,其中L大写是为了向LeNet致敬。该网络如之前所提,使用average pooling代替了最耗参数(相应的也最耗时间)的全连接层,同时使用inception模块来代替简单的卷积层(inception的名字来源于盗梦空间中的we need to go deeper的梗);另外,使用1x1的卷积进行了降维。
inception module

ResNet

ResNet是ILSVRC 2015的冠军。ResNet最大的贡献在于解决了深层网络难以训练的问题(反向传播梯度弥散),它的网络深度达到了152层!ResNet网络结构如下图所示。
ResNet网络结构

ResNet网络之所以能够训练下去主要得益于residual block(残差模块)的使用。残差模块是一种短路连接,如下图所示。通常的“plain”结构如左侧所示,而residual网络如右侧所示,加了一条短路路径,使得前面的输入可以直接连接到输出。原本图中几层要学习的是H(x),现在由于多加了输入x的影响,网络层需要拟合的变成了F(x) = H(x) - x
residual blockResNet的特点:

  • 使用BN(Batch Normalization)layer在每个conv layer后
  • 每个residual block包含两个3x3 conv layer
  • 周期性的使用stride 2 pooling降低维度,相当于除2
  • 最耗时的FC层使用pool代替
  • SGD + Momentum 0.9
  • learning rate 0.1, divided by 10 when validation error plateaus
  • Mini-batch size 256
  • Weight decay 1e-5
  • 不使用dropout

截至2017年,典型CNN网络的准确度和复杂度:
网络复杂度

参考资料:
斯坦福CS231n 2016/2017 教学视频和课件
https://zhuanlan.zhihu.com/p/31727402

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

经典卷积神经网络(CNN)图像分类算法详解 的相关文章

  • 浪潮服务器NF5280M5配置管理口BMC的IP web界面登录 ipmi 代外【详细】

    开启服务器以后等待按del或f2 进入bios选择第五项Server Mgmt界面选择BMC Network Configuration 回车 选择BMC IPv4 Network Configuration 回车 注意 只需要配置BMC
  • MySQL——必考面试题 ①

    一 为什么要使用数据库 数据保存在内存 优点 存取速度快 缺点 数据不能永久保存 数据保存在文件 优点 数据永久保存 缺点 速度比内存操作慢 频繁的IO操作 查询数据不方便 数据保存在数据库 数据永久保存 使用SQL语句 查询方便效率高 管
  • unity生成vr效果

    这是一个谷歌的插件 GoogleVRForUnity unitypackage 谷歌插件下载地址 开始制作最简单的 VR 盒子 导入 GoogleVRForUnity unitypackage 将项目的平台设置为 Android 平台 在项

随机推荐

  • web前端DOM

    1 2 1 什么是DOM 文档对象模型 Document Object Model 简称DOM 是 W3C 组织推荐的处理可扩展标记语言 html或者xhtml 的标准编程接口 W3C 已经定义了一系列的 DOM 接口 通过这些 DOM 接
  • 2023.1.30日学习内容(多线程接收,发送文件)

    1 多线程接收文件 1 线程文件 public Socket socket public MyThread Socket socket this socket socket Override public void run try Stri
  • WordGo导出word(list)

    导出word文档 param userResume public String getWord BasUserResume userResume WordGo wordGo new WordGo wordGo add userResume
  • 计算机网络期中测验

    目录 一 单选题 二 填空题 三 判断题 一 单选题 1 单选题 采用全双工通信方式 数据传输的方向为 A 可以在两个方向上传输但不能同时进行 B 只能在一个方向上传输 C 可以在两个方向上同时传输 D 以上均不对 答案 C 解析 三种通信
  • 百度移动统计热力图和事件分析的坑

    埋点是这2年比较火的一项技术 友盟 极光推送 腾讯云 百度移动统计都相继开发了增加埋点的SDK 方便开发者使用 其中最为先进的是百度移动统计的无埋点技术 无埋点技术是不用开发者手动埋点的一项技术 很方便使用 对开发减少了开发量 太赞 集成步
  • jieba如何自行 split 或 join ?

    目录 jieba suggest freq 源码 split 关键运行过程解释 注意 使用此函数也有可能分不开 join 关键运行过程解释 jieba add word del word 源码 参考文献 jieba suggest freq
  • 联想拯救者R720 - i5-7300HQ/1050ti(macOS Big Sur/Windows) 双系统在 OpenCore (6.0.3)/ OCC (2.5.0)引导下的安装过程

    前言 重要 硬件列表 拯救者R720 处理器 型号 i5 7300HQ 架构 kaby lake 显卡 核显 UHD630 独显无效 忽略 主板 系列 100 Series 网卡 型号自选自购 不做陈列 声卡 批次不同 型号不同 不做陈列
  • [Unity好插件之PlayMaker]PlayMaker如何扩展额外创建更多的脚本

    学习目标 如果你正在学习使用PlayMaker的话 那么本篇文章将非常的适用 关于如何连线则是你自己的想法 本篇侧重于扩展适用更多的PlayMaker行为Action 那么什么是PlayMaker行为Action呢 就是这个列表 当我们要给
  • js echarts 固定颜色按顺序组合 或者随机生成颜色

    在使用echarts的时候或者大转盘的时候 数据量总是很多 但是颜色可以随机生成 也可以使用自己固定的颜色 这边我就分享了一下几种按照顺序组成颜色的代码 第一种 通过循环颜色 用一个splice 删一个 如果颜色没有了 再重新给他原来的数组
  • 常用事务代码(转)

    Pfcg 绝色维护 Su53 查看权限对象 st01 跟踪 St22 看dump 以分析错误 eg 找到ABAP程序出错的地方 找出founction 用se37查看找到的founction 找到有关权限检查 authority check
  • scscanner:一款功能强大的大规模状态码扫描工具

    关于scscanner scscanner是一款功能强大的大规模状态码扫描工具 该工具可以帮助广大研究人员从一个URL列表文件中批量读取目标网站的状态码响应信息 除此之外 该工具还可以过滤出指定的状态码 并将结果存储到一个文件中以供后续深入
  • neon常用指令(updating)

    函数参考手册 https developer arm com architectures instruction sets simd isas neon intrinsics 并在左侧选择neon Neon 128bit寄存器 所以可支持并
  • mysql将一张表插入到另一张表

    1 表1和表2的字段完全相同且要把表2所有的数据都插入到表1 可以用这种方法 insert into table1 select from table2 2 但是更多的时候我们只希望导入指定字段 可以用这种方法 insert into ta
  • 冯思远:Apache TVM 与机器学习编译发展

    下午好 欢迎大家今天来参加 2023 Meet TVM 作为 Apache TVM PMC 由我来给大家做关于 TVM 的发展以及 TVM 未来 Unity 框架的分享 Apache TVM Evolution 首先为什么会有 MLC Ma
  • 双指针算法模板及例题

    双指针算法时间复杂度O n 一般双指针算法运用于有序的某一个或两个序列中 从O n2 优化到O n 算法模板 for int i 0 j 0 i lt n i while j lt i check i j j 具体问题的逻辑 常见问题分类
  • stm32 mpu6050 cubemx 卡尔曼滤波法读取角度

    文章目录 前言 一 cubemx配置 二 mpu6050文件移植 mpu6050 c mpu6050 h 三 主函数 前言 本文简述使用mpu6050读取原始数据后解算出角度 网上大多都是dmp库来解算 但是这种情况操作起来相对复杂 更方便
  • electron入门案例

    目录解构 main js 主进程文件 用来控制整个应用程序 仅有一个 index html 渲染模板 render index js 渲染进程文件 用来控制页面的渲染 可有多个 package json 依赖包 主进程代码 在electro
  • 四. ZooKeeper 作为 SpringCloud 注册中心配置

    目录 一 简单概述 二 配置服务注册到 ZooKeeper 1 服务提供方 yml 文件配置注册到 ZooKeeper 2 服务消费方 yml 文件配置注册到 ZooKeeper 3 服务消费方配置 RestTemplate 注入到容器中
  • 【JAVA】我们常常谈到的方法是指什么?

    个人主页 个人主页 系列专栏 初识JAVA 文章目录 前言 方法 方法的分类 方法的定义 方法调用 方法重载 前言 在之前的文章中我们总是会介绍到类中的各式各样的方法 也许在应用中我们对它已经有了初步的了解 今天我们就来详细的介绍一下 方法
  • 经典卷积神经网络(CNN)图像分类算法详解

    本文原创 转载请引用 https blog csdn net dan teng article details 87192430 CNN图像分类网络 一点废话 CNN网络主要特点是使用卷积层 这其实是模拟了人的视觉神经 单个神经元只能对某种