CS231n-2017 Lecture2图像分类笔记
图像分类问题
定义:
在已有固定的分类标签集合的前提下,能够对输入的图像进行识别处理,从集合中找到该图像所对应的标签。
对于计算机而言,图像并非直观的图像,而是一个的像素集合,对于每个像素,其又有RBG三个颜色通道。因此,一张图片可以被认为是一个
的三维数组,数组内每个元素都是在
范围内的整型。而计算机图像分类的任务,就是将这样的一个三维数组映射到其对应的标签上
困难点:
Viewpoint variation:对于同一个物体,图片可能从多个角度来展现
Scale variation:由于摄影距离的远近、物体尺寸大小不同,物体的可视大小通常是变化的
Deformation:同一个物体可能以不同的形态出现,会发生形变
Occlusion:目标物体可能会被无关物体挡住,只有部分可见
Illumination conditions:光照会极大程度地影响同一个形状物品的RGB值
Background clutter:物体可能会混入背景中,难以被分辨
Intra-class variation:同一类物体的外观差异可能也会较大
流程:
1.输入:输入是包含N个图像的集合,每个图像的标签是K种标签的一种,我们把这个图像集合成为训练集
2.模型学习/训练分类器:使用训练集来学习每个标签具体长什么样
3.评价:使用分类器来给其从未见过的图像打标签,并以此正确率来评价分类器
Nearest Neighbor分类器
原理:
对于输入的图像,我们将其与训练集中的所有图像进行差异比较,找到与输入图像差异最小的图像,并将这个图像的标签作为输入图像的标签
差异的量化:
假设我们需要比较图片 和图片
,则我们先将这个两个三维数组分别展开成为向量
和
,然后将这两个向量的L1距离作为差异的量化标准,即
即将两个向量每对元素的差的绝对值求和
我们也可以选择L2距离作为量化的标准,即
L1与L2距离的使用情景其实并没有区分的很清楚,更多的是要实际去尝试哪个更好
缺点:
每次对输入图像进行预测时,如果图片的尺寸很大,像素很多(称为高维数据),则需要耗费大量的时间进行比较,这对使用带来了极大的不便,虽然这种缺点可以通过PCA降维的方法进行弥补(但PCA也只能够提取线性相关的主成分)。再者,仅通过像素来比较图像之间的差异是完全不够的,这更像是对图片按颜色分布进行分类,而不是按照图片的语义来进行分类
K-Nearest Neighbor分类器
对于上述的Nearest Neighbor分类器而言,只选1个最相近的图片可能会出现较大偏差,因此,我们可以选择k个最相近的图片,然后再在这k个图片中选出频数最高的标签作为输入图像的标签
优点:
选取更高的k值,可以使得分类的决策边界(在选取差异最小的图片的时候,相当于是寻找输入图片应当落入哪片合适的分类标签区间)更加平滑,对于异常点的处理能力更强,使得分类器针对测试数据的泛化(generalization)能力更好
但K-Nearest Neighbor分类器会存在一些空白区间,它不属于任何分类标签,这是由于这些区间内的点到多种标签的频数相同导致的
Hyperparameter:
对于上文提到的K-Nearest Neighbor分类器,其中出现了k这个参数,而这个参数是我们人为提前预设好的,不同的k值会影响分类器的正确率,以及对差异量化的距离函数的选择,是L1距离还是L2距离,都会影响分类器的性能。所有这些选择,被称为超参数(Hyperparameter)
超参数调优与验证集(validation set):
想要找到使分类器性能最好的超参数,通常的办法就是在一定范围内尝试多个不同的超参数的值,并验证它的好坏,那么关键问题就是如何去评价一个超参数的好坏
做法:
将数据集合分为三部分,分别是训练集(training set),验证集(validation set),和测试集(test set)
在训练时,我们使用training set进行训练,并使用validation set来对超参数进行调优,找到最合适的超参数,然后使用test set来检验分类器的最终性能,这样可以有效减少模型对训练集、验证集的过拟合现象
交叉验证:
当训练集数量较少时,(通常不用于深度学习),我们将训练集分为n份,第i轮训练时,我们按顺序地选取其第i份作为validation set,剩下的n-1份作为training set,来得到验证结果i,最后取i次验证结果的平均值作为模型的评价
优点是能够使用少量数据进行训练,缺点是会耗费大量的计算资源,因为需要训练的轮数变得很多