热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

CNN经典模型

上一篇文章介绍了CNN的基础知识以及它的优势,今天这篇文章主要来看一看一些著名的卷积神经网络的结构特点,以便我们对CNN有更加直观地认识。一、LeNet

 

机器不学习:窥探CNN经典模型——他山之玉 可以攻石

 


上一篇文章介绍了CNN的基础知识以及它的优势,今天这篇文章主要来看一看一些著名的卷积神经网络的结构特点,以便我们对CNN有更加直观地认识。


一、LeNet-5

论文:http://yann.lecun.com/exdb/publis/pdf/lecun-01a.pdf

这个可以说是CNN的开山之作,由Yann LeCun在1998年提出,可以实现对手写数字、字母的识别。结构如下:

机器不学习:窥探CNN经典模型——他山之玉 可以攻石

 

图中的 subsampling,即“亚采样”,就是我们前面说的pooling,因为pooling其实就是对原图像进行采样的一个过程。它总共7层,分别有2个CONV层,2个POOL层,3个FC层。当然,它的输入规模很小,是32×32大小的单通道图片。

我们可以用下面的式子,来表示上面的网络结构:

Input(32×32)-->CONV(6 filters)-->AvgPOOL-->CONV(16 filters)-->AvgPOOL-->FC(120)-->FC(84)-->FC(10)

细节没什么好说的。后面我们可以试着用TensorFlow或者Keras来复现一下。

二、AlexNet

论文:http://vision.stanford.edu/teaching/cs231b_spring1415/slides/alexnet_tugce_kyunghee.pdf

AlexNet于2012年由Alex Krizhevsky, Ilya Sutskever 和 Geoffrey Hinton等人提出,并在2012 ILSVRC (ImageNet Large-Scale Visual Recognition Challenge)中取得了最佳的成绩。这也是第一次CNN取得这么好的成绩,并且把第二名远远地甩在了后面,因此震惊了整个领域,从此CNNs才开始被大众所熟知。

这里简单地说一下这个ILSVRC,它是一个ImageNet发起的挑战,是计算机视觉领域的奥运会。全世界的团队带着他们的模型来对ImageNet中的数以千万的共1000个类别的图片进行分类、定位、识别。这个是一个相当有难度的工作,1000个类别啊。

那我们来看看这个AlexNet的结构把:

机器不学习:窥探CNN经典模型——他山之玉 可以攻石

 

图片来源:https://www.learnopencv.com/understanding-alexnet/

输入的图片是256×256,然后进行随机的裁剪得到227×227大小,然后输入进网络中。可见,这个输入比LeNet的要大得多,这种大小,在当年已经是图片的主流大小了。

AlexNet共有8层,其中5个CONV层和3个FC层,这里没有算上POOL层,因为严格意义上它不算层,因为没有可训练的参数。

关于AlexNet有如下要点:


  1. 用ImageNet的1500万张来自2万2千个类别的图片进行训练,在两个GTX 580 GPU上训练了5,6天;使用ReLU激活函数,而之前的神经网络,包括LeNet,都是使用sigmoid或者tanh激活函数,AlexNet证明了ReLU函数在效率效果上更佳,速度提高很多倍;使用了很多的数据扩增技术(Dada Augmentation),比如图片反转、剪切、平移等等,来扩充训练集,使得训练的模型鲁棒性更强;第一次使用dropout正则化技术;使用mini-batch SGD(也成随机梯度下降)来加快训练。

总之,AlexNet让人们认识到CNN的强大和巨大的潜能,并为之后的研究提供了很多有用的经验和技术。

三、VGG Net

论文:https://arxiv.org/pdf/1409.1556.pdf

这个网络于2014年被牛津大学的Karen Simonyan 和Andrew Zisserman提出,主要特点是 “简洁,深度”。 深, 是因为VGG有19层,远远超过了它的前辈; 而简洁,则是在于它的结构上,一律采用stride为1的3×3filter,以及stride为2的2×2MaxPooling。所以虽然深,但是结构大家一眼就可以记住。

机器不学习:窥探CNN经典模型——他山之玉 可以攻石

 

这个图来自于VGG的论文,每一列是他们研究的不同的结构,我们直接看E的那个结构,不难发现,若干个CONV叠加,然后配一个MaxPooling,再若干个CONV,再加一个MaxPooling,最后三个FC。而且,每个MaxPooling之后,CONV的filter的个数都翻倍,分别是64,128,256,512,结构十分规则有规律。

VGG刷新了CNN的深度,其简明的结构更是让人印象深刻。

四、Inception Net(GoogleNet)

论文:https://www.cs.unc.edu/~wliu/papers/GoogLeNet.pdf

看了前面的网络结构之后,我们会发现,他们越来越深,filter越来越多,参数越来越多。 似乎提高CNN的表现的方法就是堆叠更多的CONV、POOL层排成一列(我们称之为sequential model,熟悉keras的同学应该知道)就行了。确实那个时候大家都在想方设法增加网络的层数,让我们的CNN更加庞大。

但我们也应该清楚,一味地增加层数、增加通道数(filters越多,输出图像的通道数就越多),会让我们的计算量急剧增加,模型变得过于复杂,从而更容易过拟合,这样反而会让模型的性能下降。

Inception Net不再是使用Sequential model,在结构上有了重大创新。

在sequential model中,所有操作,无论是CONV还是POOL,都是排成一些序列。但是Google他们就想,为什么不可以同时进行各种操作呢?于是论文的作者有一个大胆的想法,假如我们有3个CONV和一个MaxPOOL,何不让它们平行地运算,然后再整合在一起?:

机器不学习:窥探CNN经典模型——他山之玉 可以攻石

 

这样做有一个问题,就是,整合在一起之后,channels这个维度会过大。

于是作者想出了一个好办法,那就是使用filter为1×1的CONV来进行降维:

机器不学习:窥探CNN经典模型——他山之玉 可以攻石

 

前面学过了卷积的操作,我们知道,一个1×1的filter去卷积,图像的长和宽都不会变化,同时,输出图像的channels数等于filters的个数,所以对于图中的192个channels的图像,我们用32个filter,就可以把维度降低到32维。

于是,我们可以利用1×1CONV的这个特点,来改造上面的整合过程:

机器不学习:窥探CNN经典模型——他山之玉 可以攻石

 

可见,通过使用1×1CONV,输出的通道数大大减少,这样,整个模型的参数也会大大减少。

上面这个部分,称为“Inception Module”,而Inception Network,就是由一个个的inception module组成的:

机器不学习:窥探CNN经典模型——他山之玉 可以攻石

 

图片来源:https://adeshpande3.github.io/The-9-Deep-Learning-Papers-You-Need-To-Know-About.html

通过inception module,GoogleNet成功地把CNN的层数增加到了超过100层!(如果把一个module当做一层的话,则是22层)。

这个GoogleNet就牛逼了,名副其实地“深”,而且参数的数量也比我们前面介绍的AlexNet要少很多倍!所以训练出的模型不仅效果好,而且更快。

五、ResNet (残差网络)

论文:https://arxiv.org/pdf/1512.03385.pdf

最后要介绍的就是ResNet,于2015年由微软亚洲研究院的学者们提出。

前面讲了,CNN面临的一个问题就是,随着层数的增加,CNN的效果会遇到瓶颈,甚至会不增反降。这往往是梯度爆炸或者梯度消失引起的。

ResNet就是为了解决这个问题而提出的,因而帮助我们训练更深的网络。 它引入了一个 residual block(残差块):

机器不学习:窥探CNN经典模型——他山之玉 可以攻石

 

这个图来自原论文。 可以很直观地看出,这个残差块把某一层的激活值,直接一把抓到了后面的某一层之前 ,这个过程称之为“skip connection(跳跃连接)”。 这个做法,相当于把前面的信息提取出来,加入到当前的计算中,论文作者认为,这样的做法,可以 使神经网络更容易优化。事实上却是是这样。

通过这种residual block,他们成功地搭建了一个拥有 152层的CNN!深不见底! 我从论文中截取网络的一部分如下:

机器不学习:窥探CNN经典模型——他山之玉 可以攻石

 

关于具体的细节以及为什么residual block有效,可以查阅原论文或者网上的其他教程。

转自:https://www.zhihu.com/people/guo-bi-yang-78/posts


推荐阅读
  • 探索CNN的可视化技术
    神经网络的可视化在理论学习与实践应用中扮演着至关重要的角色。本文深入探讨了三种有效的CNN(卷积神经网络)可视化方法,旨在帮助读者更好地理解和优化模型。 ... [详细]
  • 图像处理学习笔记:噪声分析与去除策略
    本文详细探讨了不同类型的图像噪声及其对应的降噪技术,旨在帮助读者理解各种噪声的本质,并掌握有效的降噪方法。文章不仅介绍了高斯噪声、瑞利噪声、伽马噪声、指数噪声、均匀噪声和椒盐噪声等常见噪声类型,还特别讨论了周期噪声的特性及处理技巧。 ... [详细]
  • 精选10款Python框架助力并行与分布式机器学习
    随着神经网络模型的不断深化和复杂化,训练这些模型变得愈发具有挑战性,不仅需要处理大量的权重,还必须克服内存限制等问题。本文将介绍10款优秀的Python框架,帮助开发者高效地实现分布式和并行化的深度学习模型训练。 ... [详细]
  • 本文总结了在多人协作开发环境中使用 Git 时常见的问题及其解决方案,包括错误合并分支的处理、使用 SourceTree 查找问题提交、Git 自动生成的提交信息解释、删除远程仓库文件夹而不删除本地文件的方法、合并冲突时的注意事项以及如何将多个提交合并为一个。 ... [详细]
  • 本文分享了作者在使用LaTeX过程中的几点心得,涵盖了从文档编辑、代码高亮、图形绘制到3D模型展示等多个方面的内容。适合希望深入了解LaTeX高级功能的用户。 ... [详细]
  • 使用Matlab创建动态GIF动画
    动态GIF图可以有效增强数据表达的直观性和吸引力。本文将详细介绍如何利用Matlab软件生成动态GIF图,涵盖基本代码实现与高级应用技巧。 ... [详细]
  • 2023年,Android开发前景如何?25岁还能转行吗?
    近期,关于Android开发行业的讨论在多个平台上热度不减,许多人担忧其未来发展。本文将探讨当前Android开发市场的现状、薪资水平及职业选择建议。 ... [详细]
  • OBS Studio自动化实践:利用脚本批量生成录制场景
    本文探讨了如何利用OBS Studio进行高效录屏,并通过脚本实现场景的自动生成。适合对自动化办公感兴趣的读者。 ... [详细]
  • 本文源自Coursera平台吴恩达教授的深度学习课程,重点探讨了卷积神经网络(ConvNets)从二维图像处理向一维信号及三维数据处理的拓展应用。 ... [详细]
  • HTML:  将文件拖拽到此区域 ... [详细]
  • 解决Pytesser模块在Windows环境下出现的错误
    本文详细探讨了如何解决在Windows环境中使用Pytesser模块进行OCR(光学字符识别)时遇到的WindowsError错误,提供了具体的解决方案。 ... [详细]
  • 本文介绍了一种通过设置主题(Theme)来实现快速启动的Android引导页,并详细说明了如何避免因不同屏幕分辨率导致的图片拉伸问题。 ... [详细]
  • web页面报表js下载,web报表软件 ... [详细]
  • 说明Python教程正在编写中,欢迎大家加微信sinbam提供意见、建议、纠错、催更。drymail是一个邮件发送库,封装了Python的smtplib ... [详细]
  • 本文整理了关于Sia去中心化存储平台的重要网址和资源,旨在为研究者和用户提供全面的信息支持。 ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有