2.图像分类:数据驱动方法

图像分类的基本任务就是区分图片的种类,例如将狗,猫,火车,飞机等区分开来。在这之前我们需要将图片转换成一张巨大的数字表单,然后从所有种类中,给这个表单选定一个标签。

image.png

在计算机中,这张图片就是一张巨大的数字表单。可以大致由一个3001003的三维数组表示,这里的3来自于图片红绿蓝三色道,所以整个表单中包含的数据都是出于0-255之间的。这些数字反映的是亮度以及每个单点三基色的权值。
image.png

因此,图像分类难点在于,当你想要处理这表单中数以百万计的数字,并对其进行分类,这个问题是相当复杂的,另外,相机是可以进行旋转和缩放的,并且旋转、平移、聚焦点选取等操作都会让图片样式不同,再考虑一下相机亮度的调整,这些所有的相机调整会使图片看起来完全不一样。我们对所有这些调整都具有鲁棒性。
image.png

还有一些其他挑战,例如光线问题。这里可以看见有一只很长的猫,但其实图片中有两只,另一只很难看清。一只猫光线很好,可以很容易识别,另一只光线很差,但两只猫都是可辨别的。
image.png

还有形变的问题,许多种类的东西即使会以奇怪的形态呈现在图片中,也要求能被检测出来。
image.png

还有遮蔽问题,有时我们不能看到物体的全貌,但是我们依然能辨别出来物体,即使我们只能看到所判别种类的10%的部分。
image.png

还有背景杂斑的问题,要检测的物体可能融入背景之中。
image.png

还有同类演变的问题,猫类中有420种猫。
image.png

图像分类器是什么样子的呢?我们构建一个三维空间,将x轴上的值定为种类标签值,没有任何一种显式的编程方法能实现这样的分类器。

image.png

有一种方法是,我们要找到猫的小耳朵,以此来找猫。因此我们要做的是检测并勾画出图片的边界,按照边界形状与连结方式进行分类,这会让你学到这类东西的“样本集合”,我们可以尽量找到他们的各种形态,我们看到任何像猫的耳朵,我们便认为检测到猫,或者如果我们检测到猫的某些结构特征,一定程度上,我们可以认为检测到猫了,你也可以设定一些别的规则。但是比如识别船或者人,很难想象船到底有啥明显特征,船的边界又是啥。这是不可扩展的分类方法。
image.png

我们在机器学习的框架中经常采用的数据驱动的方法效果更好。据训练集训练一模型,用这个模型对测试数据进行分类。API变成这样,写一个函数,不仅仅是输入图片然后识别她是一只猫,我们会有两个函数,一个是训练函数,这个函数接收图片和标签,然后输出模型。另一个是预测函数,接收一个模型,对图片种类,进行预测。
image.png

近邻算法分类器:

  • 在训练机器的过程中,我们什么也不做,只是单纯记录所有的训练数据。
  • 在图片预测的阶段,我们用一些新图片去在训练数据中寻找与新图片最为相似的图片,然后基于此来给出一个标签。


    image.png

eg:一个叫做CIFAR-10的数据集,有10个类别,50000张训练图,以及10000张测试图用来评估分类器工作的好坏。

image.png

近邻算法分类器将那些提供给我们的50000张训练图像全部得到,现在的测试是假设我们这里有10个不同的例子,这些是第一列的测试图像,我们要做的是:在训练集上寻找一个与这些图像中的每一个独立对象最相似的近邻,所以你看到的是已经分类好的图像列表,这一列表显示的是在训练数据中,和那10个类别最相似的每一种测试图像。

image.png

在第一行中我们能看到有一个卡车,但可以看到第一个识别的结果实际上是马而不是卡车,这是因为处理时图像中的蓝天被丢弃了。所以你可以看到可能工作结果不是那么的准确。
如果给出两张图片,我们该怎样对它们进行比较,
可以用曼哈顿距离法 或L1距离,该算法的内容是你有一个测试图像,你对分类感兴趣,并且认为我们需要一个单一的训练图像来比较该图像,基本上我们需要做的就是对图片中的单个像素进行比较。所有的像素值,形成绝对值的差,然后我们将差值全部相加。
假设这些图片是4*4大小的,就是说只要观察每一个像素的位置,得到同一个空间位置的像素差,将其全部相加就得到了相似性。因此得到这两幅图相距456,因此在这两幅图像中会有456处不同,如果用相同的图片这里会得到0.
image.png

近邻算法分类器:训练过程时间复杂度O(1),测试过程O(N),这是不好的,我们想要的分类器是测试快,训练慢的。
image.png

另外一个度量叫做欧氏距离或L2距离,欧氏距离不是计算绝对值差的和,而是计算这些图像间差值的皮平方和。

image.png

你可能感兴趣的:(2.图像分类:数据驱动方法)