论文题目:Going deeper with convolutions

论文链接:https://arxiv.org/abs/1409.4842

论文研究目标

利用赫布理论和多尺度处理直觉设计一种增加深度和宽度的提高内部计算资源利用率的(同时保持了计算预算不变)网络。

网络主要结构

图一  网络总体架构

上图为主要包含Inception块+辅助分类器的GoogLeNet结构示意图。

Inception模块

上图为Inception块示意图 (a)为普通的Inception块;(b)为带有1×1卷积的,可以对输入通道降维的Inception块

Inception模块特点

  1. 由Inception基础块组成。
  2. Inception块相当于⼀个有4条线路的⼦⽹络。它通过不同窗口形状的卷积层和最⼤池化层来并⾏抽取信息,并使⽤1×1卷积层减少通道数从而降低模型复杂度。
  3. 可以⾃定义的超参数是每个层的输出通道数,我们以此来控制模型复杂度。

针对同一个输入层,在Inception块中有四条并行的线路,其中前1~3个是1×1卷积层,第4个是一个MaxPooling池化层,这四条线路最后的输出拥有相同的shape和不同的channel通道数。于是,这些输出最后可在channel维度进行合并。 例如:28×28×64,28×28×128,28×28×32,28×28×32。 通道合并层的shape:28×28×256(64+128+32+32)。

举例分析加入1*1卷积核设计的好处:
假设输入时256个feature map进来,256个feature map输出,假设Inception层只执行3x3的卷积,那么这就需要执行 (256x256) x (3x3) 次乘法(大约589,000次计算操作)。现在Bottleneck layer的思想是先来减少特征的数量,我们首先执行256 -> 64 的1×1卷积,然后在所有Bottleneck layer的分支上对64大小的feature map进行卷积,最后再64 -> 256 1x1卷积。
操作量是:
256×64 × 1×1 = 16,384      64x1x1卷积核对上一层输出卷积计算
64×256 × 3×3= 147456      256x3x3卷积核对1x1卷积输出进行卷积计算
总共约163840,而我们以前有近600,000。减少3倍多的操作。

layer设计

GoogLeNet是作者团队在参加2014大规模视觉挑战赛时送去参加的几种Inception结构的模型之一。该网络设计时考虑了计算效率和实用性,故可以在单个设备上运行推理,对低内存设备比较友好。 整个网络使用了9个Inception块,结构排布如表格中所示:

训练方法

模型训练采用了DistBelief分布式机器学习系统对GoogleNet进行了训练(Cpu)。论文表示使用高端GPU,可以在1周内完成模型的训练。训练采用了0.9动量的异步随机梯度下降,固定学习率(每8个迭代学习率降低4%),另外使用各个各个尺寸的图片(数据增强)对于降低过拟合很有用。

总结

作者在论文中表示,用现有的dense结构来组合构建出最佳的稀疏结构,是改善计算机视觉神经网络的可行方法。与较浅和较窄的网络结构相比,该方法的优点在于计算量适度增加的情况下显著提高网络效果。在目标检测领域,尽管没有利用上下文和bounding box回归,我们的效果还是很好,进一步表面Inception结构的优越性,未来将在此基础上继续研究更加精细和自动化地方式来创造稀疏结构用以促进各领域的工作。

代码实现如下图的GoogLenet网络

构建Inception基本模块

class Inception(nn.Module):# c1 - c4为每条线路里的层的输出通道数def __init__(self, in_c, c1, c2, c3, c4):super(Inception, self).__init__()# 线路1,单1 x 1卷积层self.p1_1 = nn.Conv2d(in_c, c1, kernel_size=1)# 线路2,1 x 1卷积层后接3 x 3卷积层self.p2_1 = nn.Conv2d(in_c, c2[0], kernel_size=1)self.p2_2 = nn.Conv2d(c2[0], c2[1], kernel_size=3, padding=1)# 线路3,1 x 1卷积层后接5 x 5卷积层self.p3_1 = nn.Conv2d(in_c, c3[0], kernel_size=1)self.p3_2 = nn.Conv2d(c3[0], c3[1], kernel_size=5, padding=2)# 线路4,3 x 3最大池化层后接1 x 1卷积层self.p4_1 = nn.MaxPool2d(kernel_size=3, stride=1, padding=1)self.p4_2 = nn.Conv2d(in_c, c4, kernel_size=1)def forward(self, x):p1 = F.relu(self.p1_1(x))p2 = F.relu(self.p2_2(F.relu(self.p2_1(x))))p3 = F.relu(self.p3_2(F.relu(self.p3_1(x))))p4 = F.relu(self.p4_2(self.p4_1(x)))return torch.cat((p1, p2, p3, p4), dim=1)  # 在通道维上连结输出

总体实现

b1 = nn.Sequential(nn.Conv2d(1, 64, kernel_size=7, stride=2, padding=3),nn.ReLU(),nn.MaxPool2d(kernel_size=3, stride=2, padding=1))b2 = nn.Sequential(nn.Conv2d(64, 64, kernel_size=1),nn.Conv2d(64, 192, kernel_size=3, padding=1),nn.MaxPool2d(kernel_size=3, stride=2, padding=1))b3 = nn.Sequential(Inception(192, 64, (96, 128), (16, 32), 32),Inception(256, 128, (128, 192), (32, 96), 64),nn.MaxPool2d(kernel_size=3, stride=2, padding=1))b4 = nn.Sequential(Inception(480, 192, (96, 208), (16, 48), 64),Inception(512, 160, (112, 224), (24, 64), 64),Inception(512, 128, (128, 256), (24, 64), 64),Inception(512, 112, (144, 288), (32, 64), 64),Inception(528, 256, (160, 320), (32, 128), 128),nn.MaxPool2d(kernel_size=3, stride=2, padding=1))b5 = nn.Sequential(Inception(832, 256, (160, 320), (32, 128), 128),Inception(832, 384, (192, 384), (48, 128), 128),d2l.GlobalAvgPool2d())net = nn.Sequential(b1, b2, b3, b4, b5, d2l.FlattenLayer(), nn.Linear(1024, 10))net = nn.Sequential(b1, b2, b3, b4, b5, d2l.FlattenLayer(), nn.Linear(1024, 10))X = torch.rand(1, 1, 96, 96)for blk in net.children(): X = blk(X)print('output shape: ', X.shape)#batchsize=128
batch_size = 16
# 如出现“out of memory”的报错信息,可减小batch_size或resize
#train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size, resize=96)lr, num_epochs = 0.001, 5
optimizer = torch.optim.Adam(net.parameters(), lr=lr)
d2l.train_ch5(net, train_iter, test_iter, batch_size, optimizer, device, num_epochs)

GoogLenet网络解读及代码实现(Pytorch)相关推荐

  1. 一位深度学习小萌新的学渣笔记(四)GoogLeNet网络介绍及代码详解

    前言 继续学习霹雳大神的神经网络讲解视频 更新不易,希望大家可以去看原视频支持up主霹雳吧啦Wz GoogLeNet网络详解 使用pytorch搭建GoogLeNet网络 本博文记载的是基于Pytor ...

  2. GoogLeNet网络详解并使用pytorch搭建模型

    1.GoogLeNet网络详解 网络中的创新点: (1)引入了Inception结构(融合不同尺度的特征信息) (2)使用1x1的卷积核进行降维以及映射处理 (虽然VGG网络中也有,但该论文介绍的更详 ...

  3. going deeper with convolutions (Googlenet网络解读)

    http://www.gageet.com/2014/09203.php这个网址已都经把文章翻译好了,这里主要是说两点: 1.Googlenet借鉴了network in network里的多层感知器 ...

  4. 深入解读GoogLeNet网络结构(附代码实现)

    前言 七夕了,看着你们秀恩爱,单身狗的我还是做俺该做的事吧! 在上一篇文章中介绍了VGG网络结构,VGG在2014年ImageNet 中获得了定位任务第1名和分类任务第2名的好成绩,而同年分类任务的第 ...

  5. Pytorch之CNN:基于Pytorch框架实现经典卷积神经网络的算法(LeNet、AlexNet、VGG、NIN、GoogleNet、ResNet)——从代码认知CNN经典架构

    Pytorch之CNN:基于Pytorch框架实现经典卷积神经网络的算法(LeNet.AlexNet.VGG.NIN.GoogleNet.ResNet)--从代码认知CNN经典架构 目录 CNN经典算 ...

  6. 利用Pytorch实现GoogLeNet网络

    目  录 1 GoogLeNet网络 1.1 网络结构及参数 1.2 Inception结构 1.3 带降维功能的Inception结构 1.4 辅助分类器 2 利用Pytorch实现GoogLeNe ...

  7. CVPR 2020 Oral 文章汇总,包括论文解读与代码实现

    点击上方,选择星标或置顶,不定期资源大放送! 阅读大概需要10分钟 Follow小博主,每天更新前沿干货 [导读]本文为大家整理了10篇CVPR2020上被评为Oral的论文解读和代码汇总. 1.Ra ...

  8. 单目标跟踪算法:Siamese RPN论文解读和代码解析

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者:周威 | 来源:知乎 https://zhuanlan.zhihu.com/p/16198364 ...

  9. ResNet网络详解并使用pytorch搭建模型、并基于迁移学习训练

    1.ResNet网络详解 网络中的创新点: (1)超深的网络结构(突破1000层) (2)提出residual模块 (3)使用Batch Normalization加速训练(丢弃dropout) (1 ...

最新文章

  1. html转义符 xsl转义符
  2. 大总结-深度学习全五课-Stanford吴恩达教授
  3. java的圆周率_java学习日记,圆周率的打印
  4. android qq分享自动弹出,史上最详细Android集成QQ,微信,微博分享(不要第三方)持续更新中...
  5. python中with as用法_python 中关于with...as的用法
  6. ASP.NET MVC3数据绑定到VIEW的方式
  7. 关于java开发中的实用工具Hutool工具类
  8. django-创建项目-创建应用-注册应用-配置mysql连接pycharm-连接django-生成数据表
  9. hadoop中的9000端口代表什么_启动hadoop后,fs.defaultFS中配置的9000端口没有出现在监听中?...
  10. 笔记本电脑性价比排行2019_笔记本电脑性价比排行2020榜单介绍
  11. LeetCode() Reorder List
  12. 【转】华为手机logcat不出日志解决方案
  13. 撸完这篇线程池,我快咳血了!
  14. 身份证核验、实名认证接口助力实名制
  15. 理解偏差(Bias)和方差(Variance)
  16. cannot find method ‘value‘
  17. ps软件哪个好?十年老用户推荐这两个给你
  18. SOS:硬盘数据丢失怎么办?
  19. 手机PIN、PUK码之谜
  20. 获取img的src 或者给img赋值

热门文章

  1. [数据结构]A*寻路算法
  2. maven 学习笔记--仓库,聚合和继承,私服搭建
  3. ToDictionary
  4. jvm间歇性崩溃分析
  5. coupled/decoupled
  6. [转]程序员真实写真:35岁前成功的12条黄金法则
  7. C语言课后习题(12)
  8. 今天聊聊Oracle Database 21c 十“小”新特性
  9. Oracle行迁移和行链接
  10. 2019 年最好用的 7 款数据库监控工具