原文链接:[1409.4842v1] Going Deeper with Convolutions (arxiv.org)
图源:深入解读GoogLeNet网络结构(附代码实现)-CSDN博客
表截自原文
以下📒来自博客深入解读GoogLeNet网络结构(附代码实现)-CSDN博客
(这个博主好厉害!写的很详细!)
输入层:224x224x3
卷积层:(conv 7×7+2(S))
kernel size=7×7 stride=2 padding=3 输出通道数64 (padding从哪儿看到的?原文吗?maybe
输出特征图尺寸=(224-7+3*2)/2+1=112.5(向下取整)=112
(为啥是向下取整?)(对应于下面的池化层为啥是向上取整?)
输出特征图维度64@112×112
池化层:
上一层的输出:64@112×112
kernel_size=3*3 stride=2 padding呢? 没说就是 padding=0
输出特征图尺寸 :
64@((112-3+2)/2)=55.5(向上取整)=56
∴输出=64@56*56 相当于 56*56*64
局部响应归一化(不晓得是个啥?)
LRN第一次在AlexNet中提出
Conv 1×1+1(V)
卷积网络学习心得:
搞明白输入尺寸多大、操作(kernel size、stride、padding)、输出尺寸多大就可以的
输入:56*56 *64
操作:64@kernel size=1*1 *64 需要训练的参数量=1*1*64*64=4096(说参数 指的是需要学习的参数(这个比较有趣,吃饭前死活不明白,还发呆走思,吃完饭回来倒是明白了
输出:64@56*56
卷积层conv 3×3+1(S)
输入:56*56*64
操作 192@kernel_size=3*3*64 stride = 1 padding= 1
输出:192@(56-3+1*2)=192@56*56
然后进行ReLU操作(卷积以后,非线性激活)
参数量=192*3*3*64=110592
LRN
局部响应归一化的输入 操作 输出 是啥?
MAXPool 3×3+2(S)
是不是一般来说,padding不强调就是不填充 padding=valid
输入:192@56*56 (上一层的输出)→56*56*192
操作:192@kernel_size=3*3*192 stride=2 padding=0
输出:192@(56-3+2)/2=27.5 (向上取整)=28 = 192@28*28
Inception(3a)
输入:192@28*28 → 28*28*192
(从左往右数操作)(省略所有卷积操作后的ReLu操作)
操作1:conv 1*1 + 1(S)
输入:28*28*192
操作:
kernel_size 64@1*1*192 padding=0 stride=1
参数量=64*1*1*192=12288
输出:64@28*28
汇总:
池化层真的奇怪啊,按理说池化层没有padding,那么输出尺寸一定会减少的
参数量统计:
1*1*192*64=12288
1*1*192*96+3*3*96*128=129024
1*1*192*16+32*5*5*16=15872
1*1*192*32=6144
12288+129024+15872+6144=163328
163328/1024=159.5K
原博的图也贴过来存档
这句话的理解:对四个部分的输出结果的通道并联
Inception(3b)
上一层的输出:256@28*28 →这一层的输入 :28*28*256
表格的读法:
patch size不懂
stride明白
开始读:
总的输出尺寸:28*28*480,网络的深度是2 (其实给出了 卷积核个数和总的输出尺寸 这个网络是很好读了
- 128个1*1的卷积 (输出是 128@28*28
- 在3*3的卷积核之前的降维,进行128个1*1的卷积 (输出是128@28*28),对输出的特征图进行192个3*3的卷积 (输出192@28*28
- 在进行5*5的卷积核之前的降维,进行32个1*1的卷积(输出是32@28*28),对输出的特征图进行96个5*5的卷积(输出96@28*28
- (pool层使用3*3的卷积核,输出28*28*256 why? 哪里看出来?A:get了,pool层有padding和stride 通道数不会变 而且padding=1)进行64个1*1的卷积(输出64@28*28 (由总的输出尺寸倒推这里的28*28
PS。忽然发现尺寸计算的一个东西 (H-W+2P+S)/S不管是填充还是步长,都是在把输出图像变大(蒽,理论上是的,诶,反正我这么理解
Inception(4a)
读inception(4a)
- 总的输出尺寸 14*14*512
- 进行192个1*1的卷积 输出14*14*192
- 使用3*3的卷积核之前的降维,进行96个1*1的卷积,输出14*14*96,进行208个3*3的卷积,输出14*14*208
- 使用5*5的卷积核之前的降维,进行16个1*1的卷积,输出14*14*16,进行48个5*5的卷积,输出14*14*48
- (池化是啥样的?),池化之后进行64个1*1的卷积,输出14*14*64
- 最后汇聚成512个通道
inception 4a、4b、4c
再看一遍这个图,patch size还是不明白是什么 但是几个inception块应该是理解了
图源:深入解读GoogLeNet网络结构(附代码实现)-CSDN博客
gpt说的 patch size就是kernel size
读第一个池化层
补充计算公式
最后的输出层
DepthConcat的输出是 7*7*1024,也就是AvgPool的输入
这张图不懂。