[关闭]
@K1999 2016-09-22T01:39:57.000000Z 字数 3217 阅读 1333

Stanford CS class CS231n Notes(Two):Image Classification

深度学习 CS231n

原文地址:http://cs231n.github.io/classification/#summaryapply

Intro to Image Classification

图像分类问题:已有图片的分类标签集合,当有新读入的图片时,能够从分类标签库中找出该图片对应的分类标签。这是计算机视觉领域的核心问题之一。
举例:以下图为例,图像分类模型读取该图片,并给出该图片属于下列标签库{cat, dog, hat, mug}中各个标签的概率。对于计算机来说,图像是一个由数字组成的巨大的3维数组。在该例中,猫的图像宽248像素,高400像素,有3个颜色通道(红、绿和蓝,简称RGB)。因此,该图像就包含了248 X 400 X 3 = 297600 个数字,每个数字都范围在0(黑色)~255(白色)之间的整型数。分类模型的任务就是把这些上百万的数字转换成一个标签,比如“猫”。
这里写图片描述
面临的问题
视角变化(Viewpoint variation):对于同一个物体,摄像机可以从多个角度来拍摄。
大小变化(Scale variation):根据观察点的不同,看到的物体的大小也不一样。
形变(Deformation):在某些条件下,物体会发生形变。
遮挡(Occlusion):对于所研究的物体有可能被挡住。有时候只有物体的一小部分(可以小到几个像素)是可见的。
光照条件(Illumination conditions):在像素层面上,光照的影响非常大。
背景干扰(Background clutter):研究的物体可能混杂在所处的背景之中,使之难以被辨认。
内部类的变化(Intra-class variation):同一类物体的个体之间的外形差异很大,比如椅子。这一类物体有许多不同的对象,每个都有自己的外形。

数据驱动方法:可以采取教孩子根据图片识别物体同样的方法,给计算机许多的图像和其对应的类别,然后研究学习算法,使计算机学会每个外形对应的类别。这种方法就是数据驱动方法。

图像分类流程:图像分类就是为数组元素为图像像素的一个矩阵(矩阵描述了一幅图)赋予一个分类标签。完整的流程如下:

  1. 输入:输入包含N个图像的集合,每个图像的标签是类别集合中K个分类标签中的一种。该集合称为训练集。
  2. 学习:我们的任务是使用训练集来学习每个类到底是什么样的。我们一般将该步骤称为训练分类器或者学习一个模型。
  3. 评估:最后,用训练出来的分类器,预测一个新的图像集合,并以此来评估分类器的的质量。将分类器预测的标签和图像真正所属的标签作对比。

Nearest Neighbor Classifier

首先介绍一下最近邻分类器,该分类器和卷积神经网络没有关系,实践中也很少使用,但是通过实现它,可以让我们对于解决图像分类问题的方法有个基本的认识。
示例分类数据集:CIFAR-10。这是一个非常流行的数据集(下载地址),该数据集包含了60000张32X32的小图片。这60000张图片被分成了10类(如飞机、手机、鸟等),包含50000个图片的训练集和10000个图片的测试集。如下图所示10个类别随机展示几张图片:
这里写图片描述

左边:CIFAR-10 dataset数据集中的图像样本。
右边:第一列是一些测试图像,后边跟着的是我们根据像素差值计算出来的在训练集中和该测试图像最相似的10张图片。

假设现在我们有CIFAR-10图像集的50000张图片(每种分类5000张)作为训练集,我们希望将余下的10000作为测试集并给他们打上标签。Nearest Neighbor算法将会拿着测试图片和训练集中每一张图片去比较,然后将它认为最相似的那个训练集图片的标签赋给这张测试图片。
Nearest Neighbor算法具体比较两张图片的方法:在CIFAR-10的图像中,比较32x32x3的像素块。最简单的方法就是逐个像素比较,最后将差异值全部加起来。换句话说,就是将两张图片先转化为两个向量,然后计算他们的L1距离:


这里的求和是针对所有的像素。
具体的方法如下图所示:
这里写图片描述
两张图片使用L1距离来进行比较。逐个像素求差值,然后将所有差值加起来得到一个数值。如果两张图片一模一样,那么L1距离为0,但是如果两张图片很是不同,那L1值将会非常大。

距离选择:计算向量间的距离有很多种方法,另一个常用的方法是L2距离,从几何学的角度,可以理解为它在计算两个向量间的欧式距离。L2距离的公式如下:


换句话说,我们依旧是在计算像素间的差值,只是先求其平方,然后把这些平方全部加起来,最后对这个和开方。
L1和L2比较:比较这两个度量方式是挺有意思的。在面对两个向量之间的差异时,L2比L1更加不能容忍这些差异。也就是说,相对于1个巨大的差异,L2距离更倾向于接受多个中等程度的差异。

k-Nearest Neighbor Classifier

之前的Nearest Neighbor分类器只用最相似的1张图片的标签来作为待测试图像的分类标签,这样准确率并不高,用k-Nearest Neighbor 分类器就能做得更好。
KNN的思想:找最相似的k个图片的标签,然后让他们针对测试图片进行投票,最后把票数最高的标签作为对测试图片的预测。所以当k=1的时候,k-Nearest Neighbor分类器就是Nearest Neighbor分类器。从直观感受上就可以看到,更高的k值可以让分类的效果更平滑,使得分类器对于异常值更有抵抗力。
这里写图片描述

左边是原始数据,中间是Nearest Neighbor分类器的分类结果,最右边是5-Nearest Neighbor分类器的分类结果。
图像中的2维的点共分成3类(红、蓝和绿)。不同颜色区域代表的是使用L2距离的分类器的决策边界。白色的区域是分类模糊的例子(即图像与两个以上的分类标签绑定)。需要注意的是,在NN分类器中,异常的数据点(比如:在蓝色区域中的绿点)制造出一个不正确预测的孤岛。5-NN分类器将这些不规则都平滑了,使得它针对测试数据的泛化能力更好。注意,5-NN中也存在一些灰色区域,这些区域是因为近邻标签的最高票数相同导致的。

在实际应用中,大多使用k-NN分类器。如何确定KNN中的K值呢,通常是通过针对每个K值进行交叉验证,找出预测效果最好的那个K值。

Pros and Cons of Nearest Neighbor classifier

优点:首先,Nearest Neighbor分类器易于理解,实现简单;其次是 算法的训练不需要花时间,因为其训练过程只是将训练集数据存储起来。
缺点:测试数据要花费大量时间计算,因为每个测试图像需要和所有存储的训练图像进行比较。

Nearest Neighbor分类器在某些情况下(如数据维度较低),可能是不错的选择。但是在实际的图像分类工作中,很少使用。因为图像都是高维度数据(他们通常包含很多像素),而高维度向量之间的距离通常是反直觉的。
这里写图片描述

上图中,右边3张图片和左边第1张原始图片的L2距离是一样的。很显然使用KNN得到的结果和感官上以及图片的语义是不同的。

这里写图片描述

上图将CIFAR-10的图片进行了二维排列。排列相近的图片L2距离小。可以看出,图片的排列是被背景主导而不是图片语义内容本身主导。

Further Reading

MARK一下,以后需要的时候看看。
A Few Useful Things to Know about Machine Learning,第六节和本文内容相关,但是全篇文章都推荐阅读。
Recognizing and Learning Object Categories,ICCV 2005上的一节关于物体分类的课程。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注