基于GoogLeNet-V1及V2的鱼类图像分析

摘 要:GoogLeNet-v2神经网络是由谷歌团队在他们上一代网络GoogLeNet-v1的基础上改进而来。GoogLeNet-v1网络在2014年的image图像分类大赛中占据了分类第一名的成绩,将Top-5 error降低到了6.67%。比2013年的第一名提高了近5%。V2网络在结构上继承了v1主体结构,并还创造性的提出了Batch Normalization以解决网络中的ICS(网络参数变化导致的输出值分布变化),从而表现出了优异的性能。本文将辅助损失、数据增强策略、学习率下降策略、测试技巧,以及Batch Normalization等五个方面来对GoogLeNet-v2进行总结。因为GoogleNet-v2在imageNet据集上表现出来的优异性能,我将之应用到鱼类识别中,达到了50.53%的分类正确率,并对GoogLeNet-v2在其上的表现进行总结。

1 引言

深度学习特别是卷积神经网络( CNN) 能够从图像中自动 提 取 特 征, 已 经 成 为 图像领域的研究热点。CNN是一种基于感知器的模型结构,其优点在于可以直接输入原始图像,避免对图像的过度预处理,通过局部感受野、权值共享、池化功能,使得 CNN 能在较低的模型复杂度下充分利用图像局部和全局信息,对图像的平移、旋转、缩放等具有一定鲁棒性。CNN 经典模型包括: AlexNet、VGG、GoogLeNet、残差神经网络( ResNet)等模型。其中GoogLeNet-v2具有里程碑式的意义,它提出的batch normalization成为了之后网络发展的标配。并且在网络层数不断加深的背景下,能够使网络参数骤减,其在ImageNet数据集上的预训练模型大小仅为50多Mb。大大节省了运行时所带来的内存消耗。并且因为一系列创新的举措,从而使网络结构焕然一新,效率更高。
为响应大自然保护协会为了保护和监控海洋环境及生态平衡希望开发者能开发处机器学习算法,自动分类和识别远洋捕捞船上的摄像头拍摄到的图片中鱼类的品种的呼吁。这一数据集—NCFM共提供了3777张标注的图片作为训练集,这些图片被分为了8类,其中7类是不同种类的海鱼,剩余1类则是不含有鱼的图片,每张图片只属于8类中的某一类别。起初,NFCM是作为Kaggle上一个图像分类比赛的数据集出现,因为看到其蕴含的人与自然和谐相处的意义,将此数据集应用到GoogLeNet-v2网络中,检验GoogLeNet-v2网络的迁移学习能力。

2 GoogleNet-v2的基本原理

深度学习以及神经网络快速发展,人们不再只关注更给力的硬件、更大的数据集、更大的模型,而是更在意新的idea、新的算法以及模型的改进。
一般来说,提升网络性能最直接的办法就是增加网络深度和宽度,这也就意味着巨量的参数。但是,巨量参数容易产生过拟合也会大大增加计算量。
文章认为解决上述两个缺点的根本方法是将全连接甚至一般的卷积都转化为稀疏连接。一方面现实生物神经系统的连接也是稀疏的,另一方面有文献1表明:对于大规模稀疏的神经网络,可以通过分析激活值的统计特性和对高度相关的输出进行聚类来逐层构建出一个最优网络。这点表明臃肿的稀疏网络可能被不失性能地简化。 虽然数学证明有着严格的条件限制,但Hebbian准则有力地支持了这一点:fire together,wire together。
早些的时候,为了打破网络对称性和提高学习能力,传统的网络都使用了随机稀疏连接。但是,计算机软硬件对非均匀稀疏数据的计算效率很差,所以在AlexNet中又重新启用了全连接层,目的是为了更好地优化并行运算。
所以,现在的问题是有没有一种方法,既能保持网络结构的稀疏性,又能利用密集矩阵的高计算性能。大量的文献表明可以将稀疏矩阵聚类为较为密集的子矩阵来提高计算性能,据此论文提出了名为Inception 的结构来实现此目的。
GoogLeNet-v2在以往神经网络惯有的卷积层、池化层的基础上添加了辅助层,以进行辅助分类和进行辅助损失的计算,使其结构与以往大有不同。在网络初始(前六层),使用conv-pool-conv-pool结构,快速降低图片分辨率,减小尺寸。随后使用三大类inception结构共18层进行特征提取及分类。最后再使用随机失活处理与全连接层的连接,直至全连接层的分类输出。
图1. GoogLeNet整体结构图:
在这里插入图片描述
表1.GoogleNet结构及参数表:
在这里插入图片描述

3 GoogLeNet-v2网络架构

3.1 inception结构

Inception结构的主要思路是怎样用密集成分来近似最优的局部稀疏结构。作者首先提出下图这样的基本结构:
图2.原始inception结构:
在这里插入图片描述
在上图中:
(1)采用不同大小的卷积核意味着不同大小的感受野,最后拼接意味着不同尺度特征的融合;
(2)之所以卷积核大小采用1、3和5,主要是为了方便对齐。设定卷积步长stride=1之后,只要分别设定pad=0、1、2,那么卷积之后便可以得到相同维度的特征,然后这些特征就可以直接拼接在一起了;
(3)文章说很多地方都表明pooling很有效,所以Inception里面也嵌入了一个pooling层。
(4)网络越到后面,特征越抽象,而且每个特征所涉及的感受野也更大了,因此随着层数的增加,3x3和5x5卷积的比例也要增加。
但是问题随之而来:使用5x5的卷积核仍然会带来巨大的计算量。为此,文章借鉴NIN2,采用1x1卷积核来进行降维。利用1×1卷积的先行降维,再将经过降维后的图像传送给原始的网络结构,就可以大大减少网络参数。
改进后的inception结构如图所示:
在这里插入图片描述
图3.改进后的inception结构

3.2 中间层输出辅助损失

文章在incetion4b和inception4e两处增加了两个用于辅助分类的分类层。这两个辅助分类层的设计是用来进行辅助分类和计算辅助损失。以达到:
(1)增加loss回传,避免因网络结构太深而出现的梯度消亡。
(2)充当正则约束,迫使中间层特征也具备分类能力。

3.3 学习率下降策略

在进行训练的时候,为了避免持续的大学习率而失去了得到最佳模型的机会,GoogleNet模型采取了每8个epoch,使学习率下降4%的模式来训练网络。

3.4 数据增强

为了更好的利用数据训练网络,文章采取了以下的数据增强措施:
使图像尺寸均匀分布在8%-10%之间
长宽比在[3/4,4/3]之间
改变图片的亮度、色彩饱和度
通过这写措施显著的减少了网络的过拟合特性,使网络表现更加优异。

3.5 Batch-Normalization
Batch Normalization可谓GoogleNet系列网络的重中之重。甚至GoogleNet-v2整篇文章就是在阐述BH的机理。BN的出现是为了解决网络中的ICS:网络参数变化导致的输出值分布变化。
在BN出现之前,大家采取往往采取白化的措施,即去除输入数剧的冗余信息,使得所有特征具有相同的方差,将数据变成均值为0,标准差为1的形式。以尽量减小ICS的影响。白化公式如下:
N(x)=(x-mean)/std 公式(1)
而BH采取的操作时,将输入数据成批量的进行标准化,即:将所有n张图片设定成一个Batch-size,然后对这一批执行标准化。
图4.BN算法流程:
在这里插入图片描述
3.6 稀疏结构
稀疏矩阵:数值为0的元素数目远远多于非0元素的数目, 且无规律
稠密矩阵:数值非0的元素数目远远多于为0元素的数目, 且无规律
稀疏矩阵优点是,可分解成密集矩阵计算来加快收敛速度
特征图通道分解:打破均匀分布,相关性强的特征聚集在一起。

4 GoogleNet-v1、v2网络研究的意义

4.1 开启多尺度卷积新时代

在inception结构中,对于一个输入采取了多个不同尺度:1×1、3×3、5×5的卷积操作以提取其特征图。自此开启了多尺度卷积的先河,这项技术也被后续的是神经网络广泛借鉴。

4.2 拉开1*1卷积广泛应用序幕

1×1卷积的出现是为了解决在新设计的inception结构中,因为采用多尺度卷积而带来的参数过多,计算量爆炸的问题。当引入1×1卷积后,发现这很好的减少了参数的数量。在后续的应用当中,1×1卷积还被用作取代全连接层的有力工具。

4.3 标注化层已经成为深度神经网络的标配

在文章中,通过分类实验对比发现,当神经网络使用BN层后,速度更快、在初始化的设置时也不用在精心选择,甚至可以一开始就是用大的学习率、运算的精度更高,效果更好等优点。正是因为这些有点,BN层已经成为了现代神经网络的标配。

5 GoogleNet-v2在NCFM数据集上的实验结果与分析

5.1 数据集简介

为了保护和监控海洋环境及生态平衡,大自然保护协会(The Nature Conservancy)邀请Kaggle社区的参赛者们开发能够出机器学习算法,自动分类和识别远洋捕捞船上的摄像头拍摄到的图片中鱼类的品种,例如不同种类的吞拿鱼和鲨鱼。大自然保护协会一共提供了3777张标注的图片作为训练集,这些图片被分为了8类,其中7类是不同种类的海鱼,剩余1类则是不含有鱼的图片,每张图片只属于8类中的某一类别。

5.2 利用GoogLeNet在ImageNet数据集上的预训练模型做图片推理

我采取的是使用GoogleNet在ImageNet数据集上的预训练模型迁移使用。在使用GoogLeNet网络进行迁移训练时,我先通过Pytorch框架和预训练模型搭建了一个推测框架。即:输入我们能够找到的图片,观察预训练推理网络会有怎样的输出,以及输出的top5类别。
在我搭建的推理图片中,我输入的是从百度找到的海鸥和阿拉斯加犬的照片:
在这里插入图片描述
在这里插入图片描述
推理结果如下:
在这里插入图片描述
在这里插入图片描述
5.3 GoogleNet在NCFM数据集上的训练

识别的海鱼所占整张图片的一小部分,这就给识别带来了很大的挑战性。此外,为了衡量算法的有效性,还提供了额外的1000张图片作为测试集,参赛者们需要设计出一种图像识别的算法,尽可能地识别出这1000张测试图片属于8类中的哪一类别。
因为设备有限,在网络结构的超参数设置如下:
num_classes = 8 分类数量
MAX_EPOCH = 9 训练次数,epoch越大,效果更好
BATCH_SIZE = 48 批数量,越大速度越快,准确率更高
LR = 0.001 学习率,可在后期衰减,以取得较好的模型
log_interval = 1 打印当前训练情况
val_interval = 1 在多少个epoch之运行验证集
start_epoch = -1 起始epoch序号
lr_decay_step = 1 学习率经多少个epoch修改一次

5.4 训练结果

GoogLeNet在ImageNet数据集上,将所有数据分成1000类,在无BN时的单模型能够达到的top5错误率是7.89%。在有BN层的加持下,能够达到的分类正确率是72.7%。当然,这一数据是在谷歌实验室得出的。在我的电脑上,配置为:GTX1650、i7-9750来说,因为配置有限,Batch-size值最大只能设置为48,否则就会内存不足而强行停止,epoch设置为9,在训练集上能够达到得最好正确率为53.47%,在验证集上只能达到50%的正确率。
与之对比的是同实验室另一组实验,采用基于相同数据集进行预训练的AlexNet模型在猫狗数据集上的应用。他的正确率可以高达96%比我高出很多,分析正确率出现这么大差距的原因:
(1) 笔记本电脑算力不如台式机1080ti算力
(2) 基于鱼类的数据集来自渔船上的实拍照片,环境复杂,鱼在其中只占很小的一部分,比较难以检测。
(3) 数据集中图片数量不够,在30000多张图片中有八个类别需要识别,且没有使用图像增强技巧,而猫狗数据集中25000张图片只需要识别出两类。数据集的不足,导致准确率不高。
(4) 因为电脑配置的问题,Batch-size最大只能到48,而AlexNet模型中最大可以到384,也严重影响了准确率。

6 实验结论

6.1 创新点
1.大量使用1*1,可降低维度,减少计算量,参数是AlexNet的是十二分之一
2.多尺度卷积核,实现多尺度特征提取
3.辅助损失层,增加梯度回传,增加正则,减轻过拟合。

6.2 启发点
1.池化损失空间分辨率,但在定位、检测和人体姿态识别中仍应用。延伸拓展:定位、检测和人体姿态识别这些任务十分注重空间分辨率信息。
2.增加模型深度和宽度,可有效提升性能,但有2个缺点:容易过拟合,以及计算量过大。
3.为节省内存消耗,先将分辨率降低,再堆叠使用Inception module。
4.最后一个全连接层,是为了更方便的微调,迁移学习。
5.网络中间层特征对于分类也具有判别性。
6.学习率下降策略为每8个Epochs下降4%(loss曲线很平滑)。
7.数据增强指导方针:(1)尺寸在8%-100%;(2)长宽比在[3/4,4/3];(3)光照畸变有效。
8.随机采用插值方法可提升性能。
9.实际中没必要144Crops。

6.3 结果分析
在谷歌实验室中,GoogLeNet在ImageNet数据集上,将所有数据分成1000类,在无BN时的单模型能够达到的top5错误率是7.89%。在有BN层的加持下,能够达到的分类正确率是72.7%。但是在NCFN数据集上,正确率最高只有55%却发现结果远不如论文给出得那么优秀。
通过在复现过程中学习到得训练技巧,超参数对网络得训练有着较大得影响。但是受制于自己电脑配置得影响,无法使用大得Batch-size和EPOCH.从而无法达到更好的准确率。甚至后期的更优秀的网络结构无法发挥优势,准确率大幅下降。由此可见,在现代深度学习中硬件的支撑和样本数据集是取得较好结果的必备条件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值