CS231n(1) Image Classification(图像分类问题)

传送门:2.Lecture 2 _ Image Classification_哔哩哔哩_bilibili

本博客基于斯坦福大学李飞飞的CS231n公开课程,记录自己的学习过程其中参考了一些其他的文章,都在最后附上。

一、图片分类问题

图片分类问题就是辨认输入的图片属于那个类别,如下图属于“猫。

计算机实际看到的是一个巨大的三维数字网格矩阵(RGB),图片的细微改变都会导致计算机所看到的数字矩阵发生巨大变化,比如:拍摄角度、拍摄光纤、猫咪的姿势、遮挡问题,但这仍是一只猫。数字矩阵的差异对计算机来说是一个具有挑战的事情。

def classify_image(image):
    #图片分类算法
    return class_label

二、数据驱动策略

2.1当前的挑战

对人来说,图片识别是很轻松的事情,但对于计算机来说,其接受到的是一个数据矩阵,对于同一类物体的图片,其所对应的数据矩阵差异巨大,有以下原因:

  • 观察角度的变化
  • 尺度变换 Scale variation:图片大小比例的变化也会使得数据发生改变。
  • 变形 Deformation:比如不同的图片中猫的伸展动作不一样,但其label都是“cat”
  • 遮挡 Occlusion:要被识别的物体可能被遮挡
  • 光线条件 Illumination conditions:环境光线的变化对物体的图片也会有很大的影响。
  • 背景干扰 Background clutter:如果物体和背景有很相似的颜色和纹路,那么就很难被识别
2.2一般流程

我们如何设计算法去分辨不同的类别呢?我们不会去设计一个特定的算法来解决这样的问题,而是将大量带有标签的数据送给一个模型,让模型自己学习,这种方式就成为数据驱动方法,因为它依赖于一个带有标签的数据集合。

一般的流水线如下:

        1.收集数据集(images-label)

        2.利用训练集对模型进行训练——>得到分类器

        3.在新的数据集上评估训练得到的分类器

三、最近邻域分类器 NN

训练复杂度:O(1)

预测复杂度O[N)     N是训练集的大小

缺点:预测成本太高

本次使用的数据集是 CIFAR-10,这是一个有名的公开图片数据集,由60000张 3*32*32的图片组成,一共有10个种类,一般我们将其中的50000张作为训练集,10000张作为测试集,下图就是10个类别的部分图片。

现在我们的训练集中拥有了5w张图片,每个类别有5k张。对于测试集中的每一张图片,分别和训练集中的每张图片进行相似度比较,其最后与最为相似的图片归为一类。

在最近邻域算法中,衡量两张图片相似度的标准是什么呢?

一种简单的方法就是L1距离(曼哈顿距离),即两张图片各个像素点的绝对值之和:

同时还有L2距离(欧氏距离):

我们希望我们的分类器在训练时可以相对慢一些,关键是缩短测试时间。因为当你进行部署该分类器在浏览器或手机等平台运行时,我们希望他的测试或预测速度是很快的。从这个角度来看最近邻居算法是有点倒退的。然而卷积神经网络模型更合适,他的训练时间更长,然后预测时间较短。

四、KNN

KNN不再是只寻找一个最近的邻居最为自己的类别,实际上寻上K个最近的邻居,选择不同类别下对应邻居数量最多的作为自己的类别

这里图片中的点表示训练集中的数据,一共有五个类别,分别采用NN和KNN算法进行训练得到的结果。

当K = 1时,就演变成了NN算法,其中中间的一个虚假黄点导致绿色簇中间出现了一个黄色的小岛,可能不是很好,实际上应该整片都是绿色的类别;后面的两个KNN算法(K=3、5)便消除了这一误差,更趋于平滑。

白色区域表示至少有两个类别的最大邻居数量是一样的,所以没有判别出该像素点属于哪一类别。

4.1 Hyperparameters(超参数)

超参数并不是通过训练模型得出来的,是我们在训练之前提前制定的。

如何选择超参数?

answer1:选择在训练数据上表现最好的超参数                     

只在拟合了训练集

这是错误的,这将会导致过拟合,我们的模型实际并不关心拟合我们的训练数据,实际最想得到的是在未见过的数据(野数据)上表现最好。


answer2:将数据分为训练集和测试集,选择在测试集上表现最好的超参数 

无法得到模型在野数据上的性能

相比answer1,这是一种更合理的策略,虽然我们通过测试集可能选择出来了最好的超参数,但是这时的test data不再是模型未见过的数据了,因此模型在测试集上的性能不能代表其在野数据(模型未见过的数据)上的性能。


answers3:划分为训练集、验证集、测试集

用训练集训练不同超参数下的模型,在验证集上选择表现最佳的超参数。现在完成所有开发后,将在验证集上表现最佳的分类器在测试集上运行一次,这就是模型最终在野数据上的性能。


answer4:k折交叉验证

假设进行5折交叉验证,即将训练集平均划分为5份,对于某个待验证的超参数,我们迭代使用其中的1份作为验证集,4份作为测试集,一共进行5次准确率的计算,将5次的结果取平均作为这个超参数的准确率。

在实践中会尽力避免使用交叉验证,因为这样计算成本太高。一般我们会选择训练集的 50%-90%作为训练集,剩下作为验证集,具体的划分和选择由训练集大小以及需要验证的超参数数量决定。

4.2 KNN优缺点

KNN优点是实现简单,只需要将训练集存储下来,实际分类器并不需要训练,在预测的时候只需要将图像与训练集的数据进行比较根据最相似的便可得出其label。

缺点是这将导致预测时间较长,输入的图像需要与训练集中的所有图像进行比对,预测时间与训练集大小呈正相关。我们实际希望的是训练时间可以比较长,但得到训练的模型后,预测时间越短越好。

前面介绍了图片识别问题的挑战,受图片的大小、背景、光线等因素,同样一个物体可能在像素表示上差异巨大,因此直接选取L1、L2距离作为相似度评判依据的KNN变得不准确了。

References:

码途拾遗CS231n:1 图像分类问题介绍

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值