### 课件内容详细讲解
### 第一部分:图像分类概述
#### 对象分类
- 我们现在要对对象进行分类,这里有几种可用的算法,每种算法的复杂度不同,因为图像的复杂度不同。
- 可能的算法包括:
- 形状描述符(例如面积、长度等)
- 傅立叶系数
- 纹理
- 相关性
- 特征匹配(SIFT)
- 在之前的课程中,我们讨论了形状描述符,例如面积、位置、时刻等。通过结合几个描述符,可以识别出一个图案(pattern)。图案是描述符的排列组合,可以以向量、树或字符串的形式存储。
#### Pattern类
- Pattern类是具有共同特征的pattern的集合,用符号W表示类的数量。
- 我们希望尽可能少地依赖人工干预,将一个pattern分配到正确的pattern类中。
### 第二部分:判别函数与分类
#### 简单举例
- 考虑两个类并手工绘制分界线。使用单变量 \( x - 3 = 0 \)(红线),会有三处分类错误。
- 使用两个变量能得到更好的分类效果(绿线)。
#### 自动化分类
- 如何自动化这个过程?可以计算每类的均值坐标,然后计算每个待分类对象到该类均值的距离(欧氏距离)。
- 这种方法在类群之间分离明显时效果较好。
### 第三部分:其他分类方法
#### 最近邻分类器
- 最近邻分类器(Nearest Neighbour Classifier)计算未知对象与每个训练点之间的距离,将其归类到最近的类。
- \( k \) 最近邻(kNN):找到 \( k \) 个最近的邻居,每个类投票决定最终结果。
#### 树结构分类器
- 树结构可以用来分类复杂图像,通过结构关系信息确定对象,例如使用不同尺度的纹理。
- 生成树的自动算法:检查所有数据并测试所有可能的二进制分割,选择最佳优化参数的分割,强加分割以产生新节点。如果分割导致子节点观测数过少(小于阈值MinLeaf),选择最佳优化标准的分割,并对所有新节点重复此过程。
#### 交叉验证与剪枝
- 交叉验证:将训练数据随机分成10部分,用9部分训练10棵树,然后检查每棵树在剩余部分的准确性。
- 剪枝:通过合并同一树枝上的叶子优化树的深度。最简单的方法是减少错误修剪,从叶子开始,将父节点替换为最常见的类,测试树错误是否超出某个阈值。
### 第四部分:深度学习与神经网络
#### 卷积神经网络(CNN)
- 卷积神经网络(CNN)通过共享权重减少计算量。卷积操作类似于相关性/卷积,通过3D内核进行计算。
- 池化层(Pooling Layer):用于减少图像大小,MaxPooling取一层的最大输出值,平均池化取平均值,全球平均池化取所有激活的平均值。
- 训练CNN:通过大量覆盖所有可能视角的训练集进行训练,使用数据增强(旋转、倾斜训练数据等)并在GPU上训练。
#### 其他方法
- 支持向量机(SVM):找到具有最大分离数据点的边界(超平面)。
- 神经网络:使用多层感知器(Perceptron)进行图像分类,感知器通过权重和偏置计算输出,并通过非线性激活函数处理。
### 结论
- 有多种方法可以对描述符进行分类,选择哪一种取决于具体情况。对于大型训练集,使用神经网络是一个不错的选择。
#### 分类概述
分类是对图像中的对象进行识别和分类。不同的图像具有不同的复杂度,因此需要使用不同的算法来处理这些复杂度。
#### 可能的算法
1. **形状描述符**:包括面积、长度等参数。
2. **傅立叶系数**:用于频域分析和特征提取。
3. **纹理**:通过分析图像的纹理特征来分类。
4. **相关性**:通过计算图像与模板之间的相关性来进行匹配。
5. **特征匹配**(例如SIFT):用于检测和匹配关键点特征。
### 分类方法
#### 判别函数
判别函数\( d() \)用于确定对象所属的类别。通过计算对象到各个类别的距离,选择距离最小的类别。对于二分类问题,如果判别函数\( d_{ij}(x) > 0 \),则x属于类别1,否则属于类别2。
#### 自动化分类
自动化分类过程包括以下步骤:
1. **计算每个类别的均值**:根据各个类别的数据计算出其均值位置。
2. **计算距离**:对于未知向量\( x \),计算其到各个类别均值的欧氏距离。
3. **判别边界**:选择最小化距离的边界。
#### 最近邻分类器(kNN)
最近邻分类器通过计算未知对象与训练数据点之间的距离来分类。kNN方法通过找到k个最近的邻居,每个邻居投票确定最终的分类结果。
#### 其他方法
1. **字符串描述符**:将形状编码为字符串,通过字符串匹配来识别图案。
2. **树形结构**:利用结构关系信息,如使用越来越精细的纹理尺度来确定对象。
#### 决策树
决策树通过二进制分割数据来分类。自动算法通过检查所有可能的二进制分割,选择最佳优化参数来进行分裂。停止规则是当节点变纯时停止,即节点只包含一个类或少于某个阈值的样本。
### 交叉验证与修剪
1. **交叉验证**:将训练数据随机分成10份,使用9份数据训练10棵树,然后用剩下的一份数据测试每棵树的准确性。
2. **修剪**:通过合并同一树枝上的叶子来优化树的深度,减少过拟合问题。
### 随机森林
随机森林通过在随机数据子集上训练多棵树来克服单棵树过拟合的问题。每棵树对分类结果进行投票,选择得票最多的分类结果。
### 支持向量机(SVM)
SVM找到数据点之间最大间隔的边界(超平面)。支持向量是最接近分离超平面的数据点。超平面不一定是线性的,可以是多项式、径向基函数(高斯函数)等。
### 神经网络
神经网络是一种模仿生物神经元的计算模型。感知器是最重要的类型之一。每个输入乘以某个权重,求和后加上偏置,应用非线性函数(激活函数)得到输出。
#### 激活函数
1. **Sigmoid函数**:压缩输入空间到0到1之间,适用于简单网络。
2. **Tanh函数**:常用于小型网络。
3. **ReLU(整流线性单元)**:计算效率高,适用于大型网络。
### 深度学习
深度学习是指拥有大量层的神经网络。通常层数越多,网络性能越好。深度学习引入了卷积神经网络(CNN)、ReLU激活函数、大量数据和计算能力等技术。
#### 卷积神经网络(CNN)
CNN通过共享权重来减少参数数量。CNN层通常输入到其他CNN层中,第一层像边缘滤波器,高阶结构出现在更高层。
#### 池化层
池化层用于减少图像大小。MaxPooling取一层的最大输出值,将4x4的图像减少到2x2。平均池使用均值而不是最大值。
### VGG网络
VGG网络是一种常见的设计,有几个卷积层和最大池化层。这些层预处理图像,输出输入到一个小型全连接网络进行分类。
### 图像增强与训练
为了处理尺度、光照、旋转等问题,使用大量训练集覆盖所有可能的视角。数据增强通过旋转、倾斜训练数据来扩充训练集。在GPU上训练网络可能需要数周时间。
### 物体检测
VGG网络对整个图像进行分类,但无法给出对象的位置。最简单的方法是通过网络扫描图像,或添加额外的输出(如x, y, 宽度、高度)并重新训练网络。