目录
一、基本卷积神经网络
Alexnet
1、网络的提出
Alexnet是由2012年ImageNet参赛者Hinton和他的学生设计的,Alexnet赢得了当年ImageNet图像分类竞赛的冠军,引发了神经网络的研究和使用热潮。
2、网络结构
Alexnet一共有8层可学习层——5层卷积层和3层全连接层,网络结构如下:
网络结构图之所以有两行,是因为Alexnet采用双GPU训练,为了方便说明,将双GPU训练合并,假定只用一个GPU训练,结构如下:
需要说明一点,两个结构图的输入尺寸不同,上图为原论文的224×224,下图为227×227,原论文中在第一层卷积层中会进行padding(左一右二,上一下二),尺寸变为227×227,然后再进行卷积操作,不影响对网络结构的说明。
卷积层1:输入尺寸是227×227×3,使用96个11×11×3的卷积核,不进行padding,步长是4,输出尺寸是(227 - 11)/ 4 + 1 = 55,输出特征图尺寸为55×55×96。将特征图通过ReLU激活函数固定到合适范围,随后进行最大池化,池化滤波器尺寸为3×3,步长为2,尺寸变为27×27×96。
卷积层2:输入尺寸为27×27×96,使用256个5×5×96的卷积核,padding为2,步长为1,生成的特征图尺寸为27×27×256,随后进行相同的ReLU和池化操作,尺寸变为13×13×256。
卷积层3:输入尺寸为13×13×256,使用384个3×3×256的卷积核,padding为1,步长为1,生成的特征图尺寸为13×13×384。
卷积层4:输入尺寸为13×13×384,使用384个3×3×384的卷积核,padding为1,步长为1,生成的特征图尺寸为13×13×384。(严格来讲,是每个GPU分别使用192个3×3×192的卷积核)
卷积层5:输入尺寸为13×13×384,使用256个3×3×384的卷积核,padding为1,步长为1,生成的特征图尺寸为13×13×256。(严格来讲,是每个GPU分别使用128个3×3×192的卷积核)随后进行池化操作,尺寸变为6×6×256。
全连接层1:每个GPU使用2048个6×6×256的卷积核,每个GPU会生成2048个1×1的特征图,进行ReLU和dropout操作,共输出4096个值。
全连接层2:与全连接层1进行全连接,进行ReLU和dropout操作,输出为4096。
全连接层3(输出层):输出为1000个神经元,后接softmax激活函数用于显示分类概率。
3、Alexnet的改进之处:
- 使用ReLU激活函数代替sigmoid函数,用于卷积层和全连接层之后。
- 使用dropout,以一定的概率p随机关闭激活函数,有效减少过拟合。
- 使用双GPU策略,提高训练速度。
- 引入局部相应归一化操作LRN。
VGG16
1、网络的提出
VGG是DeepMind团队和牛津大学计算机视觉组的研究员共同研发提出,获得2014年ImageNet图像分类竞赛的第二名,VGG由卷积层和全连接层构成。
2、网络结构
VGG16的网络结构如下图。
具体描述如下。
VGG16共有16层,13层卷积和3层全连接层,卷积层卷积核的尺寸均使用3×3,padding为1,池化操作均使用2×2的滤波器。
3、网络的改进之处:
- 使用小卷积核,两个3×3的卷积核堆叠的感受野相当于一个5×5卷积核的感受野,三个3×3的卷积核堆叠的感受野相当于一个7×7卷积核的感受野,采用多个小卷积核能够减少参数量。
- 通道数较多,网络加深。
- 各卷积层和池化层的超参数基本相同,整体结构呈现出规整的特点。
Resnet
1、非残差网络的缺陷
在残差网络结构提出之前,人们很自然想到期望通过堆叠卷积层增加网络层数来提高网络的特征提取能力,然而事实是当网络层数增加到一定程度后,训练集误差和测试集误差均变得更大。既然训练集误差增大可以排除是过拟合原因导致。Resnet论文对此作出两点解释:第一是网络层数过多会产生梯度消失(每一层误差梯度是一个小于1的数,每进行一次反向传播会乘以一个小于1的数,导致最后梯度消失)或者梯度爆炸(与梯度消失相反);第二是网络层数加深会产生退化现象。
2、残差网络的提出
为了有效解决上述问题,何恺明和他的团队提出残差网络Resnet。残差块的结构如下。
Resnet的提出理念很直接,浅层网络的最优解可以通过深层网络获得,并且深层网络存在不差于浅层网络的解,这就是加深网络的原因,但这个比浅层网络更好的解往往难以获得,需要考虑使用一种技巧让优化更加容易。于是Resnet作者提出残差结构,结构的输出是残差边F(x)和输入x的求和,网络参数学习只需要学习残差边F(x),对于冗余(对优化结果不利)的残差块只需让F(x)趋近于0(容易实现)实现恒等映射,这样就保证网络的性能不减,并且优化更加容易。
3、网络结构
Resnet论文中提出两种残差块的结构。
右边的结构相比于左边使用了1×1的卷积,用于实现先降维再升维73728,并且可以实现减小参数(右边参数有1×1×256×64+3×3×64×64+1×1×64×256=69632个,左边参数有3×3×64×64×2=73728个),Resnet网络总体结构如下,并与VGG19作对比。
卷积层主要使用3×3大小的滤波器,遵循两个简单的设计过则:1、对于输出特征层的尺寸相同的各层,有着相同数量的滤波器。2、如果特征图的大小减半,滤波器的数量就增大一倍,保证每一层的时间复杂度相同。
shortcut结构也分为两种,以Resnet50为例。
左边在shortcut加入1×1卷积,Conv block用于改变特征图的维度和尺寸。
二、常用数据集
MNIST数据集
MINST数据集主要由一些手写数字的图片和相应的标签构成,图片有10类,分别对应0~9。
原始的MINST数据库包含以下4个文件。
MINST数据集由60000个训练样本和10000个测试样本组成,每个样本都是一张28×28像素的灰度手写数字图片。
Fashion-MINST数据集
Fashion-MNIST是一个替代MNIST手写数据集的图像数据集。它是由Zalando旗下的研究部门提供,涵盖了来自10种类别的共7万个不同商品的正面图片。
Fashion-MNIST的大小、格式和训练集/测试集划分与原始的MNIST完全一致。60000/10000 的训练测试数据划分,28x28的灰度图片。可以直接用它来测试机器学习和深度学习算法性能,且不需要改动任何的代码。
Fashion-MINST数据集样例如下
CIFAR-10数据集
CIFAR-10数据集由10个类的60000个32x32彩色图像组成,每个类有6000个图像。有50000个训练图像和10000个测试图像。
数据集分为五个训练批次和一个测试批次,每个批次有10000个图像。测试批次包含来自每个类别的恰好1000个随机选择的图像。
以下是数据集的类别和图像样本。
PASCAL VOC数据集
PASCAL的全称是Pattern Analysis, Statistical Modelling and Computational Learning,VOC的全称是Visual Object Classes,是目标分类(识别)、检测、分割最常用的数据集之一。第一届PASCAL VOC举办于2005年,2012年终止。常用的是PASCAL 2012。
PASCAL VOC数据集一共分为20类:person, bird, cat, cow, dog, horse, sheep, aeroplane, bicycle, boat, bus, car, motorbike, train, bottle, chair, dining table, potted plant, sofa, tv/monitor。
PASCAL VOC数据集文件格式如下
标注格式:
里面是图像对应的XML标注信息描述,每张图像有一个与之对应同名的描述XML文件,XML前面部分声明图像数据来源,大小等元信息。
20类图像示例:
MS COCO数据集
MS COCO的全称是Microsoft Common Objects in Context,起源于微软于2014年出资标注的Microsoft COCO数据集 。数据集以scene understanding为目标,主要从复杂的日常场景中截取。包含目标分类(识别)、检测、分割、语义标注等数据集,ImageNet竞赛停办后,COCO竞赛就成为当前目标识别、检测等领域的一个最权威、最重要的标杆。
MS COCO提供的标注类别有80 类,有超过33万张图片,其中20万张有标注,整个数据集中个体的数目超过150万个。
COCO数据集图像样例如下。
ImageNet数据集与ILSVRC
ImageNet数据集的创建始于2009年,李飞飞与Google的合作:“ImageNet: A Large-Scale Hierarchical Image Database”。总图像数据有14197122,总类别数有21841,带有标记框的图像数有1034908。
ISLVRC 2012子数据集
训练集:1281167张图片+标签
类别数:1000
验证集:50000张图片+标签
测试集:100000张图片
三、目标检测预备知识
目标检测评价指标
TP:被正确地划分为正例的个数,即实际为正例且被分类器划分为正例的实例数。
FP:被错误地划分为正例的个数,即实际为负例但被分类器划分为正例的实例数。
FN:被错误地划分为负例的个数,即实际为正例但被分类器划分为负例的实例数。
TN:被正确地划分为负例的个数,即实际为负例且被分类器划分为负例的实例数。
IOU:IOU代表网络预测的目标框与真实目标框(Gound Truth, GT)相交的面积与二者相并面积的比值,IOU值越大表明网络预测的目标框与GT框重合度越高。
精确度(Precision):精确度的计算公式如下。
TP代表IOU大于某一指定阈值的目标框个数,FP代表IOU小于某一指定阈值的目标框个数。
精确度又叫查准率,表示在某一置信度阈值下网络将某一类目标准确识别的个数与网络识别的该类目标总数的比值。
召回率(Recall):召回率的计算公式如下。
FN代表未检测到的目标个数。
召回率又叫查全率,表示在某一置信度阈值下某一类目标被正确识别的个数与该类目标的真实个数的比值。
AP值和mAP值:指定IOU阈值,对于某一类目标取一系列置信度阈值,计算每一个置信度阈值下的精确度和召回率,将精确度和召回率标入坐标,得到该类目标的P-R曲线。
P-R曲线与坐标轴围成的面积叫该类目标的AP值,所有类别AP值的平均值就是mAP,mAP是用于衡量目标检测分类和目标定位效果的综合评价指标,mAP值越高表明网络预测的综合效果越好。
目标检测问题
目标检测是在给定的图片中精确找到物体所在位置,并标注出物体的类别。物体的尺寸变化范围很大,摆放物体的角度,姿态不定,而且可以出现在图片的任何地方,并且物体还可以是多个类别。
分类问题与目标检测的对比
目标检测的任务有两个:实现目标的定位和分类。
分类:是否有目标,是什么目标。
定位:方式一:利用对角线的两个顶点坐标实现定位;方式二:利用图像中点坐标和长宽来定位。
目标检测效果图:
目标检测算法
传统目标检测算法依赖于人工提取特征,基于这个思想人们设计出Viola-Jones、HOG、DPM等检测器。虽然人们为了让检测器获得更强的特征提取能力设计了很多技巧和方法,但在面对更为复杂的检测条件传统目标检测不仅人工计算量巨大,而且算法的鲁棒性也难以保证,目标检测算法的发展受到停滞。
R. Girshick等人提出R-CNN,开启基于深度学习目标检测算法的时代。目前深度学习目标检测算法中两阶段的代表性算法有R-CNN、SPP和Faster R-CNN等,一阶段代表性算法有YOLO、SSD、RetinaNet等。将深度学习融入目标检测后不仅比传统检测方法拥有更高的精度和速度,而且有着更好的鲁棒性。
YOLO家族:
截至2022年,YOLOv7问世,YOLOv7论文给出其检测效果如下:
目标检测算法思想
滑动窗口是目标检测的一个基本思想,其想法直接,但有两个问题:
- 滑动次数太多,计算太慢
假设图片为w宽,h高,识别一个窗口需要T时间,则需要w×h×T的总时间。
例如:图片大小448×448,识别一个目标需要0.05s,则共需448×448×0.05≈10000s。 - 目标大小不同,每一个滑动位置需要用很多框
图片宽度和高度都不相同,比例也不相同,因此需要取很多框。
例如:标准框100*50大小,
取50*50,50*25,200*50,200*100等不同大小,在面积和宽高比变化
假设面积变化3类, 宽高比3类(0.5,1,2),则共有9种,时间变为原来的9倍。
滑动窗口改进:
一般图片中,大多数位置都不存在目标。可以确定那些更有可能出现目标的位置,再有针对性的用CNN进行检测——两步法(Region Proposal),两步法依然很费时。
进一步减少出现目标的位置,将目标分类检测和定位问题合在一个网络里——一步法(YOLO)。
分类问题可以扩展为回归+分类问题
问题一:有的一个框里有多个目标,有的多个框里有一个目标,如何处理。
多个框里有一个目标,取目标中心点所在框;一个框里有多个目标,可以进一步细分框。
问题二:多类目标怎么办。
使用独热编码扩展类别数。
问题三:小目标怎么办
使用单独网络拟合小目标,即设置多个bounding box。
以上是YOLO目标检测算法的思想基础,下一篇将介绍YOLO目标检测算法。