GoogleNet和Inception模块
在研究yolo v1的时候碰到的GoogleNet,虽然都是过时的东西,还是记录一下
下面是GoogleNET的结构。有3个conv层和9个inception module以及1个FC层,因为提出了inception module,所以GoogleNet又称为inception net。
GoogleNet的特殊性在于inception module,就是四个操作并行的层。这个层叫做inception module
直观来看,inception module相对于VGG 系列有如下优点:
- 不同感受野的feature进行融合,增加了网络的多尺度能力。
- 模块穿插1x1卷积了,通过降维【减少channel数目】,有减少计算量的作用。
可以看一下这里的实现:
import torch
from torch import nn
# 定义一个卷积加一个 relu 激活函数和一个 batchnorm 作为一个基本的层结构
def conv_relu(in_channel, out_channel, kernel, stride=1, padding=0):layer = nn.Sequential(nn.Conv2d(in_channel, out_channel, kernel, stride, padding),nn.BatchNorm2d(out_channel, eps=1e-3),nn.ReLU(True))return layer
class inception(nn.Module):def __init__(self, in_channel, out1_1, out2_1, out2_3, out3_1, out3_5, out4_1):#out1_1是最左边的通道, #out2_1是从左往右第二个通道的第一个卷积, out2_3第二个通道的第二个卷积, #out3_1第三个通道第一个卷积, out3_5第三个通道第二个卷积, #out4_1第四个通道super(inception, self).__init__()# 第一条线路self.branch1x1 = conv_relu(in_channel, out1_1, 1)# 第二条线路self.branch3x3 = nn.Sequential( conv_relu(in_channel, out2_1, 1),conv_relu(out2_1, out2_3, 3, padding=1))# 第三条线路self.branch5x5 = nn.Sequential(conv_relu(in_channel, out3_1, 1),conv_relu(out3_1, out3_5, 5, padding=2))# 第四条线路self.branch_pool = nn.Sequential(nn.MaxPool2d(3, stride=1, padding=1),conv_relu(in_channel, out4_1, 1))def forward(self, x):f1 = self.branch1x1(x)f2 = self.branch3x3(x)f3 = self.branch5x5(x)f4 = self.branch_pool(x)output = torch.cat((f1, f2, f3, f4), dim=1)return output
test_net = inception(3, 64, 48, 64, 64, 96, 32)
#in_channel=3 out1_1=64, out2_1, out2_3, out3_1, out3_5, out4_1
test_x = Variable(torch.zeros(1, 3, 96, 96))
print('input shape: {} x {} x {}'.format(test_x.shape[1], test_x.shape[2], test_x.shape[3]))
test_y = test_net(test_x)
print('output shape: {} x {} x {}'.format(test_y.shape[1], test_y.shape[2], test_y.shape[3]))
输入是3x96x96,第一条通道是64x96x96,第二条通道分别是48x96x96,64x96x96,第三条通道64x96x96, 96x96x96,第四条通道32x96x96
64 64 96 32 concate起来就是256
所以输出是 256 x 96 x 96。
1 x 1 的卷积是为了降低输入的特征通道,减少参数计算量。通过融合不一样的感受野,增强模型的表达和学习能力。
参考
https://blog.csdn.net/kuweicai/article/details/114993693
GoogleNet和Inception模块相关推荐
- 王权富贵:GoogLeNet的Inception模块变化。
GooLeNet的详细理解可以参考这篇文章,文章详细的说明了V1-V4之间的变化. GooLeNetV1提出了InceptionV1模块,1*1,3*3,5*5这些卷积最后的合并是深度相加.大卷积如3 ...
- 【3】卷积神经网络之GoogLeNet和Inception
Inception 网络是 CNN 分类器发展史上一个重要的里程碑.在 Inception 出现之前,大部分流行 CNN 仅仅是把卷积层堆叠得越来越多,使网络越来越深,以此希望能够得到更好的性能.例如 ...
- 论文解析:理论分析Inception模块和GoogLeNet
Inception-V1 目的 自从卷积神经网络诞生以来,其标准范式就是堆叠的卷积层夹杂着池化层或者是归一化层,发展方向主要是在网络的大小上做文章,无论是增加网络的层数或者说是增加每层网络中神经元的 ...
- 深度神经网络中的Inception模块介绍
深度神经网络(Deep Neural Networks, DNN)或深度卷积网络中的Inception模块是由Google的Christian Szegedy等人提出,包括Inception-v1.I ...
- 一文读懂:GoogleNet的Inception从v1到v4的演变
来源 | 机器学习炼丹术 GoogleNet和VGG是ImageNet挑战赛中的第一名和第二名.共同特点就是两个网络的层次都更深了.但是: VGG继承了LeNet和AlexNet的一些框架结构 而Go ...
- 深度解读GoogleNet之Inception 系列
GoogleNet设计的目的 GoogleNet设计的初衷是为了提高在网络里面的计算资源的利用率. 卷积的稀疏性 卷积的稀疏性是指卷积通常对应一个非常稀疏的矩阵,传统的神经网络是全连接的,后面每一层的 ...
- Inception模块
Inception网络或Inception层的作用是代替人工来确定卷积层中的卷积核类型,或者是否需要创建卷积层和池化层,可以代替你来做决定,虽然网络架构比较复杂,但网络表现却非常好.下图是Incept ...
- 白话详细解读(一)-----GoogLeNet(Inception V1-Inception V3)
一.背景 GoogLeNet.VGGNet分别是2014年ImageNet挑战赛的第一名和第二名,相对于VGGNet的网络结构,GoogLeNet则进行了大胆的尝试,提出了Inception结构,这种 ...
- 计算机视觉Baseline网络串烧(AlexNet、NIN、VGG、GoogLeNet、Inception、ResNet、InceptionResNet、DenseNet、SENet、ResNeXt)
将计算机视觉中的几个知名Baseline网络放在一起讲解其主要内容,如果需要了解详细细节建议阅读原论文 1.AlexNet(ImageNet Classification with Deep Conv ...
最新文章
- Blockchain实现详细手册
- js json对象转字符串_Mock.js模拟数据实现前端独立开发
- ob_start ob_end_clean的用法 fetch
- apache+mod_wsgi+django的环境配置
- 进程,进程组,作业,会话,控制终端
- SAP Spartacus user role页面的checkbox设计明细介绍
- 达摩院年终预测出炉:2022 十大科技趋势,AI for Science 高居榜首
- mySQL 建表约束
- 磁盘的成组与分解技术
- Silverlight使用WCF实现数据通信
- 7.软件架构设计:大型网站技术架构与业务架构融合之道 --- 框架、软件与中间件
- vba ado返回集合_VBA利用IE,抓取深市股票涨跌数据
- SQL第四周学习笔记---python操作数据库、游标、sqlite、mysql数据库银行转账
- 计算机设计大赛作品开发文档
- MySQL Front订单信息表,mysqlfront
- 修改服务器配额有什么坏处,云服务器配额调整
- 计算机excel无法打开,电脑excel打不开的解决方法
- win7桌面上计算机图标名称怎么改,win7电脑桌面图标排列方式如何设置 win7电脑桌面图标排列方法...
- 七分设计感的纯Flutter项目(Mung三部曲)
- 崛起的云平台,彰显信息国产化的中国力量