首先发布三个链接:
1.jjddyNet网络结构详解视频
2. 使用pytorch搭建jjddyNet并针对花分类数据集进行训练
3. 使用tensorflow搭建jjddyNet并针对花分类数据集进行训练
jjddyNet是2012年ils vrc 2012 (imagenetlargescalevisualrecognitionchallenge )竞赛的冠军网络,分类精度从传统方法的70%提高到80 % (jjdd ynet 那是Hinton和他的学生jjddy Krizhevsky设计的。 那一年后,深度学习开始迅速发展。 下图是从jjddyNet的原论文中截取的网络结构图。
图中有上下两个部分是因为作者使用两个GPU进行并行训练,上下两个部分的结构一模一样。 我们直接看下面的部分就可以了。 接下来,我们将讨论这个网络的亮点。
)1)首次利用GPU进行网络加速训练。
)2)使用ReLU激活函数,而不是传统的Sigmoid激活函数和Tanh激活函数。
)3)使用了LRN局部响应归一化。
)4)全连接层前两层采用Dropout方法按一定比例随机失活神经元,减少过拟合。
其次,给出经卷积或池化后矩阵大小的计算公式。
n=(wf2p )/S 1
这里,w是输入图像大小,f是卷积内核或池化内核的大小,p是填充的像素数,s是步长
接下来,我们将详细分析网络的每一层。
卷积层1
Conv1: kernels:48*2=96;kernel_size:11;padding:[1, 2] ;stride:4
其中,kernels表示卷积内核的数目,kernel_size表示卷积的大小,填充表示在特征矩阵的上下左右两侧嵌入零的参数,并且stride表示步长距离
的图像shape:[224、224、3],输出特征矩阵的shape:[55、55、96]
形状计算: n=(wf2p )/s1=[224-11(12 ) ]/4 1=55
最大池化下采样层1
Maxpool1: kernel_size:3;pading: 0;stride:2
其中,kernel_size表示池核大小,padding表示特征矩阵上下左右的填零参数,stride表示步长距离
输入特征矩阵的shape:[55、55、96],输出特征矩阵的shape:[27、27、96]
形状计算: n=(wf2p )/S1=(55-3 )/2 1=27
卷积层2
Conv2: kernels:128*2=256; kernel_size:5; padding: [2, 2]; stride:1
输入特征矩阵的shape:[27、27、96],输出特征矩阵的shape:[27、27、256]
形状计算: n=(wf2p )/s1=(27-54 )/1 ) 27
最大池化下采样层2
Maxpool2: kernel_size:3; pading: 0; stride:2
输入特征矩阵的shape:[27、27、256],输出特征矩阵的shape:[13、13、256]
形状计算: n=(wf2p )/S1=(27-3 )/2 1=13
卷积层3
Conv3: kernels:192*2=384; kernel_size:3; padding: [1, 1]; stride:1
特征矩阵shape :输入[ 13、13、256],输出特征矩阵shape:[13、13、384]
形状计算: n=[wf2p]/s1=[13-32]/1=13
卷积层4
trong>Conv4: kernels:192*2=384; kernel_size:3; padding: [1, 1]; stride:1
输入特征矩阵shape:[13, 13, 384], 输出特征矩阵shape: [13, 13, 384]
shape计算:N = (W − F + 2P ) / S + 1 = (13 - 3 + 2) / 1 + 1 = 13
卷积层5
Conv5: kernels:128*2=256; kernel_size:3; padding: [1, 1]; stride:1
输入特征矩阵shape:[13, 13, 384],输出特征矩阵shape: [13, 13, 256]
shape计算:N = (W − F + 2P ) / S + 1 = (13 - 3 + 2) / 1 + 1 = 13
最大池化下采样层3
Maxpool3: kernel_size:3 padding: 0 stride:2
输入特征矩阵shape:[13, 13, 256] ,输出特征矩阵shape: [6, 6, 256]
shape计算:N = (W − F + 2P ) / S + 1 = (13 - 3) / 2 + 1 = 6
全连接层1
unit_size: 4096 (unit_size为全连接层节点个数,两块GPU所以翻倍)
全连接层2
unit_size: 4096
全连接层3
unit_size: 1000(该层为输出层,输出节点个数对应你分类任务的类别个数)
最后给出所有层参数的总表:
Layer Name
Kernel Size
Kernel Num
Padding
Stride
Conv1
11
96
[1, 2]
4
Maxpool1
3
None
0
2
Conv2
5
256
[2, 2]
1
Maxpool2
3
None
0
2
Conv3
3
384
[1, 1]
1
Conv4
3
384
[1, 1]
1
Conv5
3
256
[1, 1]
1
Maxpool3
3
None
0
2
FC1
4096
None
None
None
FC2
4096
None
None
None
FC3
1000
None
None
None
关于模型的搭建与训练代码放在我的github中,大家可自行下载使用:
https://github.com/WZMIAOMIAO/deep-learning-for-image-processing
pytorch版本在pytorch_learning文件夹中,tensorflow版本在tensorflow_learning文件夹中.