一、基本卷积神经网络
1.AlexNet
问题提出:
网络结构:如下图所示
网络说明:该网络一共有8层可学习层——5层卷积层和3层全连接层,如下图所示,左侧为连接 数,右侧为参数。
改进:(1)池化层均采用最大池化
(2)选用ReLU作为非线性环节的激活函数
(3)网络规模扩大,参数数量接近6000万
(4)出现“多个卷积层+一个池化层”的结构
对其进行详细说明,如下:
①改进输入样本,最简单、通用的图像数据变形的方式。
从原始图像(256,256)中,随机的crop出 一些图像(224,224)。【平移变换,crop 】
水平翻转图像。【反射变换,flip】
给图像增加一些随机的光照。【光照、彩 色变换,color jittering】
②改进激活函数。
采用ReLU替代Tan Sigmoid;
用于卷积层和全连接层之后。
③添加Dropout:
在每个全连接层后面使用一个 Dropout 层,以概率 p 随机关闭激活函数。
④采用双GPU策略:
AlexNet使用两块GTX580显卡进行训练,两块显卡只需要在特定的层进行通信。
普遍规律:随网络深入,宽、高衰减,通道数增加。
2.VGG-16
可视化:
网络提出:
网络结构:
网络说明:
改进:网络规模进一步增大,参数数量约为1.38亿;由于各卷积层、池化层的超参数基本相同,整体结构呈现出规整的特点。
普遍规律:随网络深入,高和宽衰减,通道数增多。
3.残差网络
非残差网络的缺陷:
梯度消失问题:
构造残差网络:
残差块:
残差网络:
普通网络的基准模型受VGG网络的启发
卷积层主要有3×3的过滤器,并遵循两个简 单的设计规则:①对输出特征图的尺寸相同的各层,都有相同数量的过滤器; ②如果特征 图的大小减半,那么过滤器的数量就增加一倍,以保证每一层的时间复杂度相同。
ResNet模型比VGG网络更少的过滤器和更低的 复杂性。ResNet具有34层的权重层,有36亿 FLOPs,只是VGG-19(19.6亿FLOPs)的18%。
二、常用数据集
1.1MNIST
MNIST 数据集主要由一些手写数字的图片和相应的标签组成,图片一共有 10 类,分别对应从 0~9
原始的 MNIST 数据库一共包含下面4个文件:
MNIST数据集是由0〜9手写数字图片和数字标签所组成的,由60000个训练样本和10000个测试样 本组成,每个样本都是一张28 * 28像素的灰度手写数字图片。
MNIST数据集加载的代码实现:
def load_data_fashion_mnist(batch_size, resize=None): #@save
"""下载Fashion-MNIST数据集,然后将其加载到内存中。"""
trans = [transforms.ToTensor()]
if resize:
trans.insert(0, transforms.Resize(resize))
trans = transforms.Compose(trans)
mnist_train = torchvision.datasets.FashionMNIST(
root="../data", train=True, transform=trans, download=True)
mnist_test = torchvision.datasets.FashionMNIST(
root="../data", train=False, transform=trans, download=True)
return (data.DataLoader(mnist_train, batch_size, shuffle=True,
num_workers=get_dataloader_workers()),
data.DataLoader(mnist_test, batch_size, shuffle=False,
num_workers=get_dataloader_workers()))
1.2Fashion-MNIST数据集
FashionMNIST 是一个替代 MNIST 手写数字集 的图像数据集。 它是由 Zalando旗下的研究部门提供,涵盖了来自 10 种类别的 共 7 万个不同商品的正面图片;
FashionMNIST 的大小、格式和训练集/测试集划分与原始的 MNIST 完全一致。60000/10000 的训练测试数据划分,28x28 的灰度图片。你可以直接用它来测试你的机器学习和深度学习 算法性能,且不需要改动任何的代码。
以下是数据集中的类,以及来自每个类的10个随机图像:
2.CIFAR-10数据集
CIFAR-10数据集由10个类的60000个32x32彩色图像组成,每 个类有6000个图像。有50000个训练图像和10000个测试图像;
数据集分为五个训练批次和一个测试批次,每个批次有10000 个图像。测试批次包含来自每个类别的恰好1000个随机选择的图像。
以下是数据集中的类,以及来自每个类的10个随机图像:
3.PASCAL VOC数据集
PASCAL的全称是Pattern Analysis, Statistical Modelling and Computational Learning,VOC的全称是Visual Object Classes;.
是目标分类(识别)、检测、分割最常用的数据集之一;
第一届PASCAL VOC举办于2005年,2012年终止。常用的是 PASCAL 2012。
PASCAL VOC数据集一共分成4个大类,20个小类:
~person
~bird, cat, cow, dog, horse, sheep
~aeroplane, bicycle, boat, bus, car, motorbike, train
~bottle, chair, dining table, potted plant, sofa, tv/monitor
文件格式如下图所示:
标注格式:
里面是图像对应的XML标注信息描述,每张图像有一个与之对应同名 的描述XML文件,XML前面部分声明图像数据来源,大小等元信息, 举例如下:
Pascal VOC2012 Main中统计的训练、验证、验证与训练、测试图像:
20类图像实例:
4.MS COCO数据集(http://cocodataset.org)
PASCAL的全称是Microsoft Common Objects in Context,起源 于微软于2014年出资标注的Microsoft COCO数据集;
数据集以scene understanding为目标,主要从复杂的日常场景中截取;
包含目标分类(识别)、检测、分割、语义标注等数据集;
ImageNet竞赛停办后,COCO竞赛就成为是当前目标识别、检测等领域的一个最权威、最重要的标杆;
提供的标注类别有80 类,有超过33 万张图片,其中20万张有 标注,整个数据集中个体的数目超过150 万个。
MS COCO数据集的示例:
5.ImageNet数据集与ILSVRC
始于2009年,李飞飞与Google的合作: “ImageNet: A Large-Scale Hierarchical Image Database”;
总图像数据:14,197,122;
总类别数:21841;
带有标记框的图像数:1,034,908
ISLVRC 2012子数据集
训练集:1,281,167张图片+标签;
类别数:1,000;
验证集:50,000张图片+标签;
测试集:100,000张图片
三、算法评估
1.算法评估相关概念
TP: 被正确地划分为正例的个数,即实际为正例且被分类器划分为正例的实例数;
FP: 被错误地划分为正例的个数,即实际为负例但被分类器划分为正例的实例数;
FN:被错误地划分为负例的个数,即实际为正例但被分类器划分为负例的实例数;
(划分为负例,即没识别出来)
TN: 被正确地划分为负例的个数,即实际为负例且被分类器划分为负例的实例数;
P(精确率): TP/(TP+FP)
R(召回率): TP/(TP+FN)。召回率越高,准确度越低
P-R曲线:P-R的关系曲线图,表示了召回率和准确率之间的关系,精度(准确率)越高,召回率越低
举例说明: 假设一个测试集,其中图片只由大雁和飞机两种图片组成
True positives : 飞机的图片被正确的识别成了飞机。
False positives: 大雁的图片被错误地识别成了飞机。
False negatives: 飞机的图片没有被识别出来,系统错误地认 为它们是大雁。
True negatives: 大雁的图片没有被识别出来,系统正确地认 为它们是大雁。
假设使用CNN得到飞机分类结果如下:
调整阈值可改变准确率或召回值
在刚才例子中,对应某阈值,前四个样本(左侧)被分类为飞机 改变阈值会改变划分,进一步影响准确率或召回值。
可以通过改变阈值(也可以看作上下移动蓝色的虚线),来选择 让系统识别能出多少个图片,当然阈值的变化会导致Precision与 Recall值发生变化。比如,把蓝色虚线放到第一张图片下面,也就 是说让系统只识别出最上面的那张飞机图片,那么Precision的值就 是100%,而Recall的值则是20%。如果把蓝色虚线放到第二张图片 下面,也就是说让系统只识别出最上面的前两张图片,那么 Precision的值还是100%,而Recall的值则增长到是40%。
不同阈值条件下,Precision与Recall的变化情况:
AP计算:
mAP:均值平均准确率
其中𝑁代表测试集中所有图片的个数,𝑃(𝑘)表示在能识别出𝑘个图片的时候 Precision的值,而 Δ𝑟(𝑘)则表示识别图片个数从𝑘 − 1变化到𝑘时(通过调整阈值)Recall值的变化情况.
每一个类别均可确定对应的AP ;
多类的检测中,取每个类AP的平均值,即为mAP。
三、目标检测与YOLO概述
1.目标检测问题:
目标检测是在给定的图片中精确找到物体所在位置,并标注出物体的类别。 物体的尺寸变化范围很大,摆放物体的角度,姿态不定,而且可以出现在图 片的任何地方,并且物体还可以是多个类别。
2.数据集输出表达:
输出结构:
其中 = 1 :图片中有目标; = 0 :图片中无目标
目标检测实例:实际图像中有多个目标
3.目标检测技术发展:
YOLO:一步法(two-stage):无需候选框,直接出最终结果,速度快,基本可以实时完成。
YOLO的发展历程:
YOLO家族性能比较图示:
四、目标检测基本思想
1.滑动窗口
存在以下问题:
(1)滑动次数太多,计算太慢 :假设图片为𝑤宽,ℎ高,识别一幅图片需要𝑇时间,则需要: 𝑤 ∗ ℎ ∗ 𝑇的总时间。 例如:图片大小448 × 448,识别一个目标需要0.05s,则: 总时间= 448 ∗ 448 ∗ 0.05 ≈ 10000𝑠,约3小时!
(2)目标大小不同,每一个滑动位置需要用很多框:图片宽度和高度都不相同,比例也不相同,因此需要取很多框。 例如:标准框100*50大小, • 取50*50,50*25,200*50,200*100等不同大小,在面积和宽高比变化 • 假设面积变化3类(0.5,1,2), 宽高比3类(0.5,1,2),则共有9种。 总时间是原来的9倍: 总时间= 10000 × 9 = 90000𝑠,约1天3小时!
滑动窗口的改进:
一般图片中,大多数位置都不存在目标。
可以确定那些更有可能出现目标的位置,再有针对性的用CNN进 行检测——两步法(Region Proposal)
两步法依然很费时!
进一步减少出现目标的位置,而且将目标分类检测和定位问题 合在一个网络里——一步法(YOLO)
分类问题扩展为回归+分类问题:
存在一些问题:
(1) 有一个框里有多个,有个多个框里有一个,怎么办?
解决方案:多个框里有一个目标,取目标中心点所在框 一个框里有多个,暂不能解决。
(2)多类目标怎么办?
解决方案:使用独热编码扩展类别数。
(3)小目标怎么办?
解决方案:使用单独网络拟合小目标,即设置多个bounding box
五、YOLO网络结构
1.YOLO网络结构概略图:
YOLO官方的模型结构图 :
网络结构包含24个卷积层和2个全连接层;其中前20个卷积层用来做预训 练,后面4个是随机初始化的卷积层,和2个全连接层。
2.YOLO网络输入:
YOLO v1在PASCAL VOC数据集上进行的训练,因此输入图片为 448 × 448 × 3。实际中如为其它尺寸,需要resize或切割成要求尺寸。
3.YOLO模型处理:7×7网格划分
将图片分割为个grid(𝑆 = 7),每个grid cell的大小都是相等的;
每个格子都可以检测是否包含目标;
YOLO v1中,每个格子只能检测一种 物体(但可以不同大小)。