机器视觉与深度学习

视频参考链接:

资料参考链接:


2023/10/12 9:21 课程前面部分可能有些地方和机器视觉基础那门课有一些交叉重合,没必要跳过就当简单的回顾。这门课程的核心是掌握深度学习在机器视觉中的作用,后续将会逐步深入;

另外,前面学机器视觉基础的某些地方可能会听的不是特别认真,有些地方模糊不理解就直接过了。但是现在学这门课程最好不要像之前囫囵吞枣式的学习,速度慢下来理解吸收才是重点(对于简单的介绍性的内容没必要花费大量时间钻牛角尖,此处特指视频中专业性较强的重点内容),鲁鹏的视频课对于重难点可能讲的不是很好,可以参考b站其他up主的视频进行理解;

关于参考笔记的选择,也不需要专门花时间去找那种十全十美的(几乎没有)。找一个大概能用的然后结合自己看视频的理解进行修改补充即可;

2023/10/12 21:46 花了不到一天时间大概把整个课程过完了…只能说基础的太基础,然后难的地方视频中也没有介绍清楚。不过借助课程大概理清了课程体系框架,单单从这门课程来说没有二刷的必要。之后就进入下一阶段的学习;


一、图像分类

章节重点:图像分类任务、机器学习所涉及的基础概念以及系统设计的基本范式、线性分类器、全连接神经网络、卷积神经网络、经典网络结构解析、神经网络可视化

图像分类任务是计算机视觉的核心任务,其目标是根据图像信息中所反映的不同特征,把不同类别的图像区分开来。

图像分类的定义:从已知的类别标签集合中为给定的输入图片选定一个类别标签

1.基于机器学习

首先应该明确,基于规则的图像分类方法是不可行的

硬编码分类

基于机器学习的图像分类任务也称为基于数据驱动的图像分类,主要分为以下三个步骤:

  1. 数据集构建(有监督和无监督学习)
  2. 分类器设计与学习(从数据中找出规律)
  3. 分类器决策(对未知图像进行决策)

其中,分类器的设计与学习过程如下图所示

设计主要包含对图像表示、分类模型、损失函数以及优化算法的设计

分类器的决策过程如下图所示

1.1 图像表示

对图像进行处理,最基本也是最重要的一步就是将图像表示出来,主要有三种常见的表示方法

1.1.1 像素表示

根据RGB的原理,图片中的每一个像素的颜色都可以用一个三元组来表示。假设要表示的图像为m*m的大小,那么就可以用3*n*m维向量来表示这张图像。

1.1.2 全局特征表示(GIST)

通过提取整张图像中的全部像素体现出来的特征来表征图像,目的是降低维度。全局提取特征的方法适用于景色类图像的分类,细节较多的分类效果不好。

1.1.3 局部特征表示(SIFT)

通过提取整张图像中的部分特征点来表示图像,如人脸识别,识别出两个眼睛一个嘴巴一个鼻子作为特征,这时挡住一个眼睛,也能够做一个较好的判断。同样的场景用全局特征表示方法,由于其使用所有的像素作为特征提取,去掉一个眼睛会对数据造成很大的变化,导致失败率很高。

1.2 分类模型

常见分类器如下(包括下面的损失函数、优化算法在机器学习中已经介绍过,这里仅作展示不详细展开)

1.3 损失函数

常见损失函数如下

1.4 优化算法

常见优化算法如下

2.线性分类器

2.1 图像表示

此处采用基于像素的图像表示(最简单的表示方式),将图像的每一个像素的颜色用一个三元组(xi,yi,zi)表示,将所有三元组依次排开即可得到图像的向量表示x

例如,当选择的RGB图像大小为32*32时,图像对应的向量大小为32*32*3

2.2 分类模型

2.2.1 线性分类器的定义

线性分类器是一种线性映射,将输入的图像特征映射为类别函数。假设x为输入的图像向量,c为类别个数,对于第i个类别的线性分类器定义如下

其中fi为第i个线性分类器的打分,wi表示第i个类别的权值列向量,bi为偏置项。因为上述求解fi的变换是线性的,因此这种分类器被称为线性分类器。

从所有的分数中选择最大的fi,则分类器输入图像x输出决策第i类

2.2.2 线性分类器的权值

线性分类器的权值可以看做是一个模板,每一个类别通过学习给定的图像,不断调整其中的数值,使其数值更加贴合对应类别的特征。比如说一个具有10个类别的线性分类器,训练后的模板长这个样子:

线性分类器的决策依据实际就是“输入图像与评估模板的匹配程度越高,分类器输出的分数就越高”

2.2.3 线性分类器的分界面

当wix+bi=0时,其几何意义是图像类别的分界面。对线性分类器的学习实质上就是在对权值矩阵W和偏置向量b进行学习,换句话说就是在寻找分界面。

假设用两个特征来表示一个图像,通过画分界面将图像类别分开,图示如下

  • wi控制线的方向;

  • bi控制线的偏移;

  • 箭头方向代表分类器的正方向沿着箭头方向距离决策面越远分数就越高;


损失函数和优化算法等具体参见机器学习(机器学习 - Tintoki_blog (gintoki-jpg.github.io)),这里不做过多介绍(毕竟人工智能这个学科需要具体任务具体分析)

3.全连接神经网络

线性分类器通过一次变换得出分类结果,与之相比,全连接神经网络级联了多个变换实现输入到输出的映射。

  • 双层全连接网络:f=W2Act(0,W1x+b1)+b2
  • 三层全连接网络:f=W3Act(0,W2Act(0,W1x+b1)+b2)+b3

其中Act表示一种非线性操作(后续称为激活函数),去掉后网络就成了线性分类器。

双层全连接网络

可以看到全连接网络拥有更多的权值模板,这意味着分类器有机会学习更多信息,进而网络的描述能力更强。

线性分类器能够解决线性可分的任务,全连接神经网络更多的是处理线性不可分的任务。

(这门课程称为机器视觉与深度学习,因此其中出现了许多机器学习与深度学习相关的介绍,比较偏基础,因此这里不多做整理。至于之后如果需要复现或者深入研究的时候再额外做笔记理解即可)

4.卷积神经网络

全连接神经网络的参数随着图像尺寸的增大会急剧增加,不仅会导致计算量难以接受,也很容易产生过拟合。究其原因与图像的表达方式有关,即全连接神经网络更适合向量维数较少的表示情况。

考虑借助机器视觉中的卷积对图像的特征进行提取,将提取出的特征向量作为全连接神经网络的输入,这就引出卷积神经网络。

卷积神经网络

卷积层用于提取局部特征,激活层增加非线性性,池化层降低数据维度,全连接层进行最终的决策和输出:

  • 卷积层:卷积层的作用类似于滤镜,它在图像或输入数据上滑动一个小窗口(卷积核),并通过对窗口内的数据进行加权求和来检测图像中的特征,如边缘、纹理等。这有助于网络学习到不同的特征,例如边缘、形状或纹理。卷积层的主要任务是提取输入数据的局部特征。

  • 激活层:激活层引入非线性性质,使网络能够学习复杂的模式。激活层有助于网络更好地捕捉和表示数据中的非线性关系,增加网络的表达能力。

  • 池化层:池化层的作用是减小数据的空间维度,降低计算复杂性,并提取最重要的特征。最常见的池化操作是最大池化,其中池化窗口内的最大值被保留,而其余值被忽略。这有助于减少数据的大小,使网络对位置的微小变化更具鲁棒性。

  • 全连接层:全连接层是网络中的密集层,每个神经元与前一层的所有神经元相连接。这一层用于学习输入数据的全局模式和进行最终的分类或回归任务。它将前面层提取的特征组合在一起,以便网络最终输出预测结果。


Q:为什么需要降低数据的空间维度?池化层是如何降低空间维度的?

A:降低数据的空间维度,主要有两个原因:

  1. 减少计算复杂性:原始图像或输入数据通常非常大,包含大量的像素或特征。在深度学习中,处理大规模数据需要更多的计算资源,包括内存和处理时间。通过降低数据的空间维度,可以减小模型的复杂性,加速训练和推断过程。
  2. 提取关键特征:不是所有的图像或输入数据维度都对最终任务有用。某些特征可能是冗余的,或者对于解决特定问题不太重要。池化层的目标是提取最重要的特征,使网络更加关注这些关键信息,同时降低对噪声或不必要信息的敏感度。

池化层通过以下方式降低空间维度:

  1. 池化窗口:池化层定义了一个固定大小的窗口,通常是2x2或3x3,它在输入数据上滑动。
  2. 池化操作:常见的池化操作是最大池化和平均池化。在最大池化中,池化窗口内的数值中选取最大值,而在平均池化中,计算池化窗口内数值的平均值。
  3. 步幅(Stride):步幅定义了池化窗口在输入数据上的滑动距离。较大的步幅可以减小输出的维度。

通过将池化窗口滑动并执行池化操作,池化层将输入数据的每个窗口内的信息压缩成一个单一数值(最大值或平均值),从而减小了数据的空间维度。这有助于降低计算复杂性,并且在保留重要信息的同时减小了数据的规模,使神经网络更加高效地学习和处理图像或其他类型的数据。


AlexNet、ZFNet、VGG、GoogleNet和ResNet是五种经典的卷积神经网络,它们为图像分类、目标检测和其他计算机视觉任务的性能提升做出了巨大贡献

二、图像检测

章节重点:图像检测任务分析、评价指标、二阶段检测网络、一阶段检测网络

图像检测也称为目标检测,可拆解为图像分类+图像定位两个任务。

图像检测这部分在R-CNN目标检测博客中有详细的介绍,这里就不具体展开(详情参考:中级项目_目标检测系统 - Tintoki_blog (gintoki-jpg.github.io)

三、图像分割

章节重点:图像分割任务分析、评价指标(语义分割网络、实例分割网络)

  • 语义分割:将不同的语义标记成不同的颜色,判断像素级的类别,即对于一张图片中的某一个像素,判断出其语义。

  • 实例分割:将不同的实例标记成不同的颜色。

语义分割和实例分割的不同之处在于,语义分割是将相同的语义标记成同一个颜色,而实例分割是要区分出不同的实例(例如两只狗具有相同的语义,但是不同的实例)

这篇文章讲的非常好,强烈推荐:一文读懂语义分割与实例分割 - 知乎 (zhihu.com)

四、图像描述

章节重点:循环神经网络、LSTM、注意力机制

图像描述推荐参考文章:图像描述(image captioning)深入解析 - 知乎 (zhihu.com)

五、图像生成

章节重点:深度生成网络(RixelCNN\PixelRNN、变分自编码网络、生成对抗网络)

简单来说,图像生成/图像合成就是利用现有数据集生成新图像的任务。更进一步的,现在很火的AI绘画就是图像生成的民间应用。

有关图像生成可以看这几篇文章:


机器视觉与深度学习
https://gintoki-jpg.github.io/2023/10/12/专业_机器视觉与深度学习/
作者
杨再俨
发布于
2023年10月12日
许可协议