上文介绍的LeNet和AlexNet具有魔法数字和过拟合等问题,接下来介绍解决方案
VGG-16
输入和输出与AlexNet相同。其中每个池化层前连续的卷积层个数和卷积层通道数卷积核大小等超参数呈规律分布。如每进行一组卷积池化,图像大小小一半,通道数乘二,前两个卷积每组重复两个,后面重复三个。16的含义是十三个卷积池化层加三个全连接层。
ResNet
解决梯度消失问题(从激活函数求导后相乘思考)。残差块如图。
网络结构
对于跳跃结构,当输入与输出的维度一样时,不需要做其他处理,两者相加就可,但当两者维度不同时,输入要进行变换以后去匹配输出的维度,主要经过两种方式,1)用zero-padding去增加维度,2)用1x1卷积来增加维度
常用数据集
MNIST
它包含了 60000 个训练样本和 10000 个测试样本,每个样本都是一个 28x28 像素的灰度图像,表示了一个手写的单个数字(0 到 9)。
Fashion-MNIST
大小、格式和训练集/测试集划分与原始的MNIST 完全一致。60000/10000 的训练测试数据划分,28x28的灰度图片。
CIFAR-10
10个类的60000个32x32彩色图像组成,每个类有6000个图像。有50000个训练图像和10000个测试图像数据集。分为五个训练批次和一个测试批次,每个批次有10000个图像。测试批次包含来自每个类别的恰好1000个随机选择的图像。
PASCAL VOC
目标分类(识别)、检测、分割最常用的数据集之一。
文件格式
标注格式:
里面是图像对应的XML标注信息描述,每张图像有一个与之对应同名的描述XML文件,XML前面部分声明图像数据来源,大小等元信息,举例如下
MS COCO
从复杂的日常场景中截取,含目标分类(识别)、检测、分割、语义标注等数据集,提供的标注类别有80 类,有超过33 万张图片,其中20 万张有标注,整个数据集中个体的数目超过150 万个。大小可被7乘7整除。
ImageNet
总图像数据:14,197,122,总类别数:21841,带有标记框的图像数:1,034,908
ISLVRC 2012子数据集
训练集:1,281,167张图片+标签,类别数:1,000,验证集:50,000张图片+标签,测试集:100,000张图片
评价指标
TP/FP/FN/TN:T表示正确划分,P表示被划分为正例的实例数。F,N相反。
精确度越高,召回率越低。
置信度和准确率:PR曲线
AP计算
多分类问题mAP:每个类的AP值的平均值。
YOLO
之前的网络用于分类,接下来的用于目标检测等其他应用。
难点:相对于分类问题,由于不知道图片中含有的目标类别数,因此不知道目标输出的维数。
维数=类别数+分割框x,y,长,宽+有无目标。
滑动窗口:滑动次数过多,计算很慢;由于目标大小不同,因此滑动框的大小比例也要取很多种。
因此可以先确定有目标的位置,再针对的利用CNN(两步法)
进一步减少出现目标的位置,将目标检测和定位问题合在一个网络里(一步法)
将分类问题拓展为回归(大小,位置)加分类问题。
v1:
画框:大的叫grid(7*7),小的叫cell(2个)。
网络结构包含24个卷积层和2个全连接层;其中前20个卷积层用来做预训练,后面4个是随机初始化的卷积层,和2个全连接层。
(1)输入
YOLO v1在PASCAL VOC数据集上进行的训练,因此输入图片为448 × 448 × 3。实际中如为其它尺寸,需要resize或切割成要求尺寸。
(2)处理
将图片分割为 𝑆 2 个grid(𝑆 = 7),每个grid cell的大小都是相等的,每个格子都可以检测是否包含目标,YOLO v1中,每个格子只能检测一种物体(但可以不同大小)。
(3)输出
输出是一个7 × 7 × 30的张量。对应7 × 7个cell,每个cell对应2个包围框(boundingbox, bb),预测不同大小和宽高比,对应检测不同目标。每个bb有5个分量,分别是物体的中心位置(𝑥, 𝑦)和它的高(ℎ) 和宽 (𝑤) ,以及这次预测的置信度。
(4)包围框
我们有 𝑠 2 个框,每个框的bb个数为𝐵,分类器可以识别出𝐶种不同的物体,那么所有整个ground truth的长度为𝑆 × 𝑆 × (𝐵 × 5 + 𝐶),YOLO v1中,这个数量是30,YOLO v2和以后版本使用了自聚类的anchor box为bb, v2版本为𝐵 = 5, v3中𝐵 =9
(5)处理细节
归一化、置信度、训练值、训练数据与网络输出
损失函数
前两项是回归部分,S是7,B是2,前两个都平方和,第二项开方是因为让大小差的不太大。
后三项是类别预测。
其中两个系数可以调整。是为了让梯度更稳定。
后处理(非极大值抑制)
1. 首先丢弃概率小于预定IOU阈值(例如0.5)的所有边界框;
对于剩余的边界框:
2. 选择具有最高概率的边界框并将其作为输出预测;
3. 计算 “作为输出预测的边界框”,与其他边界框的相关联IoU值;舍去IoU大于阈值的边界框;其实就是舍弃与“作为输出预测的边界框” 很相近的框框。
4. 重复步骤2,直到所有边界框都被视为输出预测或被舍弃。
数据集训练
由于回归速度大于分类速度,所以先对分类步骤进行预训练
(1)YOLO先使用ImageNet数据集对前20层卷积网络进行预训练,然后使用完整的网络,在PASCAL VOC数据集上进行对象识别和定位的训练和预测
(2)训练中采用了drop out和数据增强来防止过拟合
(3)YOLO的最后一层采用线性激活函数(因为要回归bb位置),其它层都是采用Leaky ReLU激活函数:
v3:
用了DarkNet-53,是一种类似ResNet的网络,不算残差层(residual)有53层。
输入416*416*3,Backbone负责分类和特征提取,Neck负责特征目标检测匹配。
每个cell生成三个预测框(anchor),维数为85 = 5 + 80。
损失函数:
训练过程
提取三种尺寸的特征图,根据数据集聚类出的三种大小锚框,52*52,26*26,13*13,分别对不同尺寸特征图做滑动处理(大的框对大的图)
v5:
新引入了CSP结构。自适应锚框。
面积比小于四,标签和anchor匹配。
损失函数也分三类,回归损失采用CIOU损失,采用yolov4一样的Mosaic损失,四张图片随机缩放,随机剪裁,随机排布进行拼接。
进入backbone之前,对图片进行切片操作,Focus结构,在一张图片中每隔一个像素拿到一个值,RGB三个通道共拿到十二个通道。
语义分割
语义分割是找出同一画面中不同类型的区域,实例分割是要分出谁是谁。
语义分割要对图片中每一个像素分类,得到对应标签。
1*1卷积(与全连接比可以减少参数数量),转置卷积(反卷积:自适应系数的插值,用大的补),上池化(反池化:池化时要记住取最大的位置)
FCN
卷积部分
全卷积,第6、7、8层通过1*1卷积得到,输出的特征图(heatmap),颜色越接近红色概率越大。
反卷积部分:跳级结构
通过最后放大的倍数,分FCN-32s、16s、8s
常见语义分割评价指标和标注工具。