CV场图像分类初探(1)
在不同物种的水平上识别不同种类的物体,如猫和狗的分类,其特点是类间方差大,类内方差小。例如,典型的cifar10区分车辆和动物,它们都是语义上可区分的对象。
细粒度的图像分类是一个大类中子类的分类,比如不同的鸟、不同的狗、不同的车类型等等的分类。例如,Caltech-UCSD Birds-200-2011数据集,这是一个包含200个类别、11788幅图像的鸟类书籍,为每幅图像提供15个局部区域位置和1个注释框。这种细粒度级别的检测需要更精细的分类器设计。
如果我们需要区分不同的个体,不仅仅是物种或者亚类,那就是一个识别问题,比如最典型的任务就是人脸识别。人脸识别在计算机视觉领域有着非常重要的意义。它可以完成很多任务,比如安全稳定、考勤、人脸解锁等应用场景,这些都与人脸识别这种示例级的图像分类任务密切相关。
MNIST数据集当时是一个基线,包含60,000个训练数据和65,438+00,000个测试数据。这些图像都是尺寸为32*32的灰度图像。在这个数据集中,其实传统方法已经表现不错了,比如SVM和KNN、SVM,可以把MNIST的分类错误率降到0.56%,超过了当时的人工神经网络。
后来经过多次迭代,LeNet5诞生于1998。这是一个经典的卷积神经网络,具有一些重要的特征:
虽然LeNet5的误差率在0.7%左右,还不如SVM方法,但是随着网络结构的发展,神经网络方法很快就超过了所有其他方法,取得了很好的效果。
为了完成工业中更复杂的图像分类任务,2009年,在李菲菲等人的安排下发布了ImageNet数据集。ImageNet数据集* * *拥有超过1400万张图片,* * *拥有超过2万个类别,但本文常用的基准是1000个类别。
AlexNet诞生于2012,是第一个真正的深网。与LeNet5的五层相比,层数增加了三层,网络的参数也大大增加,输入由28变为224。同时,GPU的问世也让深度学习进入了一个GPU为王的训练时代。
AlexNet有以下特点:
VGGNet探索了卷积神经网络的深度与其性能的关系,成功构建了深度为16~19的卷积神经网络,证明了增加网络的深度可以在一定程度上影响网络的最终性能,大大降低了错误率,同时具有很强的扩展性,在移植到其他图像数据时具有很好的泛化能力。迄今为止,VGG仍然被用来提取图像特征。
VGGNet可以看作是AlexNet的深化版,由卷积层和全连通层组成。它们都使用3×3卷积核和2×2最大池核,简化了卷积神经网络的结构。VGGNet展示了如何在以往网络架构的基础上,通过简单增加网络层的数量和深度来提升网络性能。虽然简单,但是极其有效。今天,VGGNet仍然被许多任务选为基准模型。
GoogLeNet也深化了网络层次,但GoogLeNet在网络结构上做了更大胆的尝试,深度只有22层。在参数数量上,GoogleNet有500万个参数,AlexNet参数数量是GoogleNet的12倍,VGGNet参数数量是AlexNet的3倍,所以在内存或计算资源有限的情况下,GoogleNet是更好的选择。但从模型结果来看,GoogLeNet的性能更胜一筹。
一般来说,提高网络性能最直接的方法就是增加网络的深度和宽度。深度是指网络的层数,宽度是指神经元的数量。但是这种方法存在以下问题:
(1)个参数太多。如果训练数据集有限,很容易产生过拟合。
(2)网络越大,参数越多,计算复杂度越大,难以应用;
(3)网络越深,越容易出现梯度分散(梯度越往后传就会消失),模型优化难度大。
当然,解决这些问题的方法是在减少参数的同时增加网络的深度和宽度。为了减少参数,很自然的想到把全连接变成稀疏连接。但在实现上,全连接变成稀疏连接后,实际计算量并不会有质的提高,因为大部分硬件都是针对密集矩阵计算进行优化的。稀疏矩阵虽然数据量小,但很难减少计算时间。比较常见的方法是使用dropout法,相当于从原网络(待研究)中找一个更细的网络
GoogLeNet团队提出了初始网络结构,即构建一个“基本神经元”结构来构建一个稀疏且高计算性能的网络结构。
什么是盗梦空间?《盗梦空间》经历了V1、V2、V3、V4等多个版本的开发。,而且越来越完善,下面一一介绍。
通过设计一个稀疏的网络结构,但它可以产生密集的数据,这不仅可以增加神经网络的性能,而且可以保证计算资源的效率。谷歌提出了最原始的盗梦空间的基本结构:
这种结构将CNN常用的卷积(1x1,3x3,5x5)和池化运算(3x3)叠加在一起(卷积和池化的维数相同,增加了通道),既增加了网络的宽度,又增加了网络对规模的适应能力。
网络卷积层的网络可以提取输入的每一个细节信息,5x5滤波器也可以覆盖接收层的大部分输入。您还可以执行池化操作来减少空间大小和过度调整。在这些层之上,应该在每个卷积层之后进行ReLU操作,以增加网络的非线性特性。
但是在Inception的这个原始版本中,所有的卷积核都是在上层的所有输出上做的,那个5×5卷积核的计算量太大,导致特征图的厚度很大。为了避免这种情况,分别在3x3之前、5x5之前和max pooling之后添加1x1卷积核,以减少特征图的厚度,这也是形成的。
上图解释如下:
(1)GoogLeNet采用模块化结构(Inception结构),添加修改方便;
(2)最后网络采用平均池化(average pooling)代替全连接层。这个想法来自NIN(网络中的网络),证明可以提高0.6%的准确率。但实际上最后加了一个全连接层,主要是为了方便灵活调整输出;
(3)虽然去掉了全连接,但网络中仍然使用了Dropout
(4)为了避免梯度消失,网络增加了两个辅助softmax进行梯度正向引导(辅助分类器)。辅助分类器以一个中间层的输出作为分类,以较小的权重(0.3)加入到最终的分类结果中,相当于模型融合,同时增加了向后传播到网络的梯度信号,也提供了额外的正则化,非常有利于整个网络的训练。在实际测试中,这两个额外的softmax将被删除。
《盗梦V2》版本的解决方案是修改《盗梦空间》的内部计算逻辑,提出一种特殊的“卷积”计算结构。
2.1体积积分解(分解卷积)
GoogLeNet团队提出,可以用两个连续的3×3卷积层组成的小网络来代替单个5×5卷积层,即在减少参数数量的同时,可以保持感受野的范围。
2.2缩小特征地图的尺寸
如果要缩小图像,有两种方法:先池后卷积,或者先卷积后池。但是第一种方法(左)池化会导致特征表示的瓶颈(特征缺失),第二种方法(右)是正常的缩减,但是计算量非常大。为了保持特征表示同时减少计算量,网络结构改为下图,采用两个并行模块减少计算量(卷积、池化并行进行,然后合并)。
GoogLeNet使用Inception V2作为改进版本的网络结构图如下:
Inception V3最重要的改进之一就是因式分解,将7x7分解成两个一维卷积(1x7,7x1),3x3也是如此(1x3,3x1)。这个好处不可以ReLU加速计算,还可以使1。
Inception V4主要利用剩余连接对V3的结构进行改进,得到了Inception-ResNet-v1、Inception-ResNet-v2、Inception-v4三个网络。