神经网络与深度学习第四周课程总结
5. 卷积神经网络
5.5 基本卷积神经网络
5.5.1 AlexNet模型
5.5.2 VGG-16模型
5.5.3 残差网络
5.5.4 构建残差网络
5.6 常用数据集
5.5.1 MNIST
5.5.2 Fashion-MNIST
5.5.3 CIFAR-10
5.5.4 MS COCO
5.5.5 PASCAL VOC
5.5.6 ILSVRC
6. 深度学习视觉应用
6.1 目标检测与yolo
6.1.1 目标检测问题
6.1.2 分类问题与目标检测
6.1.3 目标检测技术发展
6.2 目标检测基本思想
6.2.1 滑动窗口
6.2.2 一步法思想
6.3 YOLO网络结构
6.3.1 YOLO网络结构
6.3.2 YOLO网络处理
6.3.3 训练值与预测值
6.3.4 损失函数
6.3.5 非极大值抑制
6.3.6 数据集训练
5. 卷积神经网络
5.5 基本卷积神经网络
5.5.1 AlexNet模型
Alex在2012年提出的alexnet网络结构模型引爆了神经网络的应用热潮,并赢得了2012届图像识别大赛的冠军,使得CNN成为在图像分类上的核心算法模型。
上图即为该模型的结构
改网络的亮点在于:
(1)首次使用了GPU进行网络加速训练。
(2)使用了ReLU激活函数,而不是传统的Sigmoid激活函数以及Tanh激活函数。
(3)使用了LRN局部响应归一化。
(4)在全连接层的前两层中使用了Droupout随机失活神经元操作,以减少过拟合。
对于AlexNet有5层卷积层,三个全连接层。
具体改进如下:
输入样本:采取了最简单通用的数据变形方式,包括平移变换,水平翻转,光照变换等。
激活函数:
传统的神经网络普遍使用 Sigmoid 或者 tanh 等非线性函数作为激励函数,然而它们容易出现梯度弥散或梯度饱和的情况。
而该模型采用ReLU替代 Tan Sigmoid,并且位于卷积层和全连接层之后
Dropout:
Dropout也是经常说的一个概念,能够比较有效地防止神经网络的过拟合。 相对于一般如线性模型使用正则的方法来防止模型过拟合,而在神经网络中Dropout通过修改神经网络本身结构来实现。对于某一层神经元,通过定义的概率来随机删除一些神经元,同时保持输入层与输出层神经元的个数不变,然后按照神经网络的学习方法进行参数更新,下一次迭代中,重新随机删除一些神经元,直至训练结束。
多GPU训练:
AlexNet 当时使用了 GTX580 的 GPU 进行训练,由于单个 GTX 580 GPU 只有 3GB 内存,这限制了在其上训练的网络的最大规模,因此他们在每个 GPU 中放置一半核(或神经元),将网络分布在两个 GPU 上进行并行计算,大大加快了 AlexNet 的训练速度。
八层可学习层详细说明对照表:
5.5.2 VGG-16模型
VGG 最大的特点就是通过比较彻底地采用 3x3 尺寸的卷积核来堆叠神经网络,这样也加深整个神经网络的深度。这两个重要的改变对于人们重新定义卷积神经网络模型架构也有不小的帮助,至少证明使用更小的卷积核并且增加卷积神经网络的深度,可以更有效地提升模型的性能。
结构如下:
参数总量:
VGG16总参数量是138M,具体如下:
第1层:1792 = 33364+64
第2层:36928 = 336464+64
第3层:73856 = 3364128+128
第4层:147584 = 33128128+128
第5层:295168 = 33128256+256
第6层:590080 = 33256256+256
第7层:590080 = 33256256+256
第8层:1180160 = 33256512+512
第9层:2359808 = 33512512+512
第10层:2359808 = 33512512+512
第11层:2359808 = 33512512+512
第12层:2359808 = 33512512+512
第13层:2359808 = 33512512+512
第14层:102764544 = 775124096+4096
第15层:16781312 = 40964096+4096
第16层:4097000 = 40961000+1000
总体特点:
1、VGG16相比AlexNet的一个改进是采用连续的3x3的卷积核代替AlexNet中的较大卷积核(11x11,7x7,5x5)
2、加深结构都使用ReLU激活函数:提升非线性变化的能力
3、网络规模进一步增大,参数数量约为1.38亿
4、VGG19比VGG16的区别在于多了3个卷积层,其它完全一样
5、VGG16基本是AlexNet(AlexNet是8层,包括5个卷积层和3个全连接层)的加强版,深度上是其2倍,参数量大小也是两倍多。
6.由于各卷积层、池化层的超参数基本相同,整体结构呈现出规整的特点。
5.5.3 残差网络
随着网络层数的增加,网络发生了退化(degradation)的现象:随着网络层数的增多,训练集loss逐渐下降,然后趋于饱和,当你再增加网络深度的话,训练集loss反而会增大。注意这并不是过拟合,因为在过拟合中训练loss是一直减小的。
当网络退化时,浅层网络能够达到比深层网络更好的训练效果,这时如果我们把低层的特征传到高层,那么效果应该至少不比浅层的网络效果差,或者说如果一个VGG-100网络在第98层使用的是和VGG-16第14层一模一样的特征,那么VGG-100的效果应该会和VGG-16的效果相同。所以,我们可以在VGG-100的98层和14层之间添加一条直接映射(Identity Mapping)来达到此效果。
从信息论的角度讲,由于DPI(数据处理不等式)的存在,在前向传输的过程中,随着层数的加深,Feature Map包含的图像信息会逐层减少,而ResNet的直接映射的加入,保证了 l+1 层的网络一定比 l 层包含更多的图像信息。基于这种使用直接映射来连接网络不同层直接的思想,残差网络应运而生。
5.5.4 构建残差网络
残差网络是由一系列残差块组成的,一个残差块可以表示为:
残差网络的搭建分为两步:
1.使用VGG公式搭建Plain VGG网络
2.在Plain VGG的卷积网络之间插入Identity Mapping,注意需要升维或者降维的时候加入 1×1 卷积。
残差网络总结:
1.普通网络的基准模型受VGG网络的启发
2.卷积层主要有3×3的过滤器,并遵循两个简
单的设计规则:①对输出特征图的尺寸相同的
各层,都有相同数量的过滤器; ②如果特征
图的大小减半,那么过滤器的数量就增加一
倍,以保证每一层的时间复杂度相同。
3.ResNet模型比VGG网络更少的过滤器和更低的
复杂性。ResNet具有34层的权重层,有36亿
FLOPs,只是VGG-19(19.6亿FLOPs)的18%。
5.6 常用数据集
5.5.1 MNIST
MNIST是一个手写体数字的图片数据集,该数据集来由美国国家标准与技术研究所(National Institute of Standards and Technology (NIST))发起整理,一共统计了来自250个不同的人手写数字图片,其中50%是高中生,50%来自人口普查局的工作人员。该数据集的收集目的是希望通过算法,实现对手写数字的识别。
包含文件:
5.5.2 Fashion-MNIST
不同于MNIST手写数据集,Fashion-MNIST数据集包含了10个类别的图像,分别是:t-shirt(T恤),trouser(牛仔裤),pullover(套衫),dress(裙子),coat(外套),sandal(凉鞋),shirt(衬衫),sneaker(运动鞋),bag(包),ankle boot(短靴)。
FashionMNIST 的大小、格式和训练集/测试集划分与原始的MNIST 完全一致。60000/10000 的训练测试数据划分,28x28的灰度图片。你可以直接用它来测试你的机器学习和深度学习算法性能,且不需要改动任何的代码。
5.5.3 CIFAR-10
C I F A R − 10 CIFAR-10CIFAR−10 数据集也是神经网络中一个非常经典的数据集,该数据集共有 60000 张彩色图像,这些图像是32*32,分为10个类 [ ′ a i r p l a n e ′ , ′ a u t o m o b i l e ′ , ′ b i r d ′ , ′ c a t ′ , ′ d e e r ′ , ′ d o g ′ , ′ f r o g ′ , ′ h o r s e ′ , ′ s h i p ′ , ′ t r u c k ′ ] 如下所示:
5.5.4 MS COCO
1.PASCAL的全称是Microsoft Common Objects in Context,起源于微软于2014年出资标注的Microsoft COCO数据集
2.数据集以scene understanding为目标,主要从复杂的日常场景中截取
3.包含目标分类(识别)、检测、分割、语义标注等数据集
ImageNet竞赛停办后,COCO竞赛就成为是当前目标识别、检测等领域的一个最权威、最重要的标杆
5.5.5 PASCAL VOC
数据集分为20类,包括背景为21类,分别如下:
人:人
动物:鸟、猫、牛、狗、马、羊
车辆:飞机、自行车、船、巴士、汽车、摩托车、火车
室内:瓶、椅子、餐桌、盆栽植物、沙发、电视/监视器
文件格式如下:
标注格式:
里面是图像对应的XML标注信息描述,每张图像有一个与之对应同名的描述XML文件,XML前面部分声明图像数据来源,大小等元信息,
举例如下:
5.5.6 ILSVRC
ISLVRC 2012子数据集:
有标注的ImageNet2012的数据集一共158G大小,共1431167张图片,1000个类别,需要集群来训练;
6. 深度学习视觉应用
6.1 目标检测与yolo
6.1.1 目标检测问题
目标检测是在图片中可变数量的目标进行查找和分类
1.目标种类与数量问题
2.目标尺度问题
3.外在环境干扰问题
4.不仅要检测出目标,还要同时检测出目标类别。(多任务)
目标检测实例:实际图像中有多个目标
6.1.2 分类问题与目标检测
左边的图是经过目标检测后输出的图像,这个图片标注了我们需要检测的物体的坐标位置,相应的坐标的 矩形坐标框上会有一个零点几的小数值,这个值往往代表这个类别的置信度。
而这个置信度也说明了我们当前的检测框属于我们需要查找的目标的一个概率值,通常我们会给出一个阈值。通过这样一个阈值来过滤掉一些检测错误的目标。可以看到在左边的图中检测出非常多的目标区域。不同的目标区域也通过了不同颜色的矩形框表示出来,因此我们可以发现目标检测不仅给出了矩形框,也就是我们需要检测的目标的位置,同时也对矩形框内的物质也进行了分类,并通过不同颜色的矩形框来表现不同的类别。右边的图是图像分类,而对于图像分类,它主要是将一副图片作为输入,而它属于不同类别的概率分布则作为输出。图像分类的目的就是对指定的图片它所属的类别来进行判定。不管是图像分类还是图像检测,我们在使用深度学习的技术来进行处理的时候都需要完成特征提取的环节。对于经典或者说传统的机器学习方法来说,我们通常会设计一些手动的特征来完成特征提取这样的一个步骤。而对于深度学习我们往往通过卷积神经网这样的一个方式来完成特征的抽取。
6.1.3 目标检测技术发展
在对检测速度与进度的高要求下,YOLO应运而生。
YOLO 的核心思想就是把目标检测转变成一个回归问题,利用整张图作为网络的输入,仅仅经过一个神经网络,得到bounding box(边界框) 的位置及其所属的类别。
下图为YOLO家族发展历程:
6.2 目标检测基本思想
6.2.1 滑动窗口
滑动窗口是一种基于双指针的一种思想,两个指针指向的元素之间形成一个窗口。
看似方便,但是滑动次数过多会导致计算速度大大降低。同时,目标大小不一,每次的滑动位置需要很多方框。因此要对基础的滑动窗口进行改进。
6.2.2 一步法思想
将图片识别分类问题简化为二分类,即值检测一类目标。这样只需框处一类目标的坐标以及大小、概率。这样又将分类问题扩展为回归+分类问题
问题:
有一个框里有多个,有个多个框里有一个,怎么办?
一个框里多个暂时无法解决,但是多个框里有一个可以采用交并比的计算方式,计算多个方框重叠面积比例,取中心点作为合成后的中心。
多类目标怎么办?
使用独热编码扩展类别数
小目标怎么办?
使用单独网络拟合小目标,即设置多个bounding box.
6.3 YOLO网络结构
6.3.1 YOLO网络结构
概略图如下:
官方模型结构如下:
网络结构包含24个卷积层和2个全连接层;其中前20个卷积层用来做预训练,后面4个是随机初始化的卷积层,和2个全连接层。
6.3.2 YOLO网络处理
YOLO v1在PASCAL VOC数据集上进行的训练,因此输入图片为448 × 448 × 3。实际中如为其它尺寸,需要resize或切割成要求尺寸
而在续作如V5中图片大小无明确限制,虽有标注,但不会改变图片本身大小。
YOLO模型处理:
(1) 将原图划分为SxS的网格。如果一个目标的中心落入某个格子,这个格子就负责检测该目标。
(2) 每个网格要预测B个bounding boxes,以及C个类别概率Pr(classi|object)。
在YOLO中,每个格子只有一个C类别,即相当于忽略了B个bounding boxes,每个格子只判断一次类别,这样做非常简单粗暴。
(3) 每个bounding box除了要回归自身的位置之外,还要附带预测一个confidence值。这个confidence代表了所预测的box中含有目标的置信度和这个bounding box预测的有多准两重信息:
如果有目标落中心在格子里Pr(Object)=1;否则Pr(Object)=0。 第二项是预测的bounding box和实际的ground truth之间的IOU(交并比).
每个bounding box都包含了5个预测量:(x, y, w, h, confidence),其中(x, y)代表预测box相对于格子的中心,(w, h)为预测box相对于图片的width和height比例,confidence就是上述置信度。需要说明,这里的x, y, w和h都是经过归一化的.
(4) 由于输入图像被分为SxS网格,每个网格包括5个预测量:(x, y, w, h, confidence)和一个C类,所以网络输出是SxSx(5xB+C)大小
6.3.3 训练值与预测值
Pr 𝑜𝑐𝑗 的ground truth:三个目标中点对应格子为1,其它为0。
训练数据与网络输出:
6.3.4 损失函数
YOLO损失函数如下:
6.3.5 非极大值抑制
保留了这么多边界框,预测中一个物体可能被多个边界框包围;实际物体只对应一个边界框,如何解决个问题呢?
NMS
NMS核心思想是:选择得分最高的作为输出,与该输出重叠的去掉,不断重复这一过程直到所有备选处理完。
这一思想即为上文中交并比思想。
NMS算法要点:
首先丢弃概率小于预定IOU阈值(例如0.5)的所有边界框;对
于剩余的边界框:
选择具有最高概率的边界框并将其作为输出预测;
计算 “作为输出预测的边界框”,与其他边界框的相关联IoU
值;舍去IoU大于阈值的边界框;其实就是舍弃与“作为输出预
测的边界框” 很相近的框框。
重复步骤2,直到所有边界框都被视为输出预测或被舍弃
6.3.6 数据集训练
1.YOLO先使用ImageNet数据集对前20层卷积网络进行预训练,然后使用完整的网络,在PASCAL VOC数据集上进行对象识别和定位的训练和预测
2.训练中采用了drop out和数据增强来防止过拟合。
3.YOLO的最后一层采用线性激活函数(因为要回归bb位置),其它层都是采用Leaky ReLU激活函数: