斯坦福计算机视觉课程学习总结 -- 2.Image Classification pipeline

课程2和3简介

CS231n 视频课程2和3从图像分类要解决的原始问题及面对的困难为起点,引出第一个也是最直观的最近邻分类器(KNN),讲解KNN模型时,引入了模型的超参(hypeparameter)概念,进一步讨论如何选取超参时水到渠成的引出了数据集的切分和K折交叉验证法;接着在说明了KNN用于image classification中的缺陷后开始学习较为强大线性分类器(linear classifier),模型的调参过程中需要用损失函数(Loss function)来评价当前模型的输出和实际值之间的误差,课程中介绍了多类别的SVM Loss function和Softmax Loss function,然后通过两中Loss function的’bug’引出了正则化(Regularization)并且简单比较了L1正则化和L2正则化的特点,最后介绍了梯度下降法在模型优化中的使用,为下一节的BP算法做准备。
认真学习这两节课程之后,会发现以上提到的ML中的基础概念或方法都不是孤立的,它们都是在同一个问题的背景下,解决不同问题的理念和方法而已,这是两节课给我最大的收获。

图像分类问题中的核心任务

  • 给定图像,输出图像所属类别
    例如给出10张待分类图片,需要输出图片的类别是{‘cat’, ‘dog’, ‘car’},这个任务中,因为以下几方面的不同给图片分类带来巨大的困难:
  • 视角多样性(viewpoint variation)
  • 光照(illumination)
  • 主体形态变化(Deformation)
  • 遮挡(occlusion)
  • 背景干扰(background clutter)
  • 组间差异(intraclass variation)
    上述每个可能的问题课程中都有几种图片来生动描述,不理解的可以参考原课件。正是由于以上问题我们无法通过模型驱动方式去hard code实现分类算法的每一步来达到图像分类的目的,只能通过机器学习这种数据驱动模型来解决这个问题。

第一个分类器算法:KNN(k nearest neighbor)

KNN实际上是由最近邻(NN)扩展而来的,我们的问题是判断图像的类别,最直观的想法是通过计算输入图像和已有标记的每一张图像做比较,和哪一张最接近我们就可以认为这两张图片属于同一个类别的。所以NN模型面对的第一个难点就是如何衡量两张图片之间的距离,这里介绍了两种最简单的距离衡量方式:
- L1距离(曼哈顿距离) :

d1(I1,I2)=p|I1pI2p|

- L2距离(欧式距离):
d2(I1,I2)=p(I1pI2p)2

NN模型里面当我们把类别和最接近的一张图片相同换成类别和最接近的前k张图片投票结果相同时,就是大家熟知的KNN模型,即通过对距离排序,选出前k张图片,然后根据这k张图片的投票结果来确定输入图片的类别,KNN相较于NN模型,把输出结果有1张图片扩大到k张图片的投票结果,显然增加了模型的鲁棒性,但是同时也引入了超参数k,接下来的问题就是该如何选取超参数。

超参数(hypeparameter): 在机器学习的上下文中,超参数是在开始学习过程之前设置值的参数,而不是通过训练得到的参数数据

既然无法通过训练得到超参数,那我们就得想其他办法来选取最优的超参数,超参依赖于应用场景,通常需要遍历超参数后选取最合适的值,但是我们只有一套训练数据(模型训练前期,请忽略测试数据集的存在),该如何比较不同超参的模型结果,这里就引出了数据集的划分,即将原始的training set按比例划分为train set, test set和validation set,这部分思考过程如下图:
斯坦福计算机视觉课程学习总结 -- 2.Image Classification pipeline

实际应用中,image classification为什么没有使用KNN?

先给出KNN在图像分类场景中的缺点:

  1. 预测/分类阶段耗时长;
  2. 图片之间的距离计算方式无法利用图片像素级别的信息;
  3. 高维难题;

首先,思考对一张图片进行分类的KNN算法步骤,假设给定带标签的样本集图片有m张,KNN的过程主要有:

  1. 计算输入图片和样本集里每张图片的距离;
  2. 将m个距离排序;
  3. 选取前k个最小距离对应的k张图片;
  4. 输出图片的类别为这k张图片类别投票的结果;

可见每分类一张图片,就需要循环计算新图片和m张图片的距离,即在预测过程中的时间复杂的时O(m),模型训练过程中因为只需要保存m张样本集图片的数据,所以时间复杂度为O(1),而对于实际问题,我们更需要的是预测过程时间尽量短,在训练阶段可以接受较长的耗时。
其次,无论L1或是L2距离,两张图片之间的距离是由所有像素一起影响,即所有像素都有相同的权重,这会导致部分像素明显不同的图片仍然具有相同的距离,如下图中所有图片都和最左侧的图片有着相同的L2距离。
斯坦福计算机视觉课程学习总结 -- 2.Image Classification pipeline

综上,KNN并没有实际应用于image classification问题中,但这也不妨碍KNN是我们应该学习的第一个分类器,现在看来它是面对这类问题最直观的也最简单的解决方法,岂知这也是多少智者的心血。
洋洋洒洒本文已经这么多内容,线性分类器及其优化就放到下一篇吧!