天天看点

CS231n:图像分类数据驱动方法K-最近邻算法线性分类器

文章目录

  • 数据驱动方法
    • 1. 图像分类
    • 2. 困难和挑战
    • 3. 数据驱动方法
  • K-最近邻算法
    • 1. Nearest Neighbor分类器
    • 2. K-最近邻算法
  • 线性分类器

数据驱动方法

1. 图像分类

  • 图像分类的任务,就是对于一个给定的图像,预测它属于的那个分类标签或者给出属于一系列不同标签的可能性。
  • 图像是3维数组,数组元素是取值范围从0到255的整数。数组的尺寸是宽度 × \times ×高度 × \times × 3,其中这个3代表的是红、绿和蓝3个颜色通道。

2. 困难和挑战

  • 视角变化(Viewpoint variation):同一个物体,摄像机可以从多个角度来展现。
  • 大小变化(Scale variation):物体可视的大小通常是会变化的。不仅是在图片中,在真实世界中大小也是变化的。
  • 形变(Deformation):很多东西的形状并非一成不变,会有很大变化。
  • 遮挡(Occlusion):目标物体可能被挡住。有时候只有物体的一小部分(可以小到几个像素)是可见的。
  • 光照条件(Illumination conditions):在像素层面上,光照的影响非常大。
  • 背景干扰(Background clutter):物体可能混入背景之中,使之难以被辨认。
  • 类内差异(Intra-class variation):一类物体的个体之间的外形差异很大,比如椅子。这一类物体有许多不同的对象,每个都有自己的外形。

3. 数据驱动方法

  • 类似教小孩儿看图识物:给计算机很多数据,然后实现学习算法,让计算机学习到每个类的外形。这种方法,就是数据驱动方法。

K-最近邻算法

1. Nearest Neighbor分类器

  • 曼哈顿距离:先将两张图片转化为两个向量 I 1 I_1 I1​ 和 I 2 I_2 I2​,然后计算他们的L1距离。

    d 1 ( I 1 , I 2 ) = ∑ p ∣ I 1 p − I 2 p ∣ d_1(I_1, I_2) = \sum_p \vert I_1^p - I_2^p \vert d1​(I1​,I2​)=p∑​∣I1p​−I2p​∣

  • 最近邻分类器Python

2. K-最近邻算法

  • 测试时间过长。
  • 确定超参数。

线性分类器

  • 类似于巨型网络的基础模块。

线性分类器:在本模型中,我们从最简单的概率函数开始,一个线性映射:

f ( x i , W , b ) = W x i + b f(x_i, W, b) = Wx_i + b f(xi​,W,b)=Wxi​+b

实际的工作原理如下图所示:

CS231n:图像分类数据驱动方法K-最近邻算法线性分类器
  • 在上面的公式中,假设每个图像数据都被拉长为一个长度为 D D D 的列向量,大小为 [ D × 1 ] [D \times1] [D×1]。
  • 其中大小为 [ K × D ] [K \times D] [K×D] 的矩阵 W W W 和大小为 [ K × 1 ] [K \times 1] [K×1] 列向量 b b b 为该函数的参数(parameters)。人们常常混用权重和参数这两个术语。
  • 一个单独的矩阵乘法 W x i Wx_i Wxi​ 就高效地并行评估10个不同的分类器,每个分类器针对一个分类,其中每个类的分类器就是 W W W 的一个行向量。
  • 该方法的一个优势是训练数据是用来学习到参数 W W W 和 b b b 的,一旦训练完成,训练数据就可以丢弃,留下学习到的参数即可。

线性分类器理解:如下图所示:

CS231n:图像分类数据驱动方法K-最近邻算法线性分类器

图像空间的示意图。其中每个图像是一个点,有3个分类器。以红色的汽车分类器为例,红线表示空间中汽车分类分数为0的点的集合,红色的箭头表示分值上升的方向。所有红线右边的点的分数值均为正,且线性升高。红线左边的点分值为负,且线性降低。

W W W 的每一行都是一个分类类别的分类器。对于这些数字的几何解释是:如果改变其中一行的数字,会看见分类器在空间中对应的直线开始向着不同方向旋转。而偏差 b b b,则允许分类器对应的直线平移。需要注意的是,如果没有偏差,无论权重如何,在 x i = 0 x_i = 0 xi​=0 时分类分值始终为0。这样所有分类器的线都不得不穿过原点。

将线性分类器看做模板匹配:关于权重 W W W 的另一个解释是 W W W 的每一行对应着一个分类的模板(有时候也叫作原型)。一张图像对应不同分类的得分,是通过使用内积(也叫点积)来比较图像和模板,然后找到和哪个模板最相似。下图为CIFAR-10数据集的十个分类模板:

CS231n:图像分类数据驱动方法K-最近邻算法线性分类器

【注】:船的模板如期望的那样有很多蓝色像素。如果图像是一艘船行驶在大海上,那么这个模板利用内积计算图像将给出很高的分数。

偏差和权重的合并技巧:它能够将我们常用的参数 W W W 和 b b b 合二为一。一般常用的方法是把两个参数放到同一个矩阵中,同时 x i x_i xi​ 向量就要增加一个维度,这个维度的数值是常量1,这就是默认的偏差维度。这样新的公式就简化成下面这样:

f ( x i , W ) = W x i f(x_i, W) = Wx_i f(xi​,W)=Wxi​

CS231n:图像分类数据驱动方法K-最近邻算法线性分类器

图像数据预处理:在机器学习中,对于输入的特征做归一化(normalization)处理是常见的套路。而在图像分类的例子中,图像上的每个像素可以看做一个特征。在实践中,对每个特征减去平均值来中心化数据是非常重要的。

在这些图片的例子中,该步骤意味着根据训练集中所有的图像计算出一个平均图像值,然后每个图像都减去这个平均值,这样图像的像素值就大约分布在 [ − 127 , 127 ] [-127, 127] [−127,127] 之间了。下一个常见步骤是,让所有数值分布的区间变为 [ − 1 , 1 ] [-1, 1] [−1,1]。零均值的中心化是很重要的,等我们理解了梯度下降后再来详细解释。

继续阅读