背景
google在InceptionV1之后,又发表文章《Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》、《Rethinking the Inception Architecture for Computer Vision》,前者提出了广泛使用的Batch Normalization方法,后者提出了InceptionV2、InceptionV3结构,通过在InceptionV1的基础上逐步改进得到V2,最后汇总所有的改进策略得到V3。
使用RMSprop优化器,而非SGD优化器
使用Batch Normalization,将每一层的输入尽量规范化,在辅助分类器中也使用BN
分步卷积,将大尺寸的卷积核分解为多个小卷积核,减少计算量、提升计算速度
卷积与池化并行进行降维,减少参数量的同时 避免表征瓶颈(representational bottlenecks)
使用Label Smoothing进行训练,减轻预测中非最大概率值的惩罚
网络结构
网络结构如上图,在Inception部分,表格与文字部分不一致,尽量以图片部分为准,同时借鉴tensorflow官方实现代码
文字表述:
在35*35部分有3个传统模块,每个模块有288个filters;这部分使用768个filters进行卷积与池化并行降维操作(见Section5,即图10,但是5*5未分解),将35*35降至17*17
之后,接上5个分解后的模块,结构如图5(在InceptionV1模块的基础上讲5*5分解为两个3*3),并使用卷积与池化并行降维操作,如图10,降至8*8*1280
最后,使用图6所示的两个模块,输出2048个filters
本文实现的Inception部分结构:
35*35*288 ——> 33Inception a ——> 33Inception b ——> 33Inception c(并行降维)——>
17*17*768 ——> 17Inception a ——> 17Inception b ——> 17Inception c ——> 17Inception d ——> 17Inception b (并行降维)——>
8*8*1280——> 13Inception a ——> 13Inception b ——> 8*8*2048
代码:
注:
以上代码在alexnet的基础上,实现了:
1)调用框架api读取数据集
2)进行train、val的流程
3)在train时可以输出各层shape
4)保存最优loss模型,并在结束时输出最优loss及对应epoch
5)在训练结束后查看loss、acc变化曲线
(实验数据集):UC Merced Land Use Dataset,常用的遥感场景分类数据集,21class * 100pic = 2100张图片,统一为256*256pix大小
http://weegee.vision.ucmerced.edu/datasets/landuse.html
(在pytorchtensorflow、keras、paddle目前不收敛)
文件结构:my_utils.py文件存放通用函数
来源:CSDN
作者:GISer_Lin
链接:https://blog.csdn.net/nominior/article/details/104423447