CS231n lecture 2 Image classification

  • 为什么CNN在90年代就发明出来了,然而到2012年才开始火起来?
    1. deep learning 需要有很强计算能力的GPU,当时还不具备
    2. deep learning 还需要有非常大的数据集,比如打了标签的图片,但是当时90年代这些资源都很匮乏。
    3. 直到2010年的 datasets like Pascal and ImageNet 才有了相对大一些,质量高的带标签的数据集。

认真听cs231n,记下自己的理解以加深印象。

附上斯坦福官网笔记,每一课都有哦~

The image classfication pipeline:
  • input: 输入为一个包含N张图像的训练集,每张图像分别打了标签,属于K类中的一种。

  • learning: 我们的任务是使用这些训练集来learning(了解)每一个类是什么样的。这一步我们称之为训练一个分类器,或者学习一个模型。

  • evaluation: 最后,我们来评估分类器的质量,要求它预测一组以前从未见过的图像的标签。比较图像本身的标签与预测标签。

Nearest Neighbor Classifier
  • 这个分类器和CNN没有任何关系,并且实际上也很少应用。但是它给了我们一个很简单的方法思路去解决图像分类问题。
  • 这个分类器的原理是取一个测试图像,将它与训练集中的每一个图像进行比较,选出与它最接近的一个图像的类,作为预测结果。
  • 具体的比较步骤则是使用L1 distance 去计算两个图像中每一个像素点的差的绝对值。然后将它们全部加起来。官方笔记中有图例和代码。
关于 distance metrics L1 , L2

L1: d1(I1,I2)=pIp1Ip2
L2: d2(I1,I2)=p(Ip1Ip2)2

L1 vs L2:
It is interesting to consider differences between the two metrics. In particular, the L2 distance is much more unforgiving than the L1 distance when it comes to differences between two vectors. That is, the L2 distance prefers many medium disagreements to one big one. L1 and L2 distances (or equivalently the L1/L2 norms of the differences between a pair of images) are the most commonly used special cases of a p-norm.
L1 distance 依赖于你选择的坐标系。如果旋转坐标系,那么计算出的点与点之间的L1距离将会发生变化,如果使用L2距离将不会受到坐标系的影响。

K Nearest Neighbor

KNN 的原理很简单,对于测试的图像,我们不再寻找训练集中与它最接近的那个图像(NN)而是选取与它最接近的K个图像,然后对测试图像的label进行投票,哪一个label得票高(K个图像中属于哪个label的多),那么就将这个label作为预测结果。当K=1时,为NN,K越大,结果将会越平滑,对outliers也更加有抵抗性。(在笔记image_classification总结最后有KNN的具体实现步骤)

  • 那么我们如何确定这个 K 值呢?

    Validation sets for Hyperparameter tuning
    我们想要知道哪一个K值能得到最好的结果,此外,还有很多不同的距离函数可以供选择使用,比如L1,L2,dot product等等。这些选择我们称之为超参数

    那么如何确定这些超参数呢?很明显的建议就是去试不同的值,看哪一个结果最好。事实上我们也是这么做的。但是在试的过程中要特别注意,我们不能为了调整超参数而使用 test set!!! 否则你将会 overfit to test set. test set 是非常珍贵的,一定要留到最后再用,可以用来代表模型的通用性。

Evaluate on the test set only a single time, at the very end.

幸运的是有一个比较好的方法,并且根本不会touch test set.这个方法呢就是将训练集分为两部分,将数量很小的一部分作为 validation set。并且是使用validation set来调整 hyperparameter 的值。 最终在test set上测验这些值,并得出结果。

当你的 training set(therefore the validation set) 很小时,
我们就用一种更加细致的方法来调整超参数,叫做cross validation.(交叉验证的方法一般用于较小的的数据集,很少用在deep learning)下面上图~一目了然~
cross validation
We would then iterate over which fold is the validation fold, evaluate the performance, and finally average the performance across the different folds.

  • 在实际操作中,人们会避免 cross validation的使用,而更倾向于用一个 validation set。这是因为交叉验证在计算上是非常昂贵呢。however,这个也是依赖于很多因素的,如果超参数的数量很大,那么我们倾向于用一个更大的 validation set;如果validation set的中的例图很少,比如几百个左右,那么这时候我们用 cross validation 是一个更加安全的选择。一般典型的folds数量为 3-fold,5-fold or 10-fold cross validation。
Pros and Cons of Nearest Neighbor classifier.
  • 优点:它易于实现和理解。

  • 缺点:(1)Nearest Neighbor classifier 并没有花时间去训练模型,而仅是简单的存储和 index training data. 然而,我们把计算成本都花在了 test 上面,因为当分类一个测试图像时,我们需要将它与训练集中的所有图像进行比较。

实际上,我们更希望在 test 时有更高的效率,而并不在乎 training时的效率。今后我们要使用的深度神经网络就是在训练时会耗费大量时间,但是当训练一旦完成,我们可以很快将一个新的 test example 进行分类。

(2)在数据是低维时,Nearest Neighbor 或许是一个好的选择,而在实际图像分类中很少使用。一个原因就是图像是很高维的,它包含有很多像素,使用L2计算像素之间的距离在高维空间并不是那么直观。并且得到的相似性的差异和人们感知到的差距很大。上图解释~
similarity

这一组后三个图片计算出的L2 pixel diastance是相同的,我们意识到光靠像素之间的差异性来比较图片是完全不充分的!以此作为分类依据的话,我们可以得到和一个图片相近的原因很大程度上是依赖于整体的颜色和背景,而并不是 semantic identity。

Ideally we would like images of all of the 10 classes to form their own clusters, so that images of the same class are nearby to each other regardless of irrelevant characteristics and variations (such as the background). However, to get this property we will have to go beyond raw pixels!!!!

官网笔记的summary一定要看!!我就不copy到这里了,写的很精炼很好~

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值