#Deep Learning回顾#之LeNet、AlexNet、GoogLeNet、VGG、ResNet

转载自博客园:#Deep Learning回顾#之LeNet、AlexNet、GoogLeNet、VGG、ResNet

CNN的发展史

       上一篇回顾讲的是2006年Hinton他们的Science Paper,当时提到,2006年虽然Deep Learning的概念被提出来了,但是学术界的大家还是表示不服。当时有流传的段子是Hinton的学生在台上讲paper时,台下的机器学习大牛们不屑一顾,质问你们的东西有理论推导吗?有数学基础吗?搞得过SVM之类吗?回头来看,就算是真的,大牛们也确实不算无理取闹,是骡子是马拉出来遛遛,不要光提个概念。

       时间终于到了2012年,Hinton的学生Alex Krizhevsky在寝室用GPU死磕了一个Deep Learning模型,一举摘下了视觉领域竞赛ILSVRC 2012的桂冠,在百万量级的ImageNet数据集合上,效果大幅度超过传统的方法,从传统的70%多提升到80%多。个人觉得,当时最符合Hinton他们心境的歌非《我不做大哥好多年》莫属。

       这个Deep Learning模型就是后来大名鼎鼎的AlexNet模型。这从天而降的AlexNet为何能耐如此之大?有三个很重要的原因:

  1. 大量数据,Deep Learning领域应该感谢李飞飞团队搞出来如此大的标注数据集合ImageNet;
  2. GPU,这种高度并行的计算神器确实助了洪荒之力,没有神器在手,Alex估计不敢搞太复杂的模型;
  3. 算法的改进,包括网络变深、数据增强、ReLU、Dropout等,这个后面后详细介绍。

       从此,Deep Learning一发不可收拾,ILSVRC每年都不断被Deep Learning刷榜,如图1所示,随着模型变得越来越深,Top-5的错误率也越来越低,目前降到了3.5%附近,而在同样的ImageNet数据集合上,人眼的辨识错误率大概在5.1%,也就是目前的Deep Learning模型的识别能力已经超过了人眼。而图1中的这些模型,也是Deep Learning视觉发展的里程碑式代表。

ImageNet
图1. ILSVRC历年的Top-5错误率

       在仔细分析图1中各模型结构之前我们先需要了解一下深度学习三驾马车之一————LeCun的LeNet网络结构。为何要提LeCun和LeNet,因为现在视觉上这些神器都是基于卷积神经网络(CNN)的,而LeCun是CNN的祖师爷,LeNet是LeCun打造的CNN经典之作。

       LeNet以其作者名字LeCun命名,这种命名方式类似的还有AlexNet,后来又出现了以机构命名的网络结构GoogLeNet、VGG,以核心算法命名的ResNet。LeNet有时也被称作LeNet5或者LeNet-5,其中的5代表五层模型。不过别急,LeNet之前其实还有一个更古老的CNN模型。


最古老的CNN模型

       1985年,Rumelhart和Hinton等人提出了后向传播(Back Propagation,BP)算法[1](也有说1986年的,指的是他们另一篇paper:Learning representations by back-propagating errors),使得神经网络的训练变得简单可行,这篇文章在Google Scholar上的引用次数达到了19000多次,目前还是比Cortes和Vapnic的Support-Vector Networks稍落后一点,不过以Deep Learning最近的发展劲头来看,超越指日可待。

       几年后,LeCun利用BP算法来训练多层神经网络用于识别手写邮政编码[2],这个工作就是CNN的开山之作,如图2所示,多处用到了5*5的卷积核,但在这篇文章中LeCun只是说把5*5的相邻区域作为感受野,并未提及卷积或卷积神经网络。关于CNN最原始的雏形感兴趣的读者也可以关注一下文献[10]。

ImageNet
图2. 最古老的CNN网络结构图

LeNet

       1998年的LeNet5[4]标注着CNN的真正面世,但是这个模型在后来的一段时间并未能火起来,主要原因是费机器(当时苦逼的没有GPU啊),而且其他的算法(SVM,老实说是你干的吧?)也能达到类似的效果甚至超过。

LeNet
图3. LeNet网络结构

       初学者也可以参考一下Caffe中的配置文件:
https://github.com/BVLC/caffe/blob/master/examples/mnist/lenet.prototxt


AlexNet、VGG、GoogLeNet、ResNet对比

       LeNet主要是用于识别10个手写数字的,当然,只要稍加改造也能用在ImageNet数据集上,但效果较差。而本文要介绍的后续模型都是ILSVRC竞赛历年的佼佼者,这里具体比较AlexNet、VGG、GoogLeNet、ResNet四个模型。如表1所示。

模型名AlexNetVGGGoogLeNetResNet
初入江湖2012201420142015
层数81922152
Top-5错误16.4%7.3%6.7%3.57%
Data Augmentation++++
Inception(NIN)+
卷积层数51621151
卷积核大小11,5,337,1,3,57,1,3,5
全连接层数3311
全连接层大小4096,4096,10004096,4096,100010001000
Dropout++++
Local Response Normalization++
Batch Normalization+
表1 AlexNet、VGG、GoogLeNet、ResNet对比

AlexNet

       接下里直接上图即可,AlexNet结构图如下:

ImageNet
图4. AlexNet网络结构

       换个视角:

ImageNet
图5. AlexNet网络结构精简版

       AlexNet相比传统的CNN(比如LeNet)有哪些重要改动呢:
(1) Data Augmentation
       数据增强,这个参考李飞飞老师的cs231课程是最好了。常用的数据增强方法有:

  • 水平翻转
Flip
  • 随机裁剪、平移变换
Crops/Scales
  • 颜色、光照变换
Jittering

(2) Dropout

       Dropout方法和数据增强一样,都是防止过拟合的。Dropout应该算是AlexNet中一个很大的创新,以至于Hinton在后来很长一段时间里的Talk都拿Dropout说事,后来还出来了一些变种,比如DropConnect等。

(3) ReLU激活函数

       用ReLU代替了传统的Tanh或者Logistic。好处有:

  1. ReLU本质上是分段线性模型,前向计算非常简单,无需指数之类操作;
  2. ReLU的偏导也很简单,反向传播梯度,无需指数或者除法之类操作;
  3. ReLU不容易发生梯度发散问题,Tanh和Logistic激活函数在两端的时候导数容易趋近于零,多级连乘后梯度更加约等于0;
  4. ReLU关闭了右边,从而会使得很多的隐层输出为0,即网络变得稀疏,起到了类似L1的正则化作用,可以在一定程度上缓解过拟合。

       当然,ReLU也是有缺点的,比如左边全部关了很容易导致某些隐藏节点永无翻身之日,所以后来又出现pReLU、random ReLU等改进,而且ReLU会很容易改变数据的分布,因此ReLU后加Batch Normalization也是常用的改进的方法。

(4) Local Response Normalization
       Local Response Normalization要硬翻译的话是局部响应归一化,简称LRN,实际就是利用临近的数据做归一化。这个策略贡献了1.2%的Top-5错误率。

(5) Overlapping Pooling
       Overlapping的意思是有重叠,即Pooling的步长比Pooling Kernel的对应边要小。这个策略贡献了0.3%的Top-5错误率。

(6) 多GPU并行
       这个不多说,比一臂之力还大的洪荒之力。


VGG

       VGG结构图

VGG
图6. VGG系列网络结构

       换个视角看看VGG-19:

VGG-19
图7. VGG-19网络结构精简版

       VGG很好地继承了AlexNet的衣钵,一个字:深,两个字:更深。


GoogLeNet

googlenet
图8. GoogLeNet网络结构

       GoogLeNet依然是:没有最深,只有更深。

       主要的创新在于他的Inception,这是一种网中网(Network In Network)的结构,即原来的结点也是一个网络。Inception一直在不断发展,目前已经V2、V3、V4了,感兴趣的同学可以查阅相关资料。Inception的结构如图9所示,其中1*1卷积主要用来降维,用了Inception之后整个网络结构的宽度和深度都可扩大,能够带来2-3倍的性能提升。

inception
图9. Inception结构

ResNet

网络结构如图10所示。

resnet
图10. ResNet网络结构

       ResNet依然是:没有最深,只有更深(152层)。听说目前层数已突破一千。

       主要的创新在残差网络,如图11所示,其实这个网络的提出本质上还是要解决层次比较深的时候无法训练的问题。这种借鉴了Highway Network思想的网络相当于旁边专门开个通道使得输入可以直达输出,而优化的目标由原来的拟合输出H(x)变成输出和输入的差H(x)-x,其中H(X)是某一层原始的的期望映射输出,x是输入。

residual
图11. ResNet网络结构

总结

Deep Learning一路走来,大家也慢慢意识到模型本身结构是Deep Learning研究的重中之重,而本文回顾的LeNet、AlexNet、GoogLeNet、VGG、ResNet又是经典中的经典。

随着2012年AlexNet的一举成名,CNN成了计算机视觉应用中的不二选择。目前,CNN又有了很多其他花样,比如R-CNN系列,详情敬请期待我爱机器学习网站(52ml.net)的#Deep Learning回顾#下一期。

本文只是简单回顾,疏漏之处敬请谅解,感兴趣的可以加QQ群一起学习:252085834

[参考文献]
[1] DE Rumelhart, GE Hinton, RJ Williams, Learning internal representations by error propagation. 1985 – DTIC Document.
[2] Y. LeCun , B. Boser , J. S. Denker , D. Henderson , R. E. Howard , W. Hubbard and L. D. Jackel, “Backpropagation applied to handwritten zip code recognition”, Neural Computation, vol. 1, no. 4, pp. 541-551, 1989.
[3] Kaiming He, Deep Residual Learning, http://image-net.org/challenges/talks/ilsvrc2015_deep_residual_learning_kaiminghe.pdf
[4] Y. LeCun, L. Bottou, Y. Bengio, and P. Haffner. Gradient-based learning applied to document recognition. Proceedings of the IEEE, 86(11):2278–2324, 1998.
[5] A. Krizhevsky, I. Sutskever, and G. Hinton. Imagenet classification with deep convolutional neural networks. In Advances in Neural Information Processing Systems 25, pages 1106–1114, 2012.
[6] Christian Szegedy, Wei Liu, Yangqing Jia, Pierre Sermanet, Scott E. Reed, Dragomir Anguelov, Dumitru Erhan, Vincent Vanhoucke, Andrew Rabinovich: Going deeper with convolutions. CVPR 2015: 1-9
[7] Karen Simonyan, Andrew Zisserman: Very Deep Convolutional Networks for Large-Scale Image Recognition. CoRR abs/1409.1556 (2014)
[8] Kaiming He, Xiangyu Zhang, Shaoqing Ren, and Jian Sun. Deep Residual Learning for Image Recognition. IEEE Conference on Computer Vision and Pattern Recognition (CVPR), 2016
[9] 一些对应的caffe实现或预训练好的模型: https://github.com/BVLC/caffe https://github.com/BVLC/caffe/wiki/Model-Zoo
[10] K. Fukushima. Neocognitron: A self-organizing neural network model for a mechanism of pattern recognition unaffected by shift in position. Biological Cybernetics, 36(4): 93-202, 1980.

<think>我们被要求提供AlexNetVGGGoogleNet(也称为Inception v1)和ResNet四个经典图像分类模型的预训练模型下载网址。这些模型通常在大型数据集(如ImageNet)上训练,并且被广泛用于迁移学习和特征提取。 根据已知信息,这些模型通常可以通过以下渠道获取: 1. 官方发布的模型(如果作者提供了) 2. 深度学习框架(如PyTorch、TensorFlow、Keras等)的模型库 3. 模型仓库(如TensorFlow Hub、PyTorch Hub、Hugging Face Model Hub等) 以下分别列出四个模型常见的预训练模型下载来源: 1. **AlexNet**: - PyTorch: 可以通过`torchvision.models.alexnet`加载预训练模型,权重来自ImageNet训练。 - TensorFlow: 可以通过TensorFlow Hub(hub.tensorflow.google.cn)搜索AlexNet,但注意TensorFlow官方可能没有直接提供AlexNet,但社区有实现。 2. **VGG** (包括VGG16和VGG19): - PyTorch: 使用`torchvision.models.vgg16(pretrained=True)`或`vgg19(pretrained=True)` - TensorFlow: Keras中提供了VGG16和VGG19,通过`tf.keras.applications.VGG16`和`VGG19`,设置`weights=&#39;imagenet&#39;` - 也可以在TensorFlow Hub上找到。 3. **GoogleNet** (即Inception v1): - PyTorch: `torchvision.models.googlenet(pretrained=True)` - TensorFlow: `tf.keras.applications.InceptionV3`(注意:InceptionV3是改进版,原版Inception v1在Keras中没有直接提供,但可以通过其他方式获取,或者使用InceptionV3替代) - TensorFlow Hub: 可以找到Inception v1的预训练模型。 4. **ResNet** (包括ResNet18, ResNet34, ResNet50, ResNet101, ResNet152等): - PyTorch: 使用`torchvision.models.resnet18(pretrained=True)`等(将数字替换为对应的版本) - TensorFlow: `tf.keras.applications.ResNet50`(以及其他版本)设置`weights=&#39;imagenet&#39;` - TensorFlow Hub: 有多种ResNet模型。 由于直接提供下载网址可能会因为框架版本和来源变动而过时,通常建议通过代码加载预训练模型(这样会自动下载)。以下提供一些通用的获取方式: ### PyTorch 用户 ```python import torchvision.models as models # 加载预训练模型(首次运行会自动下载) alexnet = models.alexnet(pretrained=True) vgg16 = models.vgg16(pretrained=True) googlenet = models.googlenet(pretrained=True) resnet50 = models.resnet50(pretrained=True) ``` 下载的模型默认保存在`~/.cache/torch/hub/checkpoints`目录(Linux/Mac)或`C:\Users\<username>\.cache\torch\hub\checkpoints`(Windows)。 ### TensorFlow/Keras 用户 ```python import tensorflow as tf # 加载预训练模型(首次运行会自动下载) # 注意:对于GoogleNet,Keras中通常使用InceptionV3作为代表 vgg16 = tf.keras.applications.VGG16(weights=&#39;imagenet&#39;) inception_v3 = tf.keras.applications.InceptionV3(weights=&#39;imagenet&#39;) resnet50 = tf.keras.applications.ResNet50(weights=&#39;imagenet&#39;) # 对于AlexNet,Keras官方没有提供,但可以通过其他方式获取,例如: # 在TensorFlow Hub中搜索:https://tfhub.dev/s?q=alexnet ``` ### 直接下载网址(如果用户想要手动下载) - **PyTorch模型权重**:可以在PyTorch官网的模型文档中找到链接,或者通过代码加载时控制台输出的下载链接获取。 - **TensorFlow模型权重**:在首次加载时自动下载,下载地址通常为: - VGG16: `https://storage.googleapis.com/tensorflow/keras-applications/vgg16/vgg16_weights_tf_dim_ordering_tf_kernels.h5` - InceptionV3: `https://storage.googleapis.com/tensorflow/keras-applications/inception_v3/inception_v3_weights_tf_dim_ordering_tf_kernels.h5` - ResNet50: `https://storage.googleapis.com/tensorflow/keras-applications/resnet/resnet50_weights_tf_dim_ordering_tf_kernels.h5` - **TensorFlow Hub**:提供预训练模型的封装,可以直接通过URL使用模型。例如: - AlexNet: `https://tfhub.dev/google/imagenet/alexnet/classification/4` - 其他模型可以在https://tfhub.dev/搜索。 ### 针对每个模型的下载网址(手动下载权重文件) 1. **AlexNet**: - PyTorch权重:https://download.pytorch.org/models/alexnet-owt-7be5be79.pth - TensorFlow Hub模型:https://tfhub.dev/google/imagenet/alexnet/classification/4(整个模型,包含分类层) 2. **VGG16**: - PyTorch权重(VGG16): https://download.pytorch.org/models/vgg16-397923af.pth - Keras权重(VGG16): https://storage.googleapis.com/tensorflow/keras-applications/vgg16/vgg16_weights_tf_dim_ordering_tf_kernels.h5 - TensorFlow Hub: https://tfhub.dev/tensorflow/vgg19/1(注意是VGG19,VGG16也有) 3. **GoogleNet** (Inception v1): - PyTorch权重:https://download.pytorch.org/models/googlenet-1378be20.pth - TensorFlow Hub(Inception v1): https://tfhub.dev/google/imagenet/inception_v1/classification/4 4. **ResNet50**: - PyTorch权重:https://download.pytorch.org/models/resnet50-19c8e357.pth - Keras权重:https://storage.googleapis.com/tensorflow/keras-applications/resnet/resnet50_weights_tf_dim_ordering_tf_kernels.h5 - TensorFlow Hub:https://tfhub.dev/tensorflow/resnet_50/classification/1 注意:以上链接可能会随着时间推移而发生变化,如果链接失效,建议通过框架的API自动下载,或者去官方仓库查找最新链接。 另外,对于GoogleNet,注意Inception v1和Inception v3的区别。这里提供的是Inception v1(即原始GoogleNet)的PyTorch权重和TensorFlow Hub模型。 ### 补充说明 - 如果用户需要其他变体(如VGG19、ResNet101等),可以在下载链接的基础上调整(通常修改文件名中的数字)。 - 手动下载后,可以通过框架的API加载本地权重文件。 ### 引用说明 在回答中,我们参考了这些模型在各自框架中的标准实现,下载链接来自官方渠道。用户可以根据自己使用的框架选择下载方式。 [^1]: AlexNet论文: ImageNet Classification with Deep Convolutional Neural Networks, 2012. [^2]: VGG论文: Very Deep Convolutional Networks for Large-Scale Image Recognition, 2014. [^3]: GoogLeNet论文: Going Deeper with Convolutions, 2014. [^4]: ResNet论文: Deep Residual Learning for Image Recognition, 2015. §§相关问题§§ 1. 如何在自己的数据集上微调这些预训练模型? 2. 这些预训练模型在ImageNet上的准确率分别是多少? 3. 除了ImageNet,这些模型还有哪些预训练版本? </think>以下是AlexNetVGGGoogleNet(Inception v1)和ResNet四个经典图像分类模型的预训练权重下载地址汇总: ### 1. AlexNet - **PyTorch官方模型** ```python torchvision.models.alexnet(pretrained=True) ``` 权重文件直链: `https://download.pytorch.org/models/alexnet-owt-7be5be79.pth` 文档:[PyTorch AlexNet](https://pytorch.org/vision/stable/models/alexnet.html) - **TensorFlow模型** 官方未直接提供,可通过第三方实现: `https://github.com/keras-team/keras-applications/issues/36#issuecomment-370228296` ### 2. VGGVGG16/VGG19) - **PyTorch官方模型** ```python torchvision.models.vgg16(pretrained=True) torchvision.models.vgg19(pretrained=True) ``` 权重直链: VGG16: `https://download.pytorch.org/models/vgg16-397923af.pth` VGG19: `https://download.pytorch.org/models/vgg19-dcbb9e9d.pth` 文档:[PyTorch VGG](https://pytorch.org/vision/stable/models/vgg.html) - **TensorFlow/Keras官方模型** ```python tf.keras.applications.VGG16(weights=&#39;imagenet&#39;) ``` 权重直链: VGG16: `https://storage.googleapis.com/tensorflow/keras-applications/vgg16/vgg16_weights_tf_dim_ordering_tf_kernels.h5` 文档:[Keras VGG](https://keras.io/api/applications/vgg/) ### 3. GoogleNet(Inception v1) - **PyTorch官方模型** ```python torchvision.models.googlenet(pretrained=True) ``` 权重直链: `https://download.pytorch.org/models/googlenet-1378be20.pth` 文档:[PyTorch GoogLeNet](https://pytorch.org/vision/stable/models/googlenet.html) - **TensorFlow官方模型** Inception v1在TensorFlow Hub: `https://tfhub.dev/google/imagenet/inception_v1/classification/4` ### 4. ResNetResNet18/50/101等) - **PyTorch官方模型** ```python torchvision.models.resnet50(pretrained=True) ``` 权重直链(ResNet50): `https://download.pytorch.org/models/resnet50-19c8e357.pth` 文档:[PyTorch ResNet](https://pytorch.org/vision/stable/models/resnet.html) - **TensorFlow/Keras官方模型** ```python tf.keras.applications.ResNet50(weights=&#39;imagenet&#39;) ``` 权重直链: `https://storage.googleapis.com/tensorflow/keras-applications/resnet/resnet50_weights_tf_dim_ordering_tf_kernels.h5` 文档:[Keras ResNet](https://keras.io/api/applications/resnet/) --- ### 使用说明: 1. **PyTorch用户**:通过`torchvision.models`加载模型时设置`pretrained=True`会自动下载权重 2. **TensorFlow用户**: - Keras:使用`tf.keras.applications`加载模型并设置`weights=&#39;imagenet&#39;` - TensorFlow Hub:使用`hub.load()`加载模型链接 3. **手动下载**:右键点击直链→"另存为"即可下载权重文件(.pth或.h5格式) > 所有官方预训练模型均在ImageNet数据集上训练,输出层包含1000个类别[^1][^2][^3] > 建议优先使用深度学习框架的API自动下载,避免手动下载路径错误问题[^4]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值