Chapter5 卷积神经网络基础
5.1 为什么要“深度学习”
5.1.1 全连接网络问题
-
全连接网络:
- 链接权过多,算的慢,难收敛,同时可能进入局部极小值,也容易产生过拟合问题;
- 举例:输入为 1000 × 1000 1000 \times 1000 1000×1000 图像,隐含层有 1 M 1M 1M 个节点,则输入到隐含层间有 1 × 1 0 12 1\times10^{12} 1×1012 数量级参数。
-
解决算得慢的问题:
减少权值连接,每一个节点只连到上一层的少数神经元,即局部连接网络。
-
解决难收敛、算得慢的问题:
- 权值过多极易产生过拟合;
- 回到人类解决思路:信息分层处理,每一层在上层提取特征的基础上获取进行再处理,得到更高级别的特征。
5.1.2 深度学习平台
库名 | 发布者 | 支持语言 | 支持系统 |
---|---|---|---|
TensorFlow | Python/ C++/ Java/ Go | Linux/ Mac OS/ Android/ IOS | |
Caffe | UC Berkeley | Python/ C++/ MatLab | Linux/ Mac OS/ Windows |
JAX | Python | Linux/ Windows | |
MXNet | Amazon/ DMLC | Python/ C++/ MatLab/ Julia/ Go/ Scala | Linux/ Mac OS/ Windows/ Android/ IOS |
Torch/Pytorch | C/ Python/ … | Linux/ Mac OS/ Windows/ Android/ IOS | |
PaddlePaddle | Baidu | Python | Linux/ Windows |
MMdetection | SenseTime/CUHK | Python | Linux/ Windows |
5.1.3 Pytorch 简介
-
简介:
- PyTorch 是一个 Python 的深度学习库。它最初由 Facebook 人工智能研究小组开发,而优步的 Pyro 软件则用于概率编程。
- 最初,PyTorch 由 Hugh Perkins 开发,作为基于 Torch 框架的 LusJIT 的 Python 包装器。PyTorch 在 Python 中重新设计和实现 Torch ,同时为后端代码共享相同的核心C库。
- 除了 Facebook 之外,Twitter、GMU 和 Salesforce 等机构都采用了 PyTorch。
- 到目前,据统计已有 80 80% 80 的研究采用 PyTorch,包括 Google。
-
Pytorch 和 TensorFlow2 的对比
-
Pytorch 资源
- 60分钟快速入门:https://jianshu.com/p/889dbc684622;
- 官方教程:https://www.pytorch123.com/;
- 动手学深度学习:https://zh-v2.d2l.ai/;
- Deep learning with pytorch: https://pytorch.org/assets/deep-learning/Deep-Learning-with-PyTorch.pdf。
5.1.4 Pytorch 基本概念
-
张量(Tensor)
是一个物理量,对高维(维数 ≥ 2)的物理量进行“量纲分析” 的一种工具。简单的可以理解为:一维数组称为矢量,二维数组为二阶张量,三维数组为三阶张量……
-
计算图
用“结点”(nodes)和“线”(edges)的有向图来描述数学计算的图像。“节点” 一般用来表示施加的数学操作,但也可以表示数据输入的起点/输出的终点,或者是读取/写入持久变量的终点。“线”表示“节点”之间的输入/输出关系。这些数据“线”可以输运“size可动态调整”的多维数据数组,即“张量”(tensor)。
-
其他概念
- 使用
tensor
表示数据; - 使用
Dataset
、DataLoader
读取数据样本和标签; - 使用变量
Variable
存储神经网络权值等参数; - 使用计算图
computatianal graph
来表示计算任务; - 在代码运行中同时执行计算图。
- 使用
5.2 卷积神经网络基础
5.2.1 进化史
-
各种 net 创立时间:
-
发展道路
-
层数
-
用途:
5.2.2 基本概念
-
特征提取 - 卷积:
- 卷积:相乘再相加;
- 边缘效应:小一圈;
- 注意,图像卷积时,根据数学定义,需要首先把卷积核上下左右转置。此处卷积核(黄色)是对称的,所以忽视;
- 如果视为神经元,则为局部操作,非全连接网络,因为与有限个相连。
-
填充(Padding):也就是在矩阵的边界上填充一些值,以增加矩阵的大小,通常用0或者复制边界像素来进行填充。
-
步长(Stride):如图步长为2
-
多通道卷积:以 RGB 为例
-
池化(Pooling):使用局部统计特征,如均值或最大值,解决特征过多问题。
-
卷积神经网络结构
- 构成:由多个卷积层和下采样层构成,后面可连接全连接网络;
- 卷积层: k k k 个滤波器;
- 下采样层:采用
mean
或者max
; - 后面:连着全连接网络。
5.2.3 学习算法
-
卷积神经网络的 BP 算法
-
下采样层:当前是卷积层,下一层为下采样层,误差如何从下采样层回传?
-
假设为 2 ∗ 2 2*2 2∗2 核平均池化
-
假设为 2 ∗ 2 2*2 2∗2 核卷积
-
假设卷积核为 [ 0.1 0.2 0.2 0.4 ] \begin{bmatrix}0.1&0.2\\0.2&0.4\end{bmatrix} [0.10.20.20.4]
式中,五角星表示图像卷积,计算时需首先上下、左右翻转后再做相关。
-
-
卷积层+卷积层:
卷积层: a [ l ] ( x 1 , y 1 ) = f ( ∑ u = 0 p ∑ v = 0 q a [ l − 1 ] ( x 1 + u , y 1 + v ) w [ l ] , k ( u , v ) ) 卷积层: a [ l + 1 ] ( x i , y i ) = f ( ∑ u = 0 p ∑ v = 0 q a [ l − 1 ] ( x i + u , y i + v ) w [ l + 1 ] , k ( u , v ) ) 因此有: ∂ a [ l + 1 ] ( x i , y i ) ∂ w [ l ] , k = ∑ u = 0 p ∑ v = 0 q ∂ a [ l + 1 ] ( x i , y i ) ∂ a [ l ] ( x i + u , y i + v ) ⋅ ∂ a [ l ] ( x i + u , y i + v ) ∂ w [ l ] , k \begin{aligned} \text{卷积层:}& a^{[l]}(x_1,y_1)= f\left( \sum_{u=0}^p\sum_{v=0}^qa^{[l-1]}(x_1+u,y_1+v)w^{[l],k}(u,v) \right) \\ \text{卷积层:}& a^{[l+1]}(x_i,y_i)= f\left( \sum_{u=0}^p\sum_{v=0}^qa^{[l-1]}(x_i+u,y_i+v)w^{[l+1],k}(u,v) \right) \\ \text{因此有:}& \frac{\partial a^{[l+1]}(x_i,y_i)}{\partial w^{[l],k}}= \sum_{u=0}^p\sum_{v=0}^q\frac{\partial a^{[l+1]}(x_i,y_i)}{\partial a^{[l]}(x_i+u,y_i+v)}\cdot \frac{\partial a^{[l]}(x_i+u,y_i+v)}{\partial w^{[l],k}} \end{aligned} 卷积层:卷积层:因此有:a[l](x1,y1)=f(u=0∑pv=0∑qa[l−1](x1+u,y1+v)w[l],k(u,v))a[l+1](xi,yi)=f(u=0∑pv=0∑qa[l−1](xi+u,yi+v)w[l+1],k(u,v))∂w[l],k∂a[l+1](xi,yi)=u=0∑pv=0∑q∂a[l](xi+u,yi+v)∂a[l+1](xi,yi)⋅∂w[l],k∂a[l](xi+u,yi+v) -
卷积层+全连接层:
卷积层: a [ l ] ( x 1 , y 1 ) = f ( ∑ u = 0 p ∑ v = 0 q a [ l − 1 ] ( x 1 + u , y 1 + v ) w [ l ] , k ( u , v ) ) 全连接层: a [ l + 1 ] ( x i , y i ) = f ( ∑ u = 0 p ∑ v = 0 q a [ l − 1 ] ( x i + u , y i + v ) w [ l + 1 ] , k ( u , v ) ) 因此有: ∂ a [ l + 1 ] ( x i , y i ) ∂ w [ l ] , k = ∑ u = 0 p ∑ v = 0 q ∂ a [ l + 1 ] ( x i , y i ) ∂ a [ l ] ( x i + u , y i + v ) ⋅ ∂ a [ l ] ( x i + u , y i + v ) ∂ w [ l ] , k \begin{aligned} \text{卷积层:}& a^{[l]}(x_1,y_1)= f\left( \sum_{u=0}^p\sum_{v=0}^qa^{[l-1]}(x_1+u,y_1+v)w^{[l],k}(u,v) \right) \\ \text{全连接层:}& a^{[l+1]}(x_i,y_i)= f\left( \sum_{u=0}^p\sum_{v=0}^qa^{[l-1]}(x_i+u,y_i+v)w^{[l+1],k}(u,v) \right) \\ \text{因此有:}& \frac{\partial a^{[l+1]}(x_i,y_i)}{\partial w^{[l],k}}= \sum_{u=0}^p\sum_{v=0}^q\frac{\partial a^{[l+1]}(x_i,y_i)}{\partial a^{[l]}(x_i+u,y_i+v)}\cdot \frac{\partial a^{[l]}(x_i+u,y_i+v)}{\partial w^{[l],k}} \end{aligned} 卷积层:全连接层:因此有:a[l](x1,y1)=f(u=0∑pv=0∑qa[l−1](x1+u,y1+v)w[l],k(u,v))a[l+1](xi,yi)=f(u=0∑pv=0∑qa[l−1](xi+u,yi+v)w[l+1],k(u,v))∂w[l],k∂a[l+1](xi,yi)=u=0∑pv=0∑q∂a[l](xi+u,yi+v)∂a[l+1](xi,yi)⋅∂w[l],k∂a[l](xi+u,yi+v)
-
5.3 LeNet-5 网络
5.3.1 网络介绍
-
网络提出
Gradient-Based Learning Applied to Document Recognition.
——Yann LECUN, LEON BOTTOU, YOSHUA BENGIO, PATRICK HAFFNER
-
网络结构
5.3.2 结构详解
-
C1 层
- 6 个 Feature map 构成;
- 每个神经元对输入进行 5 ∗ 5 5*5 5∗5 卷积;
- 每个神经元对应 5 ∗ 5 + 1 5*5+1 5∗5+1 个参数,共 6 个feature map, 28 ∗ 28 28*28 28∗28 个神经元,因此共有 ( 5 ∗ 5 + 1 ) ∗ 6 ∗ ( 28 ∗ 28 ) = 122 , 304 (5*5+1)*6*(28*28)=122,304 (5∗5+1)∗6∗(28∗28)=122,304 连接。
-
S2 层 - Pooling 层(原始论文)
- 这一层有 6 个通道;
- 降采样。
-
C3 层 - 卷积层
- 这一层有 16 个通道;
- 输出 0 是由输入 0 1 2 的信息卷积获得,输出 1 是由输入1 2 3 的信息获得。
-
S4 层 - 与 S2 层工作相同
-
C5 层
- 120 个神经元;
- 每个神经元同样对输入进行 5 ∗ 5 5*5 5∗5 卷积,与 S4 全连接;
- 总连接数 ( 5 ∗ 5 ∗ 16 + 1 ) ∗ 120 = 48120 (5*5*16+1)*120=48120 (5∗5∗16+1)∗120=48120。
-
F6 层
- 84 个神经元;
- 与 C5 全连接;
- 总连接数 ( 120 + 1 ) ∗ 84 = 10164 (120+1)*84=10164 (120+1)∗84=10164。
-
输出层
- 由欧氏径向基函数单元构成;
- 每类一个单元;
- 输出 RBF 单元计算输入向量和参数向量之间的欧氏距离。
-
总结
I n → C o n v → P o o l → C o n v → P o o l → F C → F C → S o f t m a x → O u t In \rightarrow Conv \rightarrow Pool \rightarrow Conv \rightarrow Pool \rightarrow FC \rightarrow FC \rightarrow Softmax \rightarrow Out In→Conv→Pool→Conv→Pool→FC→FC→Softmax→Out
5.3.3 网络说明
-
与现在网络的区别
- 卷积时不进行填充(padding);
- 池化层选用平均池化而非最大池化;
- 选用 Sigmoid 或 tanh 而非 ReLU 作为非线性环节激活函数;
- 层数较浅,参数数量小(约为6万)。
-
普遍规律
-
随网络深入,宽、高衰减,通道数增加
n H × n W × n c n_H \times n_W \times n_c nH×nW×nc
-
-
可视化
- https://adamharley.com/nn_vis/cnn/3d.html
5.3.4 LeNet5 代码实现
-
动手学深度学习:https://zh.d2l.ai/chapter_convolutional-neural-networks/lenet.html
-
通过下面的 LeNet 代码,可以看出用深度学习框架实现此类模型非常简单。我们只需要实例一个
Sequential
块并将需要的层连接在一起。import torch from torch import nn from d2l import torch as d2l net = nn.Sequential( nn.Conv2d(1, 6, kernel_size=5, padding=2), nn.Sigmoid(), nn.AvgPool2d(kernel_size=2, stride=2), nn.Conv2d(6, 16, kernel_size=5), nn.Sigmoid(), nn.AvgPool2d(kernel_size=2, stride=2), nn.Flatten(), nn.Linear(16 * 5 * 5, 120), nn.Sigmoid(), nn.Linear(120, 84), nn.Sigmoid(), nn.Linear(84, 10))
-
略去了最后一层的高斯激活。
-
nn. Sequential()
该函数可以将不同的模块组合成一个新的模块,将各模块按顺序输入即可。
-
nn.AvgPool2d(kernel_size, stride)
或或MaxPool2d
平均池化或最大池化层,输入参数分别为池化窗口大小和步长。二参数同时可以为整数,否则为元组。类似的还有平均池化
nn.AvgPool2d(kernel_size, stride)
。 -
nn. Sigmoid()
该函数为上一层的输出添加 sigmoid 激活函数类似的还有
nn.ReLU()
,nn.Tanh()
等。 -
nn. Conv2d(in_channels,out_channels,kernel_size)
卷积层,其三个参数按顺序代表输入通道数、输出通道数、卷积核大小。若卷积核形状为正方形,则卷积核大小可以为 int ;否则,卷积核大小必须为元组 tuple。
如:
nn.Conv2d(1, 6, (5, 4))
即代表卷积核大小为 5 ∗ 4 5*4 5∗4。除此之外,还有:
- stride参数:可以规定卷积的步长,与卷积核大小类似,若各方向步长相同则可以为整数,否则应为元组;
- padding参数:在图像的周围补充0的个数,常常用于控制卷积前后图像的尺寸大小。
-
5.4 基本卷积神经网络
5.4.1 AlexNet
-
网络提出
ImageNet Classification with Deep Convolutional Neural Networks
——Alex Krizhevsky, Ilya Sutskever, Geoffrey E. Hinton
-
网络结构
-
网络说明
-
网络一共有 8 层可学习层 - 5 层卷积层和 3 层全连接层;
-
改进
- 池化层均采用最大池化;
- 选用 ReLU 作为非线性环节激活函数;
- 网络规模扩大,参数数量接近 6000 万;
- 出现“多个卷积层 + 一个池化层”的结构。
-
普遍规律 - 随网络深入,宽、高衰减,通道数增加
-
左侧 - 连接数,右侧 - 参数
-
-
改进:输入样本
-
使输入样本变多;
-
最简单、通用的图像数据变形的方式:【平移变换,crop】从原始图像 ( 255 , 255 ) (255,255) (255,255) 中,随机的 crop 出一些图像 ( 224 , 224 ) (224,224) (224,224);【反射变换,flip】水平反转图像;【光照、彩色变换,color jittering】给图像添加一些随机的光照。
-
-
改进:激活函数
-
采用 ReLU 替代 Tan Sigmoid;
-
用于卷积层与全连接层之后。
-
-
改进:Dropout
-
在每个全连接层后面使用一个 Dropout 层,以概率 p p p 随机关闭激活函数。
-
-
改进:双 GPU 策略
-
AlexNet 使用两块 GTX580 显卡进行训练,两块显卡只需要在特定的层进行通信。
-
-
-
可视化
在 ILSVRC-2010 上,top-1错误率为 37.5%,top-5 错误率为17.0%。上图是对 96 个 11 ∗ 11 ∗ 3 11*11*3 11∗11∗3 的卷积核进行可视化。
5.4.2 VGG-16
-
可视化:
-
网络提出:
Very Deep Convolutional Networks For Large-Scale Image Recognition
——Karen Simonyan, Andrew Zisserman
-
网络结构:
-
网络说明:
- 改进:
- 网络规模进一步增大,参数数量约为 1.38 亿;
- 由于各卷积层、池化层的超参数基本相同,整体结构呈现出规整的特点。
- 普遍规律:
- 随网络深入,高和宽衰减,通道数增多。
- 改进:
5.4.3 残差网络 ResNet
-
为什么需要残差网络?
-
非残差网络的缺陷
随着网络层数增加,网络发生了退化现象:随着网络层数的增加,训练集 loss 逐渐下降,然后趋于饱和,再增加网络深度,训练集 loss 反而会增大。注意,这不是过拟合,因为过拟合的训练集 loss 还会一直减小。
-
残差网络的优势
-
梯度消失问题
-
这里, w 1 , w 2 , … w_1,w_2,\ldots w1,w2,… 是权重,而 b 1 , b 2 , … b_1,b_2,\ldots b1,b2,… 是偏置, C C C 是某个代价函数;
-
第 j j j 个神经元的输出为 a j = σ ( z j ) a_j=\sigma(z_j) aj=σ(zj),其中 σ \sigma σ 是通常的 S 型激活函数,而 z j = w j ∗ a j − 1 + b j z_j=w_j * a_{j-1}+b_j zj=wj∗aj−1+bj 是神经元的带权输入;
-
代价函数 C C C 是网络输出 a 4 a_4 a4 的函数,如果实际输出越接近目标输出则代价变低,相反则会变高。
-
第一个隐藏神经元梯度 ∂ C ∂ b 1 \frac{\partial C}{\partial b_1} ∂b1∂C 的表达式为:
∂ C ∂ b 1 = σ ′ ( z 1 ) × w 2 × σ ′ ( z 2 ) × w 3 × σ ′ ( z 3 ) × w 4 × σ ′ ( z 4 ) × ∂ C ∂ a 4 \frac{\partial C}{\partial b_1}= \sigma'(z_1)\times w_2\times \sigma'(z_2)\times w_3\times\sigma'(z_3)\times w_4\times\sigma'(z_4)\times\frac{\partial C}{\partial a_4} ∂b1∂C=σ′(z1)×w2×σ′(z2)×w3×σ′(z3)×w4×σ′(z4)×∂a4∂C -
Sigmoid 函数形为:
-
该导数在 σ ′ ( 0 ) = 1 4 \sigma'(0)=\frac{1}{4} σ′(0)=41 时达到最高。现在,如果我们使用标准方法来初始化网络中的权重,那么会使用一个均值为 0 0 0 标准差为 1 1 1 的高斯分布。因此所有的权值通常会满足 ∣ w j ∣ < 1 |w_j|<1 ∣wj∣<1。发现会有 w j σ ′ ( z j ) < 1 4 w_j\sigma'(z_j)<\frac{1}{4} wjσ′(zj)<41。并且梯度为这些项的乘积,最终结果肯定会指数级下降:项越多,乘积的下降越快。
-
-
-
残差网络思想
- 当网络退化时,浅层网络能够达到比深层网络更好的训练效果,这时如果我们把低层的特征传到高层,那么效果应该至少不比浅层的网络效果差;
- 或者说如果一个 VGG-100 网络在第 98 层使用的是和 VGG-16 第 14 层一模一样的特征,那么 VGG-100 的效果应该会和 VGG-16 的效果相同。所以,我们可以在 VGG-100 的 98 层和 14 层之间添加一条直接映射(Identity Mapping)来达到此效果。
- 从信息论的角度讲,由于 DPI(数据处理不等式)的存在,在前向传输的过程中,随着层数的加深,Feature Map 包含的图像信息会逐层减少,而 ResNet 的直接映射的加入,保证了 l + 1 l+1 l+1 层的网络一定比 l l l 层包含更多的图像信息。
-
构建残差网络:
-
残差网络由一系列残差块组成,通过跳跃连接将输入直接添加到层输出上:
每个残差快由两个主要部分组成,主路径和捷径:
捷径连接:在传统的卷积神经网络中,信息必须从前向后依次通过每个层进行传递并逐渐轻微地改变。而在残差网络中,捷径连接允许信息更快地流动,在不同层之间形成了短路路径:
-
对比:
传统: { z [ l + 1 ] = w [ l + 1 ] a [ l ] + b [ l + 1 ] , a [ l + 1 ] = g [ l + 1 ] ( z [ l + 1 ] ) z [ l + 2 ] = w [ l + 2 ] a [ l + 1 ] + b [ l + 2 ] , a [ l + 2 ] = g [ l + 2 ] ( z [ l + 2 ] ) 残差: { z [ l + 1 ] = w [ l + 1 ] a [ l ] + b [ l + 1 ] , a [ l + 1 ] = g [ l + 1 ] ( z [ l + 1 ] ) z [ l + 2 ] = w [ l + 2 ] a [ l + 1 ] + b [ l + 2 ] , a [ l + 2 ] = g [ l + 2 ] ( a [ l ] + z [ l + 2 ] ) 进一步: { z [ l + 1 ] = w [ l + 1 ] a [ l ] + b [ l + 1 ] , a [ l + 1 ] = g [ l + 1 ] ( z [ l + 1 ] ) z [ l + 2 ] = w [ l + 2 ] a [ l + 1 ] + b [ l + 2 ] , a [ l + 2 ] = g [ l + 2 ] ( w s a [ l ] + z [ l + 2 ] ) \begin{aligned} \text{传统:}&\begin{cases} z^{[l+1]}=w^{[l+1]}a^{[l]}+b^{[l+1]} &,a^{[l+1]}=g^{[l+1]}(z^{[l+1]}) \\ z^{[l+2]}=w^{[l+2]}a^{[l+1]}+b^{[l+2]} &,a^{[l+2]}=g^{[l+2]}(z^{[l+2]}) \end{cases} \\ \text{残差:}&\begin{cases} z^{[l+1]}=w^{[l+1]}a^{[l]}+b^{[l+1]} &,a^{[l+1]}=g^{[l+1]}(z^{[l+1]}) \\ z^{[l+2]}=w^{[l+2]}a^{[l+1]}+b^{[l+2]} &,a^{[l+2]}=g^{[l+2]}(a^{[l]}+z^{[l+2]}) \end{cases} \\ \text{进一步:}&\begin{cases} z^{[l+1]}=w^{[l+1]}a^{[l]}+b^{[l+1]} &,a^{[l+1]}=g^{[l+1]}(z^{[l+1]}) \\ z^{[l+2]}=w^{[l+2]}a^{[l+1]}+b^{[l+2]} &,a^{[l+2]}=g^{[l+2]}(w_sa^{[l]}+z^{[l+2]}) \end{cases} \end{aligned} 传统:残差:进一步:{z[l+1]=w[l+1]a[l]+b[l+1]z[l+2]=w[l+2]a[l+1]+b[l+2],a[l+1]=g[l+1](z[l+1]),a[l+2]=g[l+2](z[l+2]){z[l+1]=w[l+1]a[l]+b[l+1]z[l+2]=w[l+2]a[l+1]+b[l+2],a[l+1]=g[l+1](z[l+1]),a[l+2]=g[l+2](a[l]+z[l+2]){z[l+1]=w[l+1]a[l]+b[l+1]z[l+2]=w[l+2]a[l+1]+b[l+2],a[l+1]=g[l+1](z[l+1]),a[l+2]=g[l+2](wsa[l]+z[l+2]) -
残差网络:
- 普通网络的基准模型受VGG网络的启发;
- 卷积层主要有 3 × 3 3×3 3×3 的过滤器,并遵循两个简单的设计规则:(1)对输出特征图的尺寸相同的各层,都有相同数量的过滤器;(2))如果特征图的大小减半,那么过滤器的数量就增加一倍,以保证每一层的时间复杂度相同。
- ResNet 模型比 VGG 网络更少的过滤器和更低的复杂性。ResNet 具有 34 层的权重层,有 36 亿 FLOPs,只是 VGG-19(19.6 亿 FLOPs)的 18%。
-
-
试验结果图:
5.5 常用数据集
5.5.1 MNIST 手写数字数据集
-
基本信息:
- MNIST 数据集主要由一些手 写数字的图片和相应的标签组成,图片一共有 10 类,分别对应从 0~9。
- 由 60000 个训练样本和 10000 个测试样本组成,每个样本都是一张 28 ∗ 28 28*28 28∗28 像素的灰度手写数字图片。
-
数据集文件:
文件名 大小 用途 train-images-idx3-ubyte.gz ≈ 9.45 MB 训练图像数据 train-labels-idx1-ubyte.gz ≈ 0.03 MB 训练图像的标签 t10k-images-idx3-ubyte.gz ≈ 1.57 MB 测试图像数据 t10k-labels-idx1-ubyte.gz ≈ 4.4 KB 测试图像的标签 -
数据集加载:
def load_data_fashion_mnist(batch_size, resize=None): #@save """下载Fashion-MNIST数据集,然后将其加载到内存中。""" trans = [transforms.ToTensor()] if resize: trans.insert(0, transforms.Resize(resize)) trans = transforms.Compose(trans) mnist_train = torchvision.datasets.FashionMNIST( root="../data", train=True, transform=trans, download=True) mnist_test = torchvision.datasets.FashionMNIST( root="../data", train=False, transform=trans, download=True) return (data.DataLoader(mnist_train, batch_size, shuffle=True, num_workers=get_dataloader_workers()), data.DataLoader(mnist_test, batch_size, shuffle=False, num_workers=get_dataloader_workers()))
5.5.2 Fashion-MNIST 服饰数据集
-
基本信息:
-
FashionMNIST 是一个替代 MNIST 手写数字集 的图像数据集。它是由 Zalando旗下的研究部门提供,涵盖了来自 10 种类别的共 7 万个不同商品的正面图片。
-
FashionMNIST 的大小、格式和训练集/测试集划分与原始的 MNIST 完全一致。60000/10000 的训练测试数据划分, 28 ∗ 28 28*28 28∗28 的灰度图片。你可以直接用它来测试你的机器学习和深度学习算法性能,且不需要改动任何的代码。
-
5.5.3 CIFAR-10 彩色图像数据集
- 基本信息:
- CIFAR-10 数据集由 10 个类的 60000 个 32 ∗ 32 32*32 32∗32 彩色图像组成,每个类有 6000 个图像。有 50000 个训练图像和 10000 个测试图像。
- 数据集分为五个训练批次和一个测试批次,每个批次有 10000 个图像。测试批次包含来自每个类别的恰好 1000 个随机选择的图像。
5.5.4 PASCAL VOC
-
基本信息:
- PASCAL 的全称是 Pattern Analysis, Statistical Modelling and Computational Learning;
- VOC 的全称是 Visual Object Classes;
- 目标分类(识别)、检测、分割最常用的数据集之一;
- 第一届PASCAL VOC举办于2005年,2012年终止,常用的是 PASCAL 2012。
-
一共分成 20 类:
- person
- bird, cat, cow, dog, horse, sheep
- aeroplane, bicycle, boat, bus, car, motorbike, train
- bottle, chair, dining table, potted plant, sofa, tv/monitor
-
文件格式:
5.5.5 MS COCO 数据集
- 基本信息:
- PASCAL 的全称是 Microsoft Common Objects in Context,起源于微软于 2014 年出资标注的 Microsoft COCO 数据集;
- 数据集以 scene understanding 为目标,主要从复杂的日常场景中截取;
- 包含目标分类(识别)、检测、分割、语义标注等数据集;
- ImageNet 竞赛停办后,COCO 竞赛就成为是当前目标识别、检测等领域的一个最权威、最重要的标杆;
- 官网:http://cocodataset.org
- 提供的标注类别有 80 类,有超过 33 万张图片,其中 20 万张有标注,整个数据集中个体的数目超过 150 万个:
- 人:1类
- 交通工具:8类,自行车,汽车等
- 公路常见:5类,信号灯,停车标志等
- 动物:10类,猫狗等
- 携带物品:5类,背包,雨伞等
- 运动器材:10类,飞盘,滑雪板,网球拍等
- 厨房餐具:7类,瓶子,勺子等
- 水果及食品:10类
- 家庭用品:7类,椅子、床,电视等
- 家庭常见物品:17类,笔记本,鼠标,遥控器等
5.5.6 ImageNet 数据集与 ILSVRC
- 基本信息:
- 始于2009年,李飞飞与 Google 的合作:“ImageNet: A Large-Scale Hierarchical Image Database”;
- 总图像数据:14,197,122;
- 总类别数:21841;
- 带有标记框的图像数:1,034,908。
- ISLVRC 2012 子数据集
- 训练集:1,281,167张图片+标签;
- 类别数:1,000;
- 验证集:50,000张图片+标签;
- 测试集:100,000张图片。
5.6 总结
- 经典网络:以“一个或多个卷积层+一个池化层”作为一个基本单元进行堆叠,在网络尾部使用全连接层,最后以 Softmax 为分类器,输出结果。
- 残差网络:在普通网络的基础上,将浅层的激活项通过支路直接传向深层,克服深层神经网络中梯度消失的问题,为训练极深的神经网络提供便利。
- 数据集:常见的数据集包括 VOC 和 COCO;ImageNet 较大。