LeNet-5 论文及原理分析(笨鸟角度)

#PS:要转载请注明出处,本人版权所有

#PS:这个只是 《 我自己 》理解,如果和你的

#原则相冲突,请谅解,勿喷

Notes:本人此前只对opencv处理图像有一定的了解。

前序:从毕业后开始,自己工作的周围就出现了无数次计算机视觉相关的内容。而我的工作也和这些有一定的交叉。虽然在学校对并行计算以及AI有一定所闻,但是都只是听说而已,以为离我们还很远,出来才知道,它们已经来了。此文由网上众多Lenet-5相关的文章和论文原文经过我的组合和理解后写出,只作为我的一个学习笔记。

LeNet-5简介

CNN里面的一篇代表性文章,主要是涵盖了现在CNN的卷积、池化、全连接等概念,同时其层数很浅,方便我学习。(这里主要基于LeNet5论文讲解,现在的caffe和tf上带的LeNet-5工程是和原文不同的,具体在后序两篇文章分析。)

LeNet-5网络简介

这里写图片描述
此截图来至于,LeNet-5论文原文。
主要由以下构成:
INPUT输入、C1卷积层、S2池化层((求和取平均)*w+b)、C3卷积层(此层是按照一定的规则卷积,所以不易理解,和C1,C5基本卷积操作不同)、S4池化层(S2类似)、C5卷积层、F6全连接映射的是一个字符表、OUTPUT打分输出(RBF)

Input层

size:32*32

C1层

卷积核(CC):5*5
stride:1
pad:0
featuremapcount:6
featuremapsize:28*28
(计算方法:32-5+1= 28)
(计算公式:O=(I+2*pad-CC)/ stride+1)
参数个数:6*(5*5+1)=156
连接个数:(5*5+1)*28*28*6
(featuremap每个像素和5*5个w和一个b有一个连接。w是权重,b是偏置)

S2层

核:2*2
stride:2
featuremapcount:6
featuremapsize:14*14
(计算方法:28/2,对核进行求和,然后乘以w,加上一个偏置)
参数个数:(1+1)*6=12
连接数:(4*1+1)*14*14*6=5880
(不同的人有不同的理解,反正就是featuremap每个像素和上层的连线,这里是:4个像素求和平均乘以w加上一个b)

C3层

卷积核(CC):5*5
stride:1
pad:0
featuremapcount:16
(计算方法:下图每列对应一个featuremap,分为四组,0-5(分别和上层3个featuremap计算),6-11(同理),12-14(同理),15(同理)。)
这里写图片描述
featuremapsize:10*10
(14-5+1=10)
参数个数:6*(3*5*5+1)+6*(4*5*5+1)+3*(4*5*5+1)+1*(6*5*5+1)=1516(分组计算)
连接个数:1516*10*10=151600(同上)

S4层

核:2*2
stride:2
featuremapcount:16
featuremapsize:5*5
参数个数:(1+1)*6=12
连接数:(4*1+1)*5*5*16=2000

C5层

卷积核(CC):5*5
stride:1
pad:0
featuremapcount:120
featuremapsize:1*1
参数个数:(5*5*16+1)*120=48120
(此处由于每个像素都和前一层16个featuremap相连)
连接数:48120*1*1=48120

F6层

featuremapcount:84
(为了输出选的特定的数)
featuremapsize:1*1
参数个数:84*(120*1+1)=10164
(上层为1*1,全连接,输出为84*1*1)
连接数:84*(120*1+1)*1*1=10164

Output层

参数个数:84*10=840
连接数:84*10=840=840
说明:我只知道这个打分函数叫做RBF,具体就是计算输入和参数的向量距离,距离越近,就越有可能是当前数字。对于此函数的更深原理,我看了个大概,有兴趣的可以去研究。

总结

只要具备CNN基本理论知识(卷积核、步长、pad、池化、卷积、全连接)都可以慢慢的理解这个东西。由于我是新手,我知道新手对哪些很疑惑,所以对每一个值的计算我都有详细的写出,包括原理和出处。
#PS:请尊重原创,不喜勿喷

#PS:要转载请注明出处,本人版权所有.

有问题请留言,看到后我会第一时间回复

猜你喜欢

转载自blog.csdn.net/u011728480/article/details/78799672