十三、计算机视觉
13.1 图像增广
图像增广基于现有的训练数据生成随机图像,来提高模型的泛化能力。
13.2. 微调
迁移学习(transfer learning)将从源数据集学到的知识迁移到目标数据集。
微调通过使用在大数据上得到的预训练好的模型来初始化模型权重来完成提升精度
预训练模型质量很重要
微调通常速度更快、精度更高
网络架构
一个神经网络一般可以分成两块
- 特征抽取将原始像素变成容易线性分割的特征
- 线性分类器来做分类
在一个源数据集上训练的模型,做特征提取的部分可以拿来使用
- 在源数据集(例如ImageNet数据集)上预训练神经网络模型,即源模型。
- 创建一个新的神经网络模型,即目标模型。这将复制源模型上的所有模型设计及其参数(输出层除外)。我们假定这些模型参数包含从源数据集中学到的知识,这些知识也将适用于目标数据集。我们还假设源模型的输出层与源数据集的标签密切相关;因此不在目标模型中使用该层。
- 向目标模型添加输出层,其输出数是目标数据集中的类别数。然后随机初始化该层的模型参数。
- 在目标数据集(如椅子数据集)上训练目标模型。输出层将从头开始进行训练,而所有其他层的参数将根据源模型的参数进行微调。
训练
是一个目标数据集上的正常训练任务,但使用更强的正则化,使用更小的学习率,使用更少的数据迭代
源数据集原复杂于目标数据,通常微调效果更好
重用分类器权重
源数据集可能也有目标数据中的部分标号
可以使用预训练好模型分类器中对应标号对应的向量来做初始化
固定一些层
神经网络通常学习有层次的特征表示,低层次的特征更加通用,高层次的特征则更跟数据集相关
可以固定底部一些层的参数,不参与更新
13.3. 目标检测和边界框
边界框 bounding box
一个边界框通过四个数字定义
边界框是矩形的,由矩形左上角的以及右下角的x和y坐标决定。
13.4. 锚框
一类目标检测算法是基于锚框来预测
提出多个被称为锚框的区域(边缘框),并赋予编号,每个锚框作为一个样本进行训练
预测时,使用NMS来去掉冗余的预测
生成多个锚框
输入图像的高h,宽w,宽高比h/w=r
缩放比s,即锚框的高为,宽为
要生成多个不同形状的锚框,让我们设置许多缩放比(scale)取值s1,…,sn和许多宽高比(aspect ratio)取值r1,…,rm
即,以同一元素为中心的锚框的数量是n+m-1;对于整个图形,共生成wh(n+m-1)个锚框
loU-交并比
loU 用来计算两个框之间的相似度
0表示无重叠,1表示重合
这是 Jacquard 指数的一个特殊情况
给定两个集合 A和 B
在训练数据中标注锚框
在训练集中,我们将每个锚框视为一个训练样本。 为了训练目标检测模型,我们需要每个锚框的类别(class)和偏移量(offset)标签,其中前者是与锚框相关的对象的类别,后者是真实边界框相对于锚框的偏移量。 在预测时,我们为每个图像生成多个锚框,预测所有锚框的类别和偏移量,根据预测的偏移量调整它们的位置以获得预测的边界框,最后只输出符合特定条件的预测边界框。
目标检测训练集带有真实边界框的位置及其包围物体类别的标签。 要标记任何生成的锚框,我们可以参考分配到的最接近此锚框的真实边界框的位置和类别标签。
如果一个锚框没有被分配真实边界框,我们只需将锚框的类别标记为背景(background)。 背景类别的锚框通常被称为负类锚框,其余的被称为正类锚框。
使用非极大值抑制(NMS)输出
每个锚框预测一个边缘框
NMS可以合并相似的预测
选中是非背景类的最大预测值
去掉所有其它和它IoU值大于θ的预测
重复上述过程直到所有预测要么被选中,要么被去掉
13.5. 多尺度目标检测
以输入图像的每个像素为中心,生成了多个锚框,会得到太多需要计算的锚框,需要减少图像上的锚框数量。
当使用较小的锚框检测较小的物体时,我们可以采样更多的区域,而对于较大的物体,我们可以采样较少的区域。
13.7. 单发多框检测(SSD)
SSD模型
通过多尺度特征块,单发多框检测生成不同大小的锚框,并通过预测边界框的类别和偏移量来检测大小不同的目标,因此这是一个多尺度目标检测模型。
- 一个基础网络来抽取特征,然后多个卷积层块来减半高宽,在每段都生成锚框
- 底部段来拟合小物体,顶部段来拟合大物体
- 对每个锚框预测类别和边缘框
SSD通过单神经网络来检测模型
以每个像素为中心的产生多个锚框
在多个段的输出上进行多尺度的检测
YOLO模型
SSD中锚框大量重叠,因此浪费了很多计算
YOLO 将图片均匀分成 个锚框
每个锚框预测个边缘框
后续版本(V2,V3,V4...)有持续改进
13.8. 区域卷积神经网络(R-CNN)系列
基于锚框的算法
13.8.1. R-CNN
- 对输入图像使用选择性搜索 来选取多个高质量的提议区域(使用启发式搜索算法来选择锚框)。这些提议区域通常是在多个尺度下选取的,并具有不同的形状和大小。每个提议区域都将被标注类别和真实边界框;
- 选择一个预训练的卷积神经网络,并将其在输出层之前截断。将每个提议区域变形为网络需要的输入尺寸,并通过前向传播输出抽取的提议区域特征;
- 将每个提议区域的特征连同其标注的类别作为一个样本。训练多个支持向量机对目标分类,其中每个支持向量机用来判断样本是否属于某一个类别;
- 将每个提议区域的特征连同其标注的边界框作为一个样本,训练线性回归模型来预测真实边界框。
R-CNN的主要性能瓶颈在于,对每个提议区域,卷积神经网络的前向传播是独立的,而没有共享计算。 由于这些区域通常有重叠,独立的特征抽取会导致重复的计算。
13.8.2. Fast R-CNN
使用CNN对图片抽取特征,而不是对每个锚框进行抽取
使用Rol池化层对每个锚框生成固定长度的特征
- 与R-CNN相比,Fast R-CNN用来提取特征的卷积神经网络的输入是整个图像,而不是各个提议区域。此外,这个网络通常会参与训练。设输入为一张图像,将卷积神经网络的输出的形状记为1×c×h1×w1;
- 假设选择性搜索生成了n个提议区域。这些形状各异的提议区域在卷积神经网络的输出上分别标出了形状各异的兴趣区域。然后,这些感兴趣的区域需要进一步抽取出形状相同的特征(比如指定高度h2和宽度w2),以便于连结后输出。为了实现这一目标,Fast R-CNN引入了兴趣区域汇聚层(RoI pooling):将卷积神经网络的输出和提议区域作为输入,输出连结后的各个提议区域抽取的特征,形状为n×c×h2×w2;
- 通过全连接层将输出形状变换为n×d,其中超参数d取决于模型设计;
- 预测n个提议区域中每个区域的类别和边界框。更具体地说,在预测类别和边界框时,将全连接层的输出分别转换为形状为n×q(q是类别的数量)的输出和形状为n×4的输出。其中预测类别时使用softmax回归。
Rol池化层 range of interesting
给定一个锚框,均匀分割成n×m块,输出每块里的最大值
不管锚框多大,总是输出nm个值
使每个锚框变为想要的形状
13.8.3. Faster R-CNN
为了较精确地检测目标结果,Fast R-CNN模型通常需要在选择性搜索中生成大量的提议区域。 Faster R-CNN 提出将选择性搜索替换为区域提议网络(region proposal network),从而减少提议区域的生成数量,并保证目标检测的精度。
区域提议网络的计算步骤如下:
- 使用填充为1的3×3的卷积层变换卷积神经网络的输出,并将输出通道数记为c。这样,卷积神经网络为图像抽取的特征图中的每个单元均得到一个长度为c的新特征。
- 以特征图的每个像素为中心,生成多个不同大小和宽高比的锚框并标注它们。
- 使用锚框中心单元长度为c的特征,分别预测该锚框的二元类别(含目标还是背景)和边界框。
- 使用非极大值抑制,从预测类别为目标的预测边界框中移除相似的结果。最终输出的预测边界框即是兴趣区域汇聚层所需的提议区域。
13.8.4. Mask R-CNN
如果在训练集中还标注了每个目标在图像上的像素级位置,Mask R-CNN能够有效地利用这些详尽的标注信息进一步提升目标检测的精度。
将兴趣区域汇聚层替换为了 兴趣区域对齐层,使用双线性插值(bilinear interpolation)来保留特征图上的空间信息,从而更适于像素级预测。 兴趣区域对齐层的输出包含了所有与兴趣区域的形状相同的特征图。
13.9. 语义分割和数据集
语义分割
语义分割将图片中的每个像素分类到对应的类别
13.10. 转置卷积
卷积不会增大输入的高宽,通常要么不变、要么减半
转置卷积则可以用来增大输入高宽
转置卷积是一种卷积,它将输入和核进行了重新排列 同卷积一般是做下采样不同,它通常用作上采样 如果卷积将输入从(h,w)变成了(h,w',同样超参数下它将 (h',w)变成 (h, w)
填充、步幅和多通道
当将高和宽两侧的填充数指定为1时,转置卷积的输出中将删除第一和最后的行与列。
重新排列输入和核
13.11. 全连接卷积神经网络 FCN
FCN采用卷积神经网络实现了从图像像素到像素类别的变换
它用转置卷积层来替换CNN最后的全连接层,从而可以实现每个像素的预测
对每个像素的类别的预测存在通道里面,所以转置卷积层得到的输出通道数为类别数,高宽与输入相同