【CS231n 学习笔记】Lecture2:Image Classification Pipeline (上)

这篇博客详细介绍了图像分类任务的挑战,包括语义鸿沟、视角变化等问题,并探讨了早期的特征检测方法和数据驱动的图像分类器。重点讲解了最近邻分类器、KNN算法以及它们的优缺点。内容还涵盖了卷积神经网络(CNN)在解决这些问题上的优势,以及训练和测试过程中如何选择合适的超参数。此外,讨论了交叉验证在参数调优中的作用,以及K值选择对分类性能的影响。
摘要由CSDN通过智能技术生成

CS231n学习笔记目录(2016年Andrej Karpathy主讲课程)


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

分类问题的难点

semantic gap(语义鸿沟问题)

在计算机中,例如一张猫的图片,大致由一个300*100*3的三维数组表示,3表示RGB通道,因此表单中的数字都位于0~255之间,反映的是亮度以及每个单点三基色的权值。因此图像分类的难点在于想要处理这些表单中数以百万计的数字并对其进行分类是很困难的。

Viewpoint Variation(视角变化)

相机是可以进行旋转、缩放、平移等操作的,这些变换都能让图片具有不同的样式。

Illumination(光源)

光线对图片的亮度有很大的影响。

Deformation(形变)

例如猫的而图片也会有许多不一样的形状、姿势的改变。

Occlusion(遮挡)

例如躲在窗帘后的猫、藏在沙发里的猫。

Background Clutter(背景干扰)

检测物体可能融入背景中。

Intraclass Variation(类内差异)

一类物体的个体之间的外形差异很大,比如猫有420种类别。这一类物体有许多不同的对象,每个都有自己的外形。

An Image Classifer

在CV发展初期,人们尝试通过特征feature来识别物体,例如我们想要识别一只猫,就要找到猫的耳朵,需要检测并勾画出图片的边界,按照边界形状与连结方式进行分类。但是,如果我们要识别其他的东西,比如人或者船,就需要重新去构造特征。因此这种分类方法无法扩展。

随着互联网的发展和数据驱动的到来,我们很容易获得海量的数据,我们可以实现:

1、收集带有标签的图像数据集;

2、使用机器学习模型去训练一个图像分类器;

3、在测试集或者验证集上评估模型。

First Classifier:Nearest Neighbor Classfier

NN分类器,工作方式是高效的得到本联合训练集,在一段训练时间内,我们只需要记住所有的训练数据及其标签,对于一张新的图片,我们要做的就是对测试图像和之前看过的每一张训练集中的图像进行一一对比,然后传送相应的标签。

案例:CIFAR-10数据集

包含10个类别,50000张训练图片,10000张测试图片。

NN的速度取决于训练数据集的大小吗?

事实上,当训练集的数据量增加时,训练的速度是线性增加的(slower),因为在训练的过程中是独立地比较每一个训练样本。但在实践中,测试时间性能通常更为重要。因为真正在乎的是实际应用的过程,我们需要权衡投入到训练过程和测试过程中的计算量。NN算法在训练上是instant(即时的),但在测试时是expensive(昂贵的),CNN却完全相反,它在训练上是昂贵的(expensive training),但在测试上是廉价的(cheap test evaluation),因为每一张测试图像的计算量都是恒定不变的。

提高分类器速度的方法

近似最近邻搜索ANN(Approximate Nearest Neighbor)

KNN(k-Nearest Neighbors)

超参数的选择

距离度量的方法

曼哈顿距离:       

欧氏距离:          

K值的选取

KNN算法,将找到K个最邻近的images,然后将他们在类别中进行投票,将多数的作为该测试实例的类别。一个好的KNN算法要做的是,在训练集中检索到K张最相近的图像,然后对他们的标签进行投票。

例如在一个二维的共三个类别的数据集中(下图左),用NN进行分类,计算每一个点所属的类别(下图中),图中蓝色区域中有一部分属于绿色的,当K变大时(如K=5),则会发现分界线开始变得平滑(下图右),绿色区域也被蓝色区域覆盖,泛化能力更强。这里有一个问题,K=1的时候就是NN算法吗?

Accuracy

NN on training data:理论上100%(欧氏距离),因为在所有训练集中我们总能找到距离为0的点。

KNN on training data:可能不会是100%,因为即使有着最好的样本,附近的点也可能被其他类别覆盖(与超参数有关)

事实上无法确定最优的参数组合。有一个思路是对大量不同的参数进行试验,然后选取最好的。一个错误的想法是:认为测试集是算法泛化程度的代表。我们不应该只相信测试集,事实上,应该忘记所测试过的数据,假装没有这些数据,然后获取算法对于其他数据的泛化程度,也就是获取算法能够扩展到其他的适用范围、运用到实际工作中的表现(不仅仅是在训练和测试当中)。有时候算法在训练中的表现很好,但在测试集上不好,这就意味着泛化能力不够,也就是过拟合(overfitting)。拟合程度的选择会影响到分类器的泛化能力。

交叉验证

将训练数据平均分成n份,将其中的某一份当作验证数据来调整参数,其余部分作为训练数据,最终对比不同K值下验证集的平均准确率,来得出K的最好结果。如果训练数据很少,可以使用n折交叉验证。也就是将n份数据集分别作为验证集,进行n次训练,选最好的。

下图是5折交叉验证中K值确定的过程,横坐标为K,纵坐标为准确率,因此每一个K对于了5个准确率。图中画了一条线连接每一个K对应的平均准确率,竖线表示标准偏差。一开始随着K的增加,平均准确率开始上升,但在某些点之后就开始下降,在K=7时达到最大。

Problems

不同的数据集所适合的分类方法都不同,KNN在实际中一般不会被采用,因为:

  • 测试效率很低;
  • 距离指标(distance metrics)在高维物体判断上会非常不直观(unintuitive)。

比如下面的高维图片,第二张图片在原始图片的基础上有所偏移(往左和往下移动了),因此这张图片和原始图像在像素上完全不匹配,这在距离计算上就会产生误差;第三张图片将重要的部位剔除了,第三张将图像整体变暗,KNN无法将这些变化分辨出来。因此在这种情况下想要通过距离来进行高维物体判断,就会很不直观。

(纯学习分享,如有侵权,联系删文) 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Panpanpan!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值