4个支行都用1×1卷积,伸张分支网络

谷歌(Google) Inception Net,ILSVRC
2014竞技第一名。控制计算量、参数量,分类质量分外好。V1,top-5错误率6.67%,22层,15亿次浮点运算,500万参数(亚历克斯Net
6000万)。V1下落参数量目标,参数愈多模型越粗大,需数据量越大,高品质数据昂贵;参数更多,开销计算资源越大。模型层数更深,表明能力更强,去除最后全连接层,用全局平均池化层(图片尺寸变1×1),参数大减,模型操练更快,减轻过拟合(《Network
in Network》杂谈),Inception
Module提升参数利用成效,大互联网中小互联网。扩大分支互连网,NIN级联卷积层、NLPConv层。一般,卷积层伸张出口通道数,提高表明能力,计算量增大、过拟合,每个输出通道对应一个滤波器,同一滤波器共享参数,只好领取一类特色。NIN,输出通道组保信息。MLPConv,普通卷积层,接1×1卷积、ReLU激活函数。

上学笔记TF032:完成谷歌(Google) Inception Net,tf032inception

谷歌 Inception Net,ILSVRC
2014交锋第一名。控制总括量、参数量,分类品质更加好。V1,top-5错误率6.67%,22层,15亿次浮点运算,500万参数(亚历克斯Net
6000万)。V1下落参数量目标,参数愈多模型越粗大,需数据量越大,高质量数据昂贵;参数更多,费用统计资源越大。模型层数更深,表达能力更强,去除最终全连接层,用全局平均池化层(图片尺寸变1×1),参数大减,模型练习更快,减轻过拟合(《Network
in Network》杂谈),Inception
Module提升参数利用作用,大互联网中小互连网。扩丰裕支网络,NIN级联卷积层、NLPConv层。一般,卷积层扩张出口通道数,进步表明能力,总结量增大、过拟合,每个输出通道对应一个滤波器,同一滤波器共享参数,只好领到一类特色。NIN,输出通道组保新闻。MLPConv,普通卷积层,接1×1卷积、ReLU激活函数。

Inception
Module结构,4个分支。第一分段,输入1×1卷积。1×1卷积,跨通道协会新闻,升高互连网表明能力,输出通道升维、降维。4个支行都用1×1卷积,低本钱跨通道特征变换。第二分层,1×1卷积,3×3卷积,两遍特征变换。第三分段,1×1卷积,5×5卷积。第四支行,3×3最大池化,1×1卷积。1×1卷积性价比高,小总计量,特征变换、非线性化。4个支行后聚合操作合并(输出通道数聚合)。Inception
Module
包括3种差距尺寸卷积、1个最大池化,扩张不一样口径适应性。网络深度、宽度高效伸张,升高准确率,但是拟合。

Inception Net,找到最优稀疏结构单元(Inception
Module)。Hebbian原理,神经反射活动持续、重复,神经元连接稳定性持久进步,八个神经元细胞距离近,参预对方再度、持续高兴,代谢变化成为使对方喜悦细胞。一起发出神经元会连在一起(Cells
that fire together,wire
together),学习进度刺激使神经元间突触强度增加。《Provable Bounds for
Learning Some Deep
Representations》,很大很稀疏神经互联网表明数据集几率分布,网络最佳构筑形式是逐层构筑。上层中度相关(correlated)节点聚类,每个小簇(cluster)连接一起。相关性高节点连接一起。

图片数据,临近区域数据相关性高,相邻像素点卷积连接一起。七个卷积核,同一空间地点,不一样通道卷积核输出结果,相关性极高。稍大一点卷积(3×3、5×5),连接节点相关性高,适当用大尺寸卷积,扩张二种性(diversity)。Inception
Module 4分支,分化尺寸(1×1、3×3、5×5)小型卷积,连接相关性很高节点。

Inception
Module,1×1卷积比例(输出通道数占比)最高,3×3、5×5卷积稍低。整个网络,几个Inception
Module堆叠。靠后Inception
Module卷积空间集高度渐下降,捕获更大面积特征,捕捉更高阶抽象特征。靠后Inception
Module,3×3、5×5大面积卷积核占比(输出通道数)愈多。

Inception Net
22层,最后一层输出,中间节点分类效用好。使用扶助分类节点(auxiliary
classifiers),中间层输出作分类,按较小权重(0.3)加到最终分类结果。非常模型融合,给互连网扩充反向传播梯度信号,提供额外正则化。

Google Inception Net家族:2014年9月《Going Deeper with
Convolutions》Inception V1,top-5错误率6.67%。2015年2月《Batch
Normalization:Accelerating Deep Network Trainign by Reducing Internal
Covariate》Inception V2,top-5错误率4.8%。2015年12月《Rethinking the
Inception Architecture ofr Computer Vision》Inception
V3,top-5错误率3.5%。2016年2月《Inception-v4,Inception-ResNet and the
Impact of Residual Connections on Learning》Inception
V4,top-5错误率3.08%。

Inception
V2,用三个3×3卷积代替5×5大卷积,下落参数量,减轻过拟合,提议Batch
诺玛lization方法。BN,相当有效正则化方法,让大型卷积网络陶冶进程加快很多倍,收敛后分类准确率大幅升高。BN
对种种mini-batch数据之中规范(normalization)处理,输出规范化到N(0,1)正态分布,减弱Internal
Covariate
Shift(内部神经元分布改变)。传统深度神经互联网,每层输入分布变化,只可以用很小学习速率。每层BN
学习速率增大很多倍,迭代次数只需原来的1/14,磨炼时间缩小。BN正则化功效,减弱或者撤回Dropout,简化网络布局。

外加学习速率,加速学习衰减速度,适用BN规范化数据,去除Dropout,减轻L2正则,去除LRN,更干净shuffle陶冶样本,裁减数额增加进程数据光学畸变(BN练习更快,样本被教练次数更少,更实在样本对陶冶有支持)。

Inception V3,引入Factorization into small
convolutions思想,较大二维卷积拆成四个较小一维卷积,节约大批量参数,加快运算,减轻过拟合,扩展一层蜚线性,增加模型表明能力。非对称卷积结构拆分,比对称拆分相同小卷积核效果更明显,处理愈来愈多、更增加空间特点,伸张特色各个性。

优化Inception
Module结构,35×35,17×17,8×8。分支中运用分支,8×8构造,Network In
Network In Network。V3结合微软ResNet。

使用tf.contrib.slim襄助设计42层Inception V3 网络。

Inception V3 网络布局
品类 kernel尺寸/步长(或注释) 输入尺寸
卷积 3×3/2 299x299x3
卷积 3×3/1 149x149x32
卷积 3×3/1 147x147x32
池化 3×3/2 147x147x64
卷积 3×3/1 73x73x64
卷积 3×3/2 71x71x80
卷积 3×3/1 35x35x192
Inception模块组 3个InceptionModule 35x35x288
Inception模块组 5个InceptionModule 17x17x768
Inception模块组 3个InceptionModule 8x8x1280
池化 8×8 8x8x2048
线性 logits 1x1x2048
Softmax 分类输出 1x1x1000

概念不难函数trunc_normal,爆发截断正态分布。

概念函数inception_v3_arg_scope,生成互联网常用函数默许参数,卷积激活函数、权重初始化形式、标准化器。设置L2正则weight_decay默认值0.00004,标准差stddev默认值0.1,参数batch_norm_var_collection默认值moving_vars

定义batch normalization参数字典,定义衰减周密decay 0.997,epsilon
0.001,updates_collections为tf.GraphKeys.UPADTE_OPS,字典variables_collections中beta、gamma设None,moving_mean、moving_variance设batch_norm_var_collection。

slim.agr_scope,函数参数自动赋默许值。with
slim.arg_scope([slim.conv2d, slim.fully_connected],
weights_regularizer=slim.l2_regularizer(weight_decay))
,对[slim.conv2d,
slim.fully_connected]三个函数参数自动赋值,参数weights_regularizer值默许设为slim.l2_regularizer(weight_decay)。不须求每一趟重复设置参数,只必要修改时设置。

嵌套一个slim.arg_scope,卷积层生成函数slim.conv2d参数赋默许值,权重开端化器weights_initializer设trunc_normal(stddev),激活函数设ReLU,标准化器设slim.batch_norm,标准化器参数设batch_norm_params,重返定义好的scope。

概念函数inception_v3_base,生成Inception V3互连网卷积。参数inputs
输入图片数据tensor,scope 函数默许参数环境。定义字典表end_points
,保存关键节点。slim.agr_scope,设置slim.conv2d、slim.max_pool2d、slim_avg_pool2d函数参数默许值,stride设1,padding设VALID。非Inception
Module卷积层,slim.conv2d开立卷积层,第一参数输入tensor,第二参数输出通道数,第三参数卷积核尺寸,第四参数步长stride
,第五参数padding方式。第一卷积层输出通道数32,卷积核尺寸3×3,步长
2,padding情势VALID。

非Inception Module卷积层,首要用3×3小卷积核。Factorization into small
convolutions思想,
用三个1维卷积模拟大尺寸2维卷积,收缩参数量,增添非线性。1×1卷积,低本钱跨通道特征结合。第一卷积层步长2,其他卷积层步长1。池化层尺寸3×3、步长2重叠最大池化。网络输入数据惊寸299x299x3,经过3个涨幅2层,尺寸减少为35x35x192,空间尺寸大下降,输出通道增添很多。一共5个卷积层,2个池化层,完结输入图片数据尺寸缩短,抽象图片特征。

三个屡次三番Inception模块组。

第1个Inception模块组3个结构类似Inception Module。

第1 Inception模块组第1个Inception
Module,名称Mixed_5b。slim.arg_scope设置富有Inception模块组默许参数,所有卷积层、最大池化、平均池化层步长设1,padding情势设SAME。设置Inception
Module
variable_scope名称Mixed_5b。4个分支,Branch_0到Branch_3。第一分层64输出通道1×1卷积。第二拨出48出口通道1×1卷积,连接64输出通道5×5卷积。第三支行64出口通道1×1卷积,连接2个96输出通道3×3卷积。第四分支3×3平均池化,连接32出口通道1×1卷积。最终tf.concat合并4分支输出(第三维度输出通道合并),生成Inception
Module最后输出。所有层步长为1,padding模型SAME,图片尺寸不缩短,维持35×35,通道数增添,4个分支通道数和64+64+96+32=256,最终输出tensor尺寸35x35x256。

第1 Inception模块组第2个Inception
Module,名称Mixed_5c。步长1,padding模型SAME。4个支行,第四分支最终接64输出通道1×1卷积。输出tensor尺寸35x35x288。

第1 Inception模块组第3个Inception
Module,名称Mixed_5d。输出tensor尺寸35x35x288。

第2个Inception模块组5个Inception Module。第2到第5Inception
Module结构类似。

第2 Inception模块组第1个Inception
Module,名称Mixed_6a。3个支行。第一分段384输出通道3×3卷积,步长2,padding方式VAILD,图片尺寸压缩为17×17。第二分支3层,64输出通道1×1卷积,多少个96出口通道3×3卷积,最后一层步长2,padding方式VAILD,分支输出tensor尺寸17x17x96。第三分支3×3最大池化层,步长2,padding格局VAILD,分支输出tensor尺寸17x17x256。三分支输出通道合并,最后输出尺寸17x17x(384+96+256)=17x17x768。第2
Inception模块组5个Inception Module尺寸相同。

第2 Inception模块组第2个Inception
Module,名称Mixed_6b。4个分支。第一拨出192出口通道1×1卷积。第二分支3层,第一层128输出通道1×1卷积,第二层128出口通道1×7卷积,第三层192输出通道7×1卷积。Factorization
into small
convolutions思想,串联1×7卷积和7×1卷积,格外合成7×7卷积,参数量大减,减轻过拟合,伸张一个激活函数,增强非线性特征变换。第三分支5层,第一层128输出通道1×1卷积,第二层128出口通道7×1卷积,第三层128输出通道1×7卷积,第四层128出口通道7×1卷积,第五层192输出通道1×7卷积。Factorization
into small
convolutions典范,反复拆分7×7卷积。第四分支3×3平均池化层,连接192输出通道1×1卷积。四拨出合并,最后输出tensor尺寸17x17x(192+192+192+192+192)=17x17x768。

第2 Inception模块组第3个Inception
Module,名称Mixed_6c。第二支行和第三分支前多少个卷积层输出通道数从128变成160,最后输出通道数仍然192。网络每经过一个Inception
Module,就算输出尺寸不变,特征被重新精炼几次,充足卷积和非线性化,升高网络质量。

第2 Inception模块组第4个Inception Module,名称Mixed_6d。

第2 Inception模块组第5个Inception
Module,名称Mixed_6e。Mixed_6e存储end_points,作Auxiliary
Classifier输助模型分类。

第3个Inception模块组3个Inception Module。第2到第3Inception
Module结构类似。

第3 Inception模块组第1个Inception
Module,名称Mixed_7a。3个支行。第一拨出2层,192输出通道1×1卷积,连接320出口通道3×3卷积,步长2,padding格局VAILD,图片尺寸压缩为8×8。第二分支4层,192输出通道1×1卷积,192输出通道1×7卷积,192出口通道7×1卷积,192输出通道3×3卷积,最终一层步长2,padding格局VAILD,分支输出tensor尺寸8x8x192。第三分支3×3最大池化层,步长2,padding格局VAILD,池化层不转移输出通道,分支输出tensor尺寸8x8x768。三分支输出通道合并,最终输出尺寸8x8x(320+192+768)=8x8x1280。从那个Inception
Module初叶,输出图片尺寸缩短,通道数扩充,tensor 总size下跌。

第3 Inception模块组第2个Inception
Module,名称Mixed_7b。4个分支。第一支行320出口通道1×1卷积。第二分段,第一层384输出通道1×1卷积,第二层2个支行,384输出通道1×3卷积和384输出通道3×1卷积,用tf.concat合并八个分支,得到输出tensor尺寸8x8x(384+384)=8x8x768。第三分段,第一层448出口通道1×1卷积,第二层384出口通道3×3卷积,第三层2个分支,384出口通道1×3卷积和384出口通道3×1卷积,合并得到8x8x768出口tensor。第四分支3×3平分池化层,连接192输出通道1×1卷积。四拨出合并,最后输出tensor尺寸8x8x(320+768+768+192)=8x8x2048。那么些Inception
Module,输出通道数从1280充实到2048。

第3 Inception模块组第3个Inception
Module,名称Mixed_7c。重返那个Inception
Module结果,作inception_v3_base函数最终输出。

Inception
V3互联网布局,首先5个卷积层和2个池化层交替普通布局,3个Inception模块组,每个模块组内包涵四个结构类似Inception
Module。设计Inception
Net紧要尺度,图片尺寸不断减弱,从299×299透过5个涨幅2卷积层或池化层,缩短8×8,输出通道数持续扩大,从开端3(RGB三色)到2048。每一层卷积、池化或Inception模块组,空间协会简化,空间音信转化高阶抽象特征音信,空间维度转为通道维度。每层输出tensor总size持续下降,降低计算量。Inception
Module规律,一般4个支行,第1分支1×1卷积,第2分支1×1卷积再接分解后(factorized)1xn和nx1卷积,第3分层和第2分层类似,更深,第4分支最大池化或平均池化。Inception
Module,通过结合简单特征抽象(分支1)、比较复杂特征抽象(分支2、分支3)、一个简化结构池化层(分支4),4种差距水平特征抽象和更换到有取舍保留分歧层高阶特征,最大程度丰硕互联网表明能力。

大局平均池化、Softmax、Auxiliary
Logits。函数inception_v3输入参数,num_classes最终索要分类数量,默许1000ILSVRC竞赛数据集体系数,is_training标志是还是不是磨练进度,训练时Batch
诺玛lization、Dropout才会被启用,dropout_keep_prob训练时Dropoutr所需保留节点比例,默许0.8。prediction_fn分类函数,默许使用slim.softmax。spatial_squeeze参数标志输出是不是开展squeeze操作(去除维数1维度)。reuse标志网络和Variable是还是不是重用。scope包罗函数默许参数环境,用tf.variable_scope定义网络name、reuse参数默认值,用slim.arg_scope定义Batch
Normalization和Dropout的is_trainin标志默许值。用incepiton_v3_base构筑整个互联网卷积,获得结尾一层输出net和紧要性节点字典表end_points。

Auxiliary Logits,协助分类节点,支持预测分类结果。用slim.arg_scope
卷积、最大池化、平均池化设默许步长1,默许padding形式SAME。通过end_points取Mixed_6e,再接5×5平均池化,步长3,padding设VALID,输出尺寸17x17x768变5x5x768。接128输出通道1×1卷积和768出口通道5×5卷积。权重先导化方式重设标准差0.01正态分布,padding情势VALID,输出尺寸变1x1x768。输出变1x1x1000。用tf.squeeze函数消除输出tensor前三个1维度。最终输助分类节点输出aux_logits储存到字典表end_points。

分类预测逻辑。Mixed_7e最终卷积层输出8×8大局平均池化,padding情势VALID,输出tensor尺寸变1x1x2048。接Dropout层,节点保留率dropout_keep_prob。连接输出通道数1000的1×1卷积,激活函数、规范化函数设空。tf.squeeze去除输出tensor维数1维度,接Softmax分类预测结果。最终回到输出结果logits、包涵输助节点end_points。

Inception V3
网络营造完结。超参数选择,包蕴层数、卷积核尺寸、池化地方、步长大小、factorization使用时机、分支设计,须要大批量商讨和实施。

Inception V3运算性能测试。网络布局大,令batch_size
32。图片尺寸299×299,用tf.random_uniform生成自由图片数据
input。用slim.arg_scope加载inception_v3_arg_scope(),scope包含Batch
诺玛lization默许参数,激活函数和参数伊始化方式默许值。在arg_scope,调inception_v3函数,传入inputs,获取logits和end_points。创设Session,起始化全体模型参数。设置测试batch数量100,用time_tensorflow_run测试Inception
V3网络forward性能。

Inception V3网络,图片面积比VGGNet
224×224大78%,forward速度比VGGNet快。2500万参数,比Inception
V1的700万多,不到亚历克斯Net的6000万的一半,比VGGNet的1.4亿少很多。42层,整个互连网浮点统计量仅50亿次,比Inception
V1的15亿次多,比VGGNet少。可以移植到普通服务器提供高速响应服务,或移植到手机实时图像识别。

Inception V3
backward质量测试,将总体互连网具有参数参预参数列表,测试对任何参数求导所需时日,或直接下载ImageNet数据集,使用真实样本磨炼并评测所需时日。

Inception V3,Factorization into small
convolutions很得力,可以减低参数量、减轻过拟合,伸张互联网非线性表达能力。卷积网络从输入到输出,图片尺寸渐渐缩短,输出通道数逐步扩充,空间协会简化,空间音信转化为高阶抽象特征音信。Inception
Module八个支行提取分歧抽象程度高阶特征很得力,丰硕互联网表达能力。

 

参考资料:
《TensorFlow实践》

迎接付费咨询(150元每小时),我的微信:qingxingfengzi

http://www.bkjia.com/Pythonjc/1219993.htmlwww.bkjia.comtruehttp://www.bkjia.com/Pythonjc/1219993.htmlTechArticle学习笔记TF032:实现Google Inception
Net,tf032inception 谷歌 Inception Net,ILSVRC
2014交锋第一名。控制总结量、参数量,分类质量越发好。V1,top-5错误…

Inception
Module结构,4个支行。第一分支,输入1×1卷积。1×1卷积,跨通道协会新闻,进步互联网表明能力,输出通道升维、降维。4个分支都用1×1卷积,低本钱跨通道特征变换。第二分层,1×1卷积,3×3卷积,一遍特征变换。第三拨出,1×1卷积,5×5卷积。第四拨出,3×3最大池化,1×1卷积。1×1卷积性价比高,小计算量,特征变换、非线性化。4个分支后聚合操作合并(输出通道数聚合)。Inception
Module
包蕴3种分化尺寸卷积、1个最大池化,扩张分歧尺度适应性。互联网深度、宽度高效扩展,升高准确率,不过拟合。

Inception Net,找到最优稀疏结构单元(Inception
Module)。Hebbian原理,神经反射活动持续、重复,神经元连接稳定性持久提高,三个神经元细胞距离近,参预对方再次、持续欢悦,代谢变化成为使对方开心细胞。一起发出神经元会连在一起(Cells
that fire together,wire
together),学习进度刺激使神经元间突触强度增添。《Provable Bounds for
Learning Some Deep
Representations》,很大很稀疏神经互联网表明数据集几率分布,网络最佳构筑方式是逐层构筑。上层中度相关(correlated)节点聚类,每个小簇(cluster)连接一起。相关性高节点连接一起。

图形数据,临近区域数据相关性高,相邻像素点卷积连接一起。几个卷积核,同一空间地方,差距通道卷积核输出结果,相关性极高。稍大一点卷积(3×3、5×5),连接节点相关性高,适当用大尺寸卷积,扩展多种性(diversity)。Inception
Module 4分支,差距尺寸(1×1、3×3、5×5)小型卷积,连接相关性很高节点。

Inception
Module,1×1卷积比例(输出通道数占比)最高,3×3、5×5卷积稍低。整个网络,四个Inception
Module堆叠。靠后Inception
Module卷积空间集高度渐下降,捕获更大面积特征,捕捉更高阶抽象特征。靠后Inception
Module,3×3、5×5大面积卷积核占比(输出通道数)更多。

Inception Net
22层,最终一层输出,中间节点分类效果好。使用支持分类节点(auxiliary
classifiers),中间层输出作分类,按较小权重(0.3)加到最终分类结果。相当模型融合,给互联网扩张反向传播梯度信号,提供额外正则化。

Google Inception Net家族:2014年9月《Going Deeper with
Convolutions》Inception V1,top-5错误率6.67%。2015年2月《Batch
Normalization:Accelerating Deep Network Trainign by Reducing Internal
Covariate》Inception V2,top-5错误率4.8%。2015年12月《Rethinking the
Inception Architecture ofr Computer Vision》Inception
V3,top-5错误率3.5%。2016年2月《Inception-v4,Inception-ResNet and the
Impact of Residual Connections on Learning》Inception
V4,top-5错误率3.08%。

Inception
V2,用三个3×3卷积代替5×5大卷积,下落参数量,减轻过拟合,提出Batch
Normalization方法。BN,非凡实用正则化方法,让大型卷积网络陶冶进程加速很多倍,收敛后分类准确率大幅升高。BN
对每个mini-batch数据里面规则(normalization)处理,输出规范化到N(0,1)正态分布,收缩Internal
Covariate
Shift(内部神经元分布改变)。传统深度神经网络,每层输入分布变化,只好用很小学习速率。每层BN
学习速率增大很多倍,迭代次数只需原来的1/14,操练时间收缩。BN正则化功用,减少或者打消Dropout,简化网络布局。

叠加学习速率,加速学习衰减速度,适用BN规范化数据,去除Dropout,减轻L2正则,去除LRN,更干净shuffle锻炼样本,裁减数额增加进度数据光学畸变(BN陶冶更快,样本被教练次数更少,更实际样本对操练有扶持)。

Inception V3,引入Factorization into small
convolutions思想,较大二维卷积拆成八个较小一维卷积,节约大批量参数,加速运算,减轻过拟合,增添一层蜚线性,伸张模型表明能力。非对称卷积结构拆分,比对称拆分相同小卷积核效果更为之侧目,处理越来越多、更丰盛空间特点,扩充特色多样性。

优化Inception
Module结构,35×35,17×17,8×8。分支中使用分支,8×8构造,Network In
Network In Network。V3结合微软ResNet。

选择tf.contrib.slim协理设计42层Inception V3 互联网。

Inception V3 互连网布局
体系 kernel尺寸/步长(或注释) 输入尺寸
卷积 3×3/2 299x299x3
卷积 3×3/1 149x149x32
卷积 3×3/1 147x147x32
池化 3×3/2 147x147x64
卷积 3×3/1 73x73x64
卷积 3×3/2 71x71x80
卷积 3×3/1 35x35x192
Inception模块组 3个InceptionModule 35x35x288
Inception模块组 5个InceptionModule 17x17x768
Inception模块组 3个InceptionModule 8x8x1280
池化 8×8 8x8x2048
线性 logits 1x1x2048
Softmax 分类输出 1x1x1000

概念不难函数trunc_normal,爆发截断正态分布。

概念函数inception_v3_arg_scope,生成互联网常用函数默许参数,卷积激活函数、权重开头化格局、标准化器。设置L2正则weight_decay默认值0.00004,标准差stddev默认值0.1,参数batch_norm_var_collection默认值moving_vars

定义batch normalization参数字典,定义衰减全面decay 0.997,epsilon
0.001,updates_collections为tf.GraphKeys.UPADTE_OPS,字典variables_collections中beta、gamma设None,moving_mean、moving_variance设batch_norm_var_collection。

slim.agr_scope,函数参数自动赋默许值。with
slim.arg_scope([slim.conv2d, slim.fully_connected],
weights_regularizer=slim.l2_regularizer(weight_decay))
,对[slim.conv2d,
slim.fully_connected]多个函数参数自动赋值,参数weights_regularizer值默许设为slim.l2_regularizer(weight_decay)。不须要每一回重复设置参数,只须要修改时设置。

嵌套一个slim.arg_scope,卷积层生成函数slim.conv2d参数赋默许值,权重早先化器weights_initializer设trunc_normal(stddev),激活函数设ReLU,标准化器设slim.batch_norm,标准化器参数设batch_norm_params,重回定义好的scope。

概念函数inception_v3_base,生成Inception V3网络卷积。参数inputs
输入图片数据tensor,scope 函数默许参数环境。定义字典表end_points
,保存关键节点。slim.agr_scope,设置slim.conv2d、slim.max_pool2d、slim_avg_pool2d函数参数默许值,stride设1,padding设VALID。非Inception
Module卷积层,slim.conv2d成立卷积层,第一参数输入tensor,第二参数输出通道数,第三参数卷积核尺寸,第四参数步长stride
,第五参数padding情势。第一卷积层输出通道数32,卷积核尺寸3×3,步长
2,padding情势VALID。

非Inception Module卷积层,主要用3×3小卷积核。Factorization into small
convolutions思想,
用多少个1维卷积模拟大尺寸2维卷积,收缩参数量,增添非线性。1×1卷积,低本钱跨通道特征结合。第一卷积层步长2,其余卷积层步长1。池化层尺寸3×3、步长2重叠最大池化。网络输入数据惊寸299x299x3,经过3个涨幅2层,尺寸减少为35x35x192,空间尺寸大下降,输出通道增添很多。一共5个卷积层,2个池化层,完毕输入图片数据尺寸减弱,抽象图片特征。

七个再而三Inception模块组。

第1个Inception模块组3个布局类似Inception Module。

第1 Inception模块组第1个Inception
Module,名称Mixed_5b。slim.arg_scope设置有着Inception模块组默许参数,所有卷积层、最大池化、平均池化层步长设1,padding情势设SAME。设置Inception
Module
variable_scope名称Mixed_5b。4个分支,Branch_0到Branch_3。第一分层64输出通道1×1卷积。第二分支48出口通道1×1卷积,连接64输出通道5×5卷积。第三支行64出口通道1×1卷积,连接2个96输出通道3×3卷积。第四分支3×3平均池化,连接32输出通道1×1卷积。最后tf.concat合并4分支输出(第三维度输出通道合并),生成Inception
Module最后输出。所有层步长为1,padding模型SAME,图片尺寸不缩短,维持35×35,通道数扩张,4个分支通道数和64+64+96+32=256,最后输出tensor尺寸35x35x256。

第1 Inception模块组第2个Inception
Module,名称Mixed_5c。步长1,padding模型SAME。4个分支,第四分支最终接64输出通道1×1卷积。输出tensor尺寸35x35x288。

第1 Inception模块组第3个Inception
Module,名称Mixed_5d。输出tensor尺寸35x35x288。

第2个Inception模块组5个Inception Module。第2到第5Inception
Module结构类似。

第2 Inception模块组第1个Inception
Module,名称Mixed_6a。3个支行。第一支行384输出通道3×3卷积,步长2,padding格局VAILD,图片尺寸压缩为17×17。第二分支3层,64输出通道1×1卷积,三个96出口通道3×3卷积,最终一层步长2,padding格局VAILD,分支输出tensor尺寸17x17x96。第三分支3×3最大池化层,步长2,padding方式VAILD,分支输出tensor尺寸17x17x256。三分支输出通道合并,最终输出尺寸17x17x(384+96+256)=17x17x768。第2
Inception模块组5个Inception Module尺寸相同。

第2 Inception模块组第2个Inception
Module,名称Mixed_6b。4个支行。第一拨出192输出通道1×1卷积。第二分支3层,第一层128出口通道1×1卷积,第二层128出口通道1×7卷积,第三层192出口通道7×1卷积。Factorization
into small
convolutions思想,串联1×7卷积和7×1卷积,万分合成7×7卷积,参数量大减,减轻过拟合,伸张一个激活函数,增强非线性特征变换。第三分支5层,第一层128输出通道1×1卷积,第二层128出口通道7×1卷积,第三层128出口通道1×7卷积,第四层128输出通道7×1卷积,第五层192出口通道1×7卷积。Factorization
into small
convolutions典范,反复拆分7×7卷积。第四分支3×3等分池化层,连接192输出通道1×1卷积。四支行合并,最后输出tensor尺寸17x17x(192+192+192+192+192)=17x17x768。

第2 Inception模块组第3个Inception
Module,名称Mixed_6c。第二支行和第三分支前多少个卷积层输出通道数从128改为160,最后输出通道数如故192。网络每经过一个Inception
Module,即便输出尺寸不变,特征被再一次精炼四次,丰硕卷积和非线性化,提高互连网品质。

第2 Inception模块组第4个Inception Module,名称Mixed_6d。

第2 Inception模块组第5个Inception
Module,名称Mixed_6e。Mixed_6e存储end_points,作Auxiliary
Classifier输助模型分类。

第3个Inception模块组3个Inception Module。第2到第3Inception
Module结构类似。

第3 Inception模块组第1个Inception
Module,名称Mixed_7a。3个分支。第一拨出2层,192出口通道1×1卷积,连接320输出通道3×3卷积,步长2,padding方式VAILD,图片尺寸压缩为8×8。第二分支4层,192出口通道1×1卷积,192出口通道1×7卷积,192输出通道7×1卷积,192出口通道3×3卷积,最后一层步长2,padding方式VAILD,分支输出tensor尺寸8x8x192。第三分支3×3最大池化层,步长2,padding情势VAILD,池化层不改动输出通道,分支输出tensor尺寸8x8x768。三分支输出通道合并,最后输出尺寸8x8x(320+192+768)=8x8x1280。从这一个Inception
Module开始,输出图片尺寸缩短,通道数增加,tensor 总size下跌。

第3 Inception模块组第2个Inception
Module,名称Mixed_7b。4个支行。第一支行320输出通道1×1卷积。第二分段,第一层384出口通道1×1卷积,第二层2个支行,384出口通道1×3卷积和384输出通道3×1卷积,用tf.concat合并八个支行,得到输出tensor尺寸8x8x(384+384)=8x8x768。第三分段,第一层448出口通道1×1卷积,第二层384输出通道3×3卷积,第三层2个支行,384输出通道1×3卷积和384出口通道3×1卷积,合并得到8x8x768输出tensor。第四分支3×3等分池化层,连接192出口通道1×1卷积。四支行合并,最终输出tensor尺寸8x8x(320+768+768+192)=8x8x2048。那些Inception
Module,输出通道数从1280增添到2048。

第3 Inception模块组第3个Inception
Module,名称Mixed_7c。再次回到这么些Inception
Module结果,作inception_v3_base函数最后输出。

Inception
V3网络布局,首先5个卷积层和2个池化层交替普通布局,3个Inception模块组,每个模块组内包涵七个社团类似Inception
Module。设计Inception
Net紧要标准,图片尺寸不断裁减,从299×299透过5个涨幅2卷积层或池化层,裁减8×8,输出通道数持续加码,从上马3(RGB三色)到2048。每一层卷积、池化或Inception模块组,空间协会简化,空间音信转化高阶抽象特征音信,空间维度转为通道维度。每层输出tensor总size持续下落,下降统计量。Inception
Module规律,一般4个分支,第1分支1×1卷积,第2分支1×1卷积再接分解后(factorized)1xn和nx1卷积,第3拨出和第2支行类似,更深,第4支行最大池化或平均池化。Inception
Module,通过结合不难特征抽象(分支1)、比较复杂特征抽象(分支2、分支3)、一个简化结构池化层(分支4),4种不相同水平特征抽象和更换来有接纳保留分歧层高阶特征,最大程度丰硕互连网表明能力。

全局平均池化、Softmax、Auxiliary
Logits。函数inception_v3输入参数,num_classes最终索要分类数量,默许1000ILSVRC较量数据集种类数,is_training标志是或不是操练进度,练习时Batch
诺玛lization、Dropout才会被启用,dropout_keep_prob磨练时Dropoutr所需保留节点比例,默许0.8。prediction_fn分类函数,默许使用slim.softmax。spatial_squeeze参数标志输出是否开展squeeze操作(去除维数1维度)。reuse标志网络和Variable是不是重用。scope包含函数默许参数环境,用tf.variable_scope定义网络name、reuse参数默许值,用slim.arg_scope定义Batch
Normalization和Dropout的is_trainin标志默许值。用incepiton_v3_base构筑整个网络卷积,得到终极一层输出net和关键节点字典表end_points。

Auxiliary Logits,扶助分类节点,援救预测分类结果。用slim.arg_scope
卷积、最大池化、平均池化设默许步长1,默许padding格局SAME。通过end_points取Mixed_6e,再接5×5平均池化,步长3,padding设VALID,输出尺寸17x17x768变5x5x768。接128输出通道1×1卷积和768出口通道5×5卷积。权重伊始化形式重设标准差0.01正态分布,padding形式VALID,输出尺寸变1x1x768。输出变1x1x1000。用tf.squeeze函数消除输出tensor前三个1维度。最终输助分类节点输出aux_logits储存到字典表end_points。

分拣预测逻辑。Mixed_7e最终卷积层输出8×8大局平均池化,padding情势VALID,输出tensor尺寸变1x1x2048。接Dropout层,节点保留率dropout_keep_prob。连接输出通道数1000的1×1卷积,激活函数、规范化函数设空。tf.squeeze去除输出tensor维数1维度,接Softmax分类预测结果。最后回来输出结果logits、包罗输助节点end_points。

Inception V3
网络创设完毕。超参数选拔,蕴含层数、卷积核尺寸、池化地方、步长大小、factorization使用时机、分支设计,要求大量研讨和推行。

Inception V3运算质量测试。网络布局大,令batch_size
32。图片尺寸299×299,用tf.random_uniform生成自由图片数据
input。用slim.arg_scope加载inception_v3_arg_scope(),scope包罗Batch
诺玛lization默许参数,激活函数和参数起首化格局默许值。在arg_scope,调inception_v3函数,传入inputs,获取logits和end_points。创造Session,起头化全部模型参数。设置测试batch数量100,用time_tensorflow_run测试Inception
V3网络forward性能。

Inception V3网络,图片面积比VGGNet
224×224大78%,forward速度比VGGNet快。2500万参数,比Inception
V1的700万多,不到亚历克斯Net的6000万的一半,比VGGNet的1.4亿少很多。42层,整个互连网浮点计算量仅50亿次,比Inception
V1的15亿次多,比VGGNet少。能够移植到普通服务器提供高效响应服务,或移植到手机实时图像识别。

Inception V3
backward质量测试,将总体互联网具有参数插手参数列表,测试对任何参数求导所需时间,或间接下载ImageNet数据集,使用真实样本陶冶并评测所需时日。

Inception V3,Factorization into small
convolutions很实惠,可以下跌参数量、减轻过拟合,伸张互连网非线性表明能力。卷积互连网从输入到输出,图片尺寸逐渐压缩,输出通道数逐步增添,空间协会简化,空间音讯转化为高阶抽象特征音讯。Inception
Module两个支行提取不一样抽象程度高阶特征很实惠,足够网络表明能力。

 

参考资料:
《TensorFlow实战》

欢迎付费咨询(150元每时辰),我的微信:qingxingfengzi

相关文章