目标检测(1):初识 LeNet-5

大家好,我是红色石头!

说起深度学习目标检测算法,就不得不提 LeNet- 5 网络。LeNet-5由LeCun等人提出于1998年提出,是一种用于手写体字符识别的非常高效的卷积神经网络。出自论文《Gradient-Based Learning Applied to Document Recognition》

论文传送门:

http://yann.lecun.com/exdb/publis/pdf/lecun-98.pdf

一、网络结构

LetNet-5是一个较简单的卷积神经网络。上图显示了其结构:输入的二维图像(单通道),先经过两次卷积层到池化层,再经过全连接层,最后为输出层。整体上是:input layer->convulational layer->pooling layer->activation function->convulational layer->pooling layer->activation function->convulational layer->fully connect layer->fully connect layer->output layer.

整个 LeNet-5 网络总共包括7层(不含输入层),分别是:C1、S2、C3、S4、C5、F6、OUTPUT。

几个参数:

层编号特点:

  • 英文字母+数字

  • 英文字母代表以下一种:C→卷积层、S→下采样层(池化)、F→全连接层

  • 数字代表当前是第几层,而非第几卷积层(池化层.ec)

术语解释:

  • 参数→权重w与偏置b

  • 连接数→连线数

  • 参数计算:每个卷积核对应于一个偏置b,卷积核的大小对应于权重w的个数(特别注意通道数)

二、输入层(Input Layer)

输入层(INPUT)是 32×32 像素的图像,注意通道数为1。

三、C1 层

C1 层是卷积层,使用 6 个 5×5 大小的卷积核,padding=0,stride=1进行卷积,得到 6 个 28×28 大小的特征图:32-5+1=28。

参数个数:(55+1)6=156,其中5*5为卷积核的25个参数w,1为偏置项b。

连接数:1562828=122304,其中156为单次卷积过程连线数,2828为输出特征层,每一个像素都由前面卷积得到,即总共经历2828次卷积。

四、S2 层

S2 层是降采样层,使用 6 个 2×2 大小的卷积核进行池化,padding=0,stride=2,得到 6 个 14×14 大小的特征图:28/2=14。

S2 层其实相当于降采样层+激活层。先是降采样,然后激活函数 sigmoid 非线性输出。先对 C1 层 2×2 的视野求和,然后进入激活函数,即:

参数个数:(1+1)6=12,其中第一个 1 为池化对应的 22 感受野中最大的那个数的权重 w,第二个 1 为偏置 b。

连接数:(22+1)61414= 5880,虽然只选取 22 感受野之和,但也存在 22 的连接数,1 为偏置项的连接,1414 为输出特征层,每一个像素都由前面卷积得到,即总共经历 1414 次卷积。

五、C3 层

C3 层是卷积层,使用 16 个 5×5xn 大小的卷积核,padding=0,stride=1 进行卷积,得到 16 个 10×10 大小的特征图:14-5+1=10。

16 个卷积核并不是都与 S2 的 6 个通道层进行卷积操作,如下图所示,C3 的前六个特征图(0,1,2,3,4,5)由 S2 的相邻三个特征图作为输入,对应的卷积核尺寸为:5x5x3;接下来的 6 个特征图(6,7,8,9,10,11)由 S2 的相邻四个特征图作为输入对应的卷积核尺寸为:5x5x4;接下来的 3 个特征图(12,13,14)号特征图由 S2 间断的四个特征图作为输入对应的卷积核尺寸为:5x5x4;最后的 15 号特征图由 S2 全部(6 个)特征图作为输入,对应的卷积核尺寸为:5x5x6。

值得注意的是,卷积核是 5×5 且具有 3 个通道,每个通道各不相同,这也是下面计算时 5*5 后面还要乘以3,4,6的原因。这是多通道卷积的计算方法。

参数个数:(553+1)6+(554+1)6+(554+1)3+(556+1)1=1516。

连接数:15161010 = 151600。1010为输出特征层,每一个像素都由前面卷积得到,即总共经历1010次卷积。

六、S4 层

S4 层与 S2 一样也是降采样层,使用 16 个 2×2 大小的卷积核进行池化,padding=0,stride=2,得到 16 个 5×5 大小的特征图:10/2=5。

参数个数:(1+1)*16=32。

连接数:(22+1)1655= 2000。

七、C5 层

C5 层是卷积层,使用 120 个 5×5×16 大小的卷积核,padding=0,stride=1进行卷积,得到 120 个 1×1 大小的特征图:5-5+1=1。即相当于 120 个神经元的全连接层。

值得注意的是,与C3层不同,这里120个卷积核都与S4的16个通道层进行卷积操作。

参数个数:(5516+1)*120=48120。

连接数:4812011=48120。

八、F6层

F6 是全连接层,共有 84 个神经元,与 C5 层进行全连接,即每个神经元都与 C5 层的 120 个特征图相连。计算输入向量和权重向量之间的点积,再加上一个偏置,结果通过 sigmoid 函数输出。

F6 层有 84 个节点,对应于一个 7×12 的比特图,-1 表示白色,1 表示黑色,这样每个符号的比特图的黑白色就对应于一个编码。该层的训练参数和连接数是(120 + 1)x84=10164。ASCII 编码图如下:

参数个数:(120+1)*84=10164。

连接数:(120+1)*84=10164。

九、OUTPUT层

最后的 Output 层也是全连接层,是 Gaussian Connections,采用了 RBF 函数(即径向欧式距离函数),计算输入向量和参数向量之间的欧式距离(目前已经被Softmax 取代)。

Output 层共有 10 个节点,分别代表数字 0 到 9。假设x是上一层的输入,y 是 RBF的输出,则 RBF 输出的计算方式是:

上式中 i 取值从 0 到 9,j 取值从 0 到 7*12-1,w 为参数。RBF 输出的值越接近于 0,则越接近于 i,即越接近于 i 的 ASCII 编码图,表示当前网络输入的识别结果是字符 i。

下图是数字 3 的识别过程:

参数个数:84*10=840。

连接数:84*10=840。

十、可视化网址

http://yann.lecun.com/exdb/lenet/a35.html

http://scs.ryerson.ca/~aharley/vis/conv/flat.html

http://scs.ryerson.ca/~aharley/vis/conv/

总结

LeNet-5 与现在通用的卷积神经网络在某些细节结构上还是有差异的,例如 LeNet-5 采用的激活函数是 sigmoid,而目前图像一般用 tanh,relu,leakly relu 较多;LeNet-5 池化层处理与现在也不同;多分类最后的输出层一般用 softmax,与 LeNet-5 不太相同。

LeNet-5 是一种用于手写体字符识别的非常高效的卷积神经网络。CNN 能够得出原始图像的有效表征,这使得 CNN 能够直接从原始像素中,经过极少的预处理,识别视觉上面的规律。然而,由于当时缺乏大规模训练数据,计算机的计算能力也跟不上,LeNet-5 对于复杂问题的处理结果并不理想。

2006 年起,人们设计了很多方法,想要克服难以训练深度 CNN 的困难。其中,最著名的是 Krizhevsky et al.提出了一个经典的 CNN 结构,并在图像识别任务上取得了重大突破。其方法的整体框架叫做 AlexNet,与 LeNet-5 类似,但要更加深一些。

最后,红色石头给大家准备好了 LeCun 的这篇 LeNet-5 的 46 页论文《Gradient-Based Learning Applied to Document Recognition》,需要的可以在本公众号后台回复【lenet5】,获取!

下一篇我将使用 PyTorch 复现LeNet-5 网络,并介绍完整的 demo 实例,下期见!


未经允许不得转载:红色石头的个人博客 » 目标检测(1):初识 LeNet-5

赞 (0) 打赏

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏