设为首页 加入收藏

TOP

学习笔记TF032:实现Google Inception Net(四)
2017-09-30 17:48:03 】 浏览:3991
Tags:学习 笔记 TF032: 实现 Google Inception Net
Inception Module,名称Mixed_7a。3个分支。第一分支2层,192输出通道1x1卷积,连接320输出通道3x3卷积,步长2,padding模式VAILD,图片尺寸压缩为8x8。第二分支4层,192输出通道1x1卷积,192输出通道1x7卷积,192输出通道7x1卷积,192输出通道3x3卷积,最后一层步长2,padding模式VAILD,分支输出tensor尺寸8x8x192。第三分支3x3最大池化层,步长2,padding模式VAILD,池化层不改变输出通道,分支输出tensor尺寸8x8x768。三分支输出通道合并,最终输出尺寸8x8x(320+192+768)=8x8x1280。从这个Inception Module开始,输出图片尺寸缩小,通道数增加,tensor 总size下降。

第3 Inception模块组第2个Inception Module,名称Mixed_7b。4个分支。第一分支320输出通道1x1卷积。第二分支,第一层384输出通道1x1卷积,第二层2个分支,384输出通道1x3卷积和384输出通道3x1卷积,用tf.concat合并两个分支,得到输出tensor尺寸8x8x(384+384)=8x8x768。第三分支,第一层448输出通道1x1卷积,第二层384输出通道3x3卷积,第三层2个分支,384输出通道1x3卷积和384输出通道3x1卷积,合并得到8x8x768输出tensor。第四分支3x3平均池化层,连接192输出通道1x1卷积。四分支合并,最终输出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重要原则,图片尺寸不断缩小,从299x299通过5个步长2卷积层或池化层,缩小8x8,输出通道数持续增加,从开始3(RGB三色)到2048。每一层卷积、池化或Inception模块组,空间结构简化,空间信息转化高阶抽象特征信息,空间维度转为通道维度。每层输出tensor总size持续下降,降低计算量。Inception Module规律,一般4个分支,第1分支1x1卷积,第2分支1x1卷积再接分解后(factorized)1xn和nx1卷积,第3分支和第2分支类似,更深,第4分支最大池化或平均池化。Inception Module,通过组合简单特征抽象(分支1)、比较复杂特征抽象(分支2?分支3)、一个简化结构池化层(分支4),4种不同程度特征抽象和变换来有选择保留不同层高阶特征,最大程度丰富网络表达能力。

全局平均池化、Softmax、Auxiliary Logits。函数inception_v3输入参数,num_classes最后需要分类数量,默认1000ILSVRC比赛数据集种类数,is_training标志是否训练过程,训练时Batch Normalization、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,再接5x5平均池化,步长3,padding设VALID,输出尺寸17x17x768变5x5x768。接128输出通道1x1卷积和768输出通道5x5卷积。权重初始化方式重设标准差0.01正态分布,padding模式VALID,输出尺寸变1x1x768。输出变1x1x1000。用tf.squeeze函数消除输出tensor前两个1维度。最后输助分类节点输出aux_logits储存到字典表end_points。

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

Inception V3 网络构建完成。超参数选择,包括层数、卷积核尺寸、池化位置、步长大小、factorization使用时机、分支设计,需要大量探索和实践。

Inception V3运算性能测试。网络结构大,令batch_size 32。图片尺寸299x299,用tf.random_uniform生成随机图片数据 input。用slim.arg_scope加载inception_v3_arg_scope(),scope包含Batch Normalization默认参数,激活函数和参数初始化方式默认值。在arg_scope,调inception_v3函数,传入inputs,获取logits和end_points。创建Session,初始化全部模型参数。设置测试batch数量100,用time_tensorflow_run测试Inception V3网络forward性能。

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

Inception V3 backward性能测试,将整个网络所有参数加入参数列表,测试对全部参数求导所需时间,或直接下载ImageNet数据集,使用真实样本训练并评测所需时间。

Inception V3,Factorization into small convolutions很有效,可以降低参数量、减轻过拟合,增加网络非线性表达能

首页 上一页 1 2 3 4 下一页 尾页 4/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇16、装饰器 下一篇Python-cookies

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目