计算机视觉

前言:依据李沐视频整理

图像增广

图像增广在对训练图像进行一系列的随机变化之后,生成相似但不同的训练样本,从而扩大了训练集的规模。 此外,应用图像增广的原因是,随机改变训练样本可以减少模型对某些属性的依赖,从而提高模型的泛化能力。也就是增加一个已有数据集,使得有更多的多样性。例如:

  • 在语言里面加入各种不同的背景噪声
  • 改变图片的颜色和形状

常用的图像增广方法

翻转

1
2
3
torchvision.transforms.RandomHorizontalFlip()  # 0.5几率 左右翻转

torchvision.transforms.RandomVerticalFlip() # 0.5几率 上下翻转

切割

1
2
torchvision.transforms.RandomResizedCrop(
(200, 200), scale=(0.1, 1), ratio=(0.5, 2)) #随机裁剪一个面积为原始面积10%到100%的区域,该区域的宽高比从0.5~2之间随机取值。 然后,区域的宽度和高度都被缩放到200像素

颜色

我们可以改变图像颜色的四个方面:亮度、对比度、饱和度和色调。

1
2
3
4
5
6
7
8
9
torchvision.transforms.ColorJitter(
brightness=0.5, contrast=0, saturation=0, hue=0) # 随机更改图像的亮度,随机值为原始图像的50%(1-0.5)到150%(1+0.5)之间

torchvision.transforms.ColorJitter(
brightness=0, contrast=0, saturation=0, hue=0.5) # 随机更改图像的色调

color_aug = torchvision.transforms.ColorJitter(
brightness=0.5, contrast=0.5, saturation=0.5, hue=0.5)
apply(img, color_aug) # 创建一个RandomColorJitter实例,并设置如何同时随机更改图像的亮度(brightness)、对比度(contrast)、饱和度(saturation)和色调(hue)

结合一下多种方法

1
2
3
augs = torchvision.transforms.Compose([
torchvision.transforms.RandomHorizontalFlip(), color_aug, shape_aug])
apply(img, augs)

微调

也叫迁移学习(transfer learning),将从源数据集学到的知识迁移到目标数据集

微调

最后一层 不能直接使用,因为标号可能变了

特征提取模块可能仍然对我的数据有用

一个目标数据集上的正常训练任务 但是用更强的正则化

  • 使用更小的学习率
  • 使用更少的数据迭代

源数据集远复杂于目标数据,通常微调效果更好

固定一些层

  • 低层次的特征跟家通用
  • 高层次的特征则更跟数据集相关
1
2
3
model = models.resnet18(pretrained=True) # 自动下载预训练的模型参数
model.fc = nn.Linear(model.fc.in_features, n_class) # 最后一层的输出种类,换成当前数据集有多少种类
optimizer = optim.Adam(model.fc.parameters())

目标检测和边界框

在图像分类任务中,我们假设图像中只有一个主要物体对象,我们只关注如何识别其类别。 然而,很多时候图像里有多个我们感兴趣的目标,我们不仅想知道它们的类别,还想得到它们在图像中的具体位置。 在计算机视觉里,我们将这类任务称为目标检测(object detection)或目标识别(object recognition)。

边界框

一个边缘框可以通过四个数字定义,边界框是矩形的,由矩形左上角的以及右下角的(x)和(y)坐标决定。 另一种常用的边界框表示方法是边界框中心的((x, y))轴坐标以及框的宽度和高度。

锚框

目标检测算法通常会在输入图像中采样大量的区域,然后判断这些区域中是否包含我们感兴趣的目标,并调整区域边界从而更准确地预测目标的真实边界框(ground-truth bounding box)。 不同的模型使用的区域采样方法可能不同。 这里我们介绍其中的一种方法:以每个像素为中心,生成多个缩放比和宽高比(aspect ratio)不同的边界框。 这些边界框被称为锚框(anchor box)

目标检测过程

简化的过程:

  • 首先生成大量锚框

  • 赋予标号,

  • 每个锚框作为一个样本进行训练

杰卡德系数(Jaccard)可以衡量锚框和真实边界框之间的相似性。 给定集合A和B,他们的杰卡德系数是他们交集的大小除以他们并集的大小,也就是交并比(IoU)

杰卡德系数-交并比

在预测时,使用NMS来去除冗余的预测。

比较知名目标检测数据的有COCO(cocodataset.org)

R-CNN

区域卷积神经网络(region-based CNN或regions with CNN features,R-CNN)

R-CNN包括以下四个步骤:

  1. 对输入图像使用选择性搜索来选取多个高质量的提议区域 。这些提议区域通常是在多个尺度下选取的,并具有不同的形状和大小。每个提议区域都将被标注类别和真实边界框;
  2. 选择一个预训练的卷积神经网络,并将其在输出层之前截断。将每个提议区域变形为网络需要的输入尺寸,并通过前向传播输出抽取的提议区域特征;
  3. 将每个提议区域的特征连同其标注的类别作为一个样本。训练多个支持向量机对目标分类,其中每个支持向量机用来判断样本是否属于某一个类别;
  4. 将每个提议区域的特征连同其标注的边界框作为一个样本,训练线性回归模型来预测真实边界框。

Fast R-CNN

Fast R-CNN引入了兴趣区域汇聚层(RoI pooling):将卷积神经网络的输出和提议区域作为输入,输出连结后的各个提议区域抽取的特征

fast R-CNN

兴趣区域(ROI)池化层

给定一个锚框,均匀分割成n * m 块,输出每块里的最大值,不管锚框多大,总是输出nm个值.

作用:让每个锚框编程自己想要的模样,接着使用CNN对图片抽取特征,最后使用ROI池化层对每个锚框生成固定锚框特征。

Faster R-CNN

为了较精确地检测目标结果,Fast R-CNN模型通常需要在选择性搜索中生成大量的提议区域。 Faster R-CNN 提出将选择性搜索替换为区域提议网络(region proposal network),从而减少提议区域的生成数量,并保证目标检测的精度。

使用一个区域提议网络来替代启发式搜索来获得更好的锚框

Faster R-CNN

Mask R-CNN

如果在训练集中还标注了每个目标在图像上的像素级位置,那么Mask R-CNN能够有效地利用这些详尽的标注信息进一步提升目标检测的精度。如果有像素级别的标号,使用FCN来利用这些信息

Mask R-CNN

Mask R-CNN是基于Faster R-CNN修改而来的。 具体来说,Mask R-CNN将兴趣区域汇聚层替换为了 兴趣区域对齐层,使用双线性插值(bilinear interpolation)来保留特征图上的空间信息,从而更适于像素级预测。

单发多框检测

单发多框检测(SSD) 该模型简单、快速且被广泛使用。尽管这只是其中一种目标检测模型,但本节中的一些设计原则和实现细节也适用于其他模型。

此模型主要由基础网络组成,其后是几个多尺度特征块。 基本网络用于从输入图像中提取特征,因此它可以使用深度卷积神经网络。

单发多框检测模型主要由一个基础网络块和若干多尺度特征块串联而成

简单的来总结就是:

  • ssd通过单神经网络来检测模型

  • 以每个像素为中心的产生多个锚框

  • 在多个端的输出上进行多尺度的检测

YOLO

名字由来于you only look once,是Joseph Redmon和Ali Farhadi等人于2015年提出的基于单个神经网络的目标检测系统。在2017年CVPR上,Joseph Redmon和Ali Farhadi又发表的YOLO 2,进一步提高了检测的精度和速度。yolo将图片均匀分成s*s个锚框,每个锚框预测B个边缘框。

//todo 有需要的话,后面再单独写一篇YOLO的文章

分割

语义分割:

语义分割将图片中的每个像素分类到对应的类别

应用:

背景虚化

路面分割

实例分割 区别狗1 狗2

最重要的语义分割数据集Pascal VOC2012

转置卷积

卷积不会增大输入的高宽,通常要么不变,要么减半

转置卷积则可以用户来增大输入高宽

为什么叫做转置

转置卷积也是一种卷积

同反卷积的关系

数学上的反卷积是指卷积的逆运算

反卷积很少用在深度学习中

我们说的反卷积神经网络指用了转置卷积的神经网络

全连接卷积神经网络

也就是FCN

是用深度神经网络来做语义分割的奠基性工作

他用转置卷积层来替换CNN最后的全连接层,从而可以实现每个像素的预测

样式迁移

将样式图片的样式迁移到内容图片上,得到合成图片

基于卷积神经网络的风格迁移


计算机视觉
http://example.com/2024/08/06/computer vision/
作者
Mercury
发布于
2024年8月6日
许可协议