卷积神经网络基础(上)详见神经网络与深度学习周总结(2):卷积神经网络基础(上)
1.基本卷积神经网络
1.1 AlexNet
1.1.1 网络结构
AlexNet网络一共有8层可学习层——5层卷积和3层全连接,随网络的深入,通道宽、高衰减,通道数增加。
相比于LeNet网络, AlexNet网络具有以下优点:
- 池化层均采用最大池化
- 选用ReLu函数作为非线性环节激活函数
- 网络规模扩大,参数数量接近6000万
- 出现“多个卷积层+一个池化层”的结构
上图左侧为连接数,右侧为参数。
1.1.2 网络改进
(1)改进输入样本
对输入样本进行调整,如:
- 水平翻转图像
- 增加随机的光彩
- 对原始图像进行平移切割
- ......
(2)改进激活函数
对激活函数函数进行调整,如:
- 换用激活函数:如使用ReLu函数替代Tan Sigmoid函数
- 调整激活函数的位置:如将激活函数用于卷积层与全连接层之后
(3)增加Dropout层
在每个全连接层后使用一个Dropout层,以一定概率p随机关闭激活函数
(4)双GPU策略
使用两块GTX580显卡进行网络,要求两块显卡在特定层进行通信即可
1.2 VGG-16
1.2.1 网络结构
VGG-16网络随着网络的深入,通道高和宽衰减,通道数增加。
相比前述网络, VGG-16网络具有以下优点:
- 网络规模进一步增大,参数数量约为1.8亿
- VGG-16网络各卷积层、池化层的超参数基本相同,整体结构规整。
1.3 残差网络
1.3.1 网络结构
(1)梯度消失问题
对于非残差网络来说,理论上,随着网络的加深,训练后的网络性能递增,但在实际试验中,网络性能反而下降,这一问题也被称为梯度消失问题。
梯度消失问题具体解释如下:
为了避免梯度消失现象,因此引入残差网络。残差网络的基准模型基于VGG网络,其优点如下:
- 卷积层主要有3×3的过滤器,且对输出特征图的尺寸相同的各层,都有相同数量的过滤器;如果特征图的大小减半,那么过滤器的数量就增加倍,以保证每一层的时间复杂度相同。
- ResNet模型比VGG网络更少的过滤器和更低的复杂性:ResNet具有34层的权重层,有36亿FLOPs,只有VGG-19 ( 19.6亿FLOPs)的18%。
1.3.2 性能
2.常用数据集
2.1 MNIST
2.1.1 MNIST
MNIST数据集是一个常用的手写数字识别数据集,它包含了60000个训练样本和10000个测试样本,每个样本都是一个 28x28 像素的灰度图像,表示了一个手写的单个数字(0 到 9),原始的MNIST数据集包含有以下4个文件。
MINST数据集加载:
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()))
2.1.2 Fashion-MNIST数据集
FashionMNIST是一个替代MNIST手写数字集的图像数据集,涵盖了来自10种类别的共7万个不同商品的正面图片。其大小、格式和训练集/测试集划分与原始的MNIST完全一致,包括有60000/10000 的训练测试数据划分,28x28的灰度图片。可以直接用来测试机器学习和深度学习算法性能,无需改动任何代码。
如下所示为数据集中的类,及来自每个类的10个随机图像:
2.2 CIFAR 10数据集
CIFAR-10数据集由10个类的60000个32x32彩色图像组成。每个类有6000个图像,由50000个训练图像和10000个测试图像组成,分为五个训练批次和一个测试批次,每个批次有10000个图像。测试批次包含来自每个类别的恰好1000个随机选择的图像。
如下所示为数据集中的类,及来自每个类的10个随机图像:
2.3 PASCAL VOC
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 VOC2012 Main中统计的训练、验证、验证与训练、测试图像列表如下:
其20类图像如下:
2.4 MS COCO
MS COCO主要从复杂的日常场景中截取包含目标分类(识别)、检测、分割、语义标注等数据集,其官网为:http://cocodataset.org
MS COCO数据集提供的标注类别有80 类,有超过33 万张图片,其中20 万张有标注,整个数据集中个体的数目超过150 万个,具体如下:
- 人:1类
- 交通工具:8类,自行车,汽车等
- 公路常见:5类,信号灯,停车标志等
- 动物:10类,猫狗等
- 携带物品:5类,背包,雨伞等
- 运动器材:10类,飞盘,滑雪板,网球拍等。
- 厨房餐具:7类,瓶子,勺子等
- 水果及食品:10类
- 家庭用品:7类,椅子、床,电视等
- 家庭常见物品:17类,笔记本,鼠标,遥控器等
数据集示例如下:
2.5 ImageNet
ImageNet共有21841个类别,总图像14,197,122个,其中带有标记框的图像数为1,034,908。
2.6 ISLVRC 2012子数据集
ISLVRC 2012子共有1000类,包括训练集、验证集与测试集,训练集含有1,281,167张图片+标签,验证集含有50,000张图片+标签,测试集含有100,000张图片。
3.卷积神经网络评价指标
3.1 混淆矩阵
TP :被正确划分为正例的个数,即实际为正例且被分类器划分为正例的实例数
FP:被错误划分为正例的个数,即实际为负例且被分类器划分为正例的实例数
FN:被错误划分为负例的个数,即实际为正例且被分类器划分为负例的实例数
TN:被正确划分为负例的个数,即实际为负例且被分类器划分为负例的实例数
3.2 评价指标计算
使用以上4个指标可以计算P(精确率)、R(召回率)及精度:
精度(准确率)越高,召回率越低。
PR积分定义为AP,为方便计算,通过插值法计算AP公式为:
其中𝑁代表测试集中所有图片的个数,𝑃(𝑘)表示在能识别出𝑘个图片的时候Precision的值,而Δ𝑟(𝑘)则表示识别图片个数从𝑘−1变化到𝑘时(通过调整阈值)Recall值的变化情况。
每一个类别均可以确定其对应的AP,在多类的检测中取每个类的平均值,即为mAP
4.目标检测与YOLO网络
4.1 目标检测问题
4.1.1 定义
目标检测问题定义为:在给定的图片中精确找到物体所在位置,并标注出物体的类别。
目标物体的尺寸变化范围可以很大,摆放物体的角度,姿态不定,而且可以出现在图片的任何地方,并且物体还可以是多个类别。
4.2 YOLO
为了解决目标检测问题,学者提出了各类方法,最终提出YOLO算法。这是一种实时目标检测算法,其核心思想为将目标检测任务看作一个回归问题,从而实现了端到端的目标检测,极大地提高了检测速度。
4.2.1 网络结构
网络结构包含24个卷积层和2个全连接层,其中前20个卷积层用来做预训练,后面4个是随机初始化的卷积层和2个全连接层。
4.2.2 基本思想
Yolo算法的主要思想为:经过卷积网络在特征图上划分S×S的网格,通过网格的划分得到边界框(bounding box)和置信度得分(confidence)以及类别的概率图(class probability map),结合两者得到最终检测结果。
每个格子负责对落入其中的目标进行检测,从图像的特征图出发,得到物体检测出的属性(attributes),即边界框的坐标(box co-ordinates)、目标性得分(objectness score)、分类的得分,一次性预测所有各自所含目标的边界框、定位置信度、以及所有类别概率向量。
4.2.3 算法处理
对YOLO算法进行处理,可通过以下方式:
(1)归一化
(2)置信度
(3)训练值
(4)训练数据与网络输出
4.2.4 损失函数
4.2.5 网络训练
(1)NMS算法
为解决一个物体不独立存在,可能被周围物体的多个边界框包围,而实际物体只对应一个边界框的问题,提出了NMS算法。
NMS算法的核心思想为:选择得分最高的作为输出,与该输出重叠的去掉,不断重复这一过程直到所有备选处理完。
(2) 数据集训练
预训练与训练
详情见如下链接。
5.语义分割
5.1 定义
语义分割定义为:找到同一画面中的不同类型目标区域,要求同一类型目标要分出来具体实例。
5.2 语义分割基本思想
语义分割目标为对图像中每一个像素进行分类,得到对应的标签。
传统方法多用基于CNN的滑动窗口分割方法:为了对一个像素分类,使用该像素周围的一个图像块作为CNN的输入,用于训练与预测。但是这种方法滑动次数太多,计算太慢,重复计算太多。因此使用FCN网络,其结构如下图所示:
网络结构分为两个部分:全卷积部分和反卷积部分。
- 全卷积部分借用了一些经典的CNN网络,并把最后的全连接层换成卷积,用于提取特征,形成热点图
- 反卷积部分则是将小尺寸的热点图上采样得到原尺寸的语义分割图像。
5.3 FCN具体实现
5.3.1 卷积部分
输出的特征图(称为heatmap),颜色越贴近红色表示对应数值越大
5.3.2 反卷积部分
蓝色:卷积层;绿色:Max Pooling层;黄色: 求和运算;灰色: 裁剪
FCN反卷积部分使用的网络有FCN-32s,FCN-16s,FCN-8s等