[CS231N]Lecture_2:Image Classification Pipeline

Notes

在这里插入图片描述

之前已经大致了解了计算机视觉和其发展历史,本节将深入了解这些算法,以及最大程度上知道这些算法是如何work的。

在这里插入图片描述

在这里插入图片描述

本节课所包含的内容**:K最邻近分类器、线性分类(SVM,Softmax)和两层的神经网络**,用来提取图像特征。

在这里插入图片描述

Numpy的使用 使得可以 向量化操作

在这里插入图片描述

Google Cloud提供了GPU的虚拟机。

在这里插入图片描述

图像分类是计算机视觉的核心任务

在这里插入图片描述

图片是由数字矩阵组成的。 Semantic gap

算法需要对下面这些变化鲁棒,包括 : **摄像头视角改变 , 光照变化(Illumination) , 变形 , 遮挡 , 背景混乱 , 类内差异 ** etc

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

如何设计计算机处理这些富有挑战的问题?与人相比,计算机的优势就是处理起来特别快

在这里插入图片描述

Input:Image,Output:class_label。

在这里插入图片描述

之前的研究者尝试写出一组硬编码的规则来识别不同的动物,但是这种方法不太好,一方面是因为很容易出错,另一方面 是需要对每个识别的目标都提出一套规则。

在这里插入图片描述

所谓的Data-Driven Approach 是指 : 不去写具体分类规则来识别一只猫/鱼 ; 用网上的 图片去训练model分类这些图片,机器会根据土坯van总结生成一个model识别出不同的目标。classifier : 分类器 ; 两个函数 , 训练函数(输入图片和label,输出model)和预测函数(输入model,识别图片)。

在这里插入图片描述

上面是最近邻的算法,核心思想:训练函数的目的是 记录所有的数据和各自的标签 . 预测函数的目的是预测和训练图片最相似的标签

在这里插入图片描述

总共10类 , pixel : 32*32 。

在这里插入图片描述

最邻近分类器的类别效果,右图左边是输入,右边是输出最相近的图片,大部分是正确的但是还是有错误的。

在这里插入图片描述

上面最近邻的算法有个问题是:如何计算两张图片的相似程度。这里有一些函数可以计算:L1是曼哈顿距离 , Distance Metric 是为了比较两幅图的相近程度的方法 . 最后absolute代表取绝对值 .

在这里插入图片描述

这是最近邻分类器的完整代码,train函数只是记录所有图像,训练函数这里计算了L1的距离再所有图像中,输出最小的那张图片。

在这里插入图片描述

中间训练函数只存储数据

在这里插入图片描述

最近邻分类器 : 直接将需要预测的数据和训练数据比较 , 输出最近的label即可 ,使用Python和numpy的好处在于,仅仅一两行代码就能实现向量化的。

在这里插入图片描述

这里有一些问题,第一个问题是如果分类N个,训练和测试的速度多快:训练是线性的,预测也是线性的,需要和整个数据做对比,所以非常慢。

在这里插入图片描述

在这里插入图片描述

这种方法非常落后,因为**我们希望训练过程比较慢,而预测过程比较快。**因为训练过程是在数据中心中完成的,它可以担负起很大的计算量,从而训练出一个比较好的训练器;但是将测试model部署后,希望计算量很小,能够快速进行。

在这里插入图片描述

上图是最邻近的决策区域,2D的分割其实包含和能处理的信息是非常受限的。 可以看到**中间的噪声点(来自train data的噪声点)**干扰了整个模型

在这里插入图片描述

由最邻近算法产生K邻近算法(KNN),它不只是找最近的点,在距离上加权进行投票。 K=1相当于最邻近算法,所以最邻近相当于K邻近的一个特例。对噪声相对鲁棒

这里白色区域代表:这个区域没有获得KNN的投票。 上图表示K越大,其实越平滑。

在这里插入图片描述

在这里插入图片描述

上图是KNN的效果,可以看到效果不是很好。 KNN相比与最邻近算法,其对噪声是鲁棒的。

在这里插入图片描述

KNN还有一个问题是距离函数怎么选择来表示不同图片的区别,**不同的距离函数会对你预测的空间里底层的几何或拓扑结构做出不同的假设。**L2其实是一个⚪,L1是一个方形,也就是说L1距离取决于坐标系,坐标系变换距离也会变化,但是L2距离不会随着坐标系的改变而变换。 如果你的输入特征向量中的一些值有一些重要的意义,你可以选择L1距离,如果它只是某个空间中的一个通用向量,你不知道不同的数值代表什么意义,那么L2距离可能更合适一些。

KNN不仅可以处理图片数据,还可能处理文本、语音和各种各样的数据,不同的是你需要指定一个距离函数去衡量两句话之间的距离,不同的距离函数可以让你的model适配到各种各样的数据类型中去。

在这里插入图片描述

不同的距离函数其实由很大区别。

在这里插入图片描述

这里有一个网页的演示方法可以展示相关的效果。

在这里插入图片描述

对于算法本身有两个超参数需要你自己选择,K和距离函数。所以现在的问题是如何根据的问题和数据来选择这些超参数。它不能从数据中学习得到,需要认为手动设置。

在这里插入图片描述

在这里插入图片描述

最可能想到的是(不一定正确):选择能对你的训练集给出最高准确率的超参数。这其实是一个很糟糕的想法,千万别这样做;

在这里插入图片描述

训练数据集和真实测试数据集的问题。你在上面选择的 “训练集给出最高准确率的超参数” 只会让它在已知数据集上表现很高的准确率,但是不能在未知的数据上表现同样的准确率,即我们关心的并不是拟合训练集,而是想让我们的分类器在训练集以外的数据上表现更好

在这里插入图片描述

在这里插入图片描述

将数据集分为train data和test data,在train data上使用不同的超参数来训练算法,然后将训练好的分类器用在test data上选择一组在test data上表现最好的超参数。

这种方法也很糟糕,千万别这样做,因为这种方法表示选择了一组超参数,让model在这种test data上表现最好,但是无法代表在全新的未知数据上的表现

在这里插入图片描述

最常见的将数据分为:train data,validation data ,test data。用大部分的数据作为train data,在训练集上用不同的超参数训练算法,在validation data上评估,然后选择一组在validation data上表现最后的超参数。最后将这组超参数咋test data上测试,得到最终的模型效果,即论文上的model数据。 很多最research的时候,可能在最后一刻写论文的时候才能拿到test data 。

在这里插入图片描述

设置超参数的另一个方法是:交叉验证。这种方法在小数据集上比较常用。 这种方法其实训练了很多次,在深度学习中训练大型数据本身就要消耗很多算力,所以在深度学习中并不太常用。

在这里插入图片描述

交叉验证得到的图。 可以看到大概K=7对于这个数据是最好的。 任何做ML的问题都要画这样一个图,从而看算法的表现和超参数的关系。
在这里插入图片描述

KNN的问题如上,测试非常慢,而且L1和L2这种距离函数在图像上不太合适

在这里插入图片描述

KNN在图像上会带来维数灾难。指数被的数据需要去训练model从而能覆盖整个空间,高维下需要训练数据指数被的增长。

在这里插入图片描述

上面是KNN的总结。

在这里插入图片描述

线性分类是一种非常简答的方法,但同时对于建立神经网络和整个卷积网络来说非常重要

在这里插入图片描述

通常将搭神经网络比喻为堆乐高,你拥有不同种类的神经网络组件,可以将这些组件组合在一起来构建不同的大型卷积网络线性分类是在不同类型的深度学习应用中最基本的构建块之一

在这里插入图片描述

这里输入图片,输出描述图片的句子。
在这里插入图片描述

这里有一个卷积神经网络CNN只关注图像,一个循环神经网络RNN只关注语言。这里将两个网络放在一起训练。
在这里插入图片描述

在这里插入图片描述

线性分类器 是参数模型中最简单的例子;输入图像为x,参数设置或者是权重为W,输出10个类别。 在KNN的训练器中通常是保存所有的训练数据,这里参数化的方法是想总结我们对训练数据的认识并把所有知识都用到这些参数W中,从而不需要原始的数据,让test更快。

在这里插入图片描述

深度学习中整个描述是关于函数F,正确的结构,以及不同F组合权重W和数据X;,最简单的组合方式就是一个线性分类器:F=W*X

在这里插入图片描述

上图的关系式分解出了函数的 维度,最后的输出是一个10*1的列向量,上面的数值代表10个类的分数。

在这里插入图片描述

有时会有一个bias b,他是10元素的常数向量,它不与训练数据交互,只会给我们一些数据独立的偏好值

在这里插入图片描述

一个简单的例子,输入的是2*2的图像,但是这个W是如何得到的呢

在这里插入图片描述
在这里插入图片描述

上图下面是各个类别的W参数可视化效果。 可以看到这种方式是非常受限的,因为它局限了image的特征(如轮廓,颜色等)

在这里插入图片描述

线性分类器的另一个观点是回归到图像作为点和高维空间的概念。 即 图像是高维空间中的一个点,线性分类器的作用就是在线性决策边界上尝试画出一个线性类别

在这里插入图片描述

如果是从高维空间的角度来看,那么线性分类器有很多的问题。 上图是几种人为构建的情况。 没有办法通过简单绘制一条直线去分类数据。 这也是线性分类器的困境。 线性分类器也能以解决多分类的问题(上图最右侧小图)。

在这里插入图片描述

这节课中并没有说如何选择一个正确的W,以及函数的形式。

在这里插入图片描述

没谈到的内容下节课会说,还有一些其他的东西:选择正确权重的算法和策略,以及相关的损失函数、最优化甚至是卷积的概念。;ConvNets就是卷积神经网络CNN的意思

Conclusion

1 . 关于model的大小

一些机器学习的算法 , 包括深度学习的方法 , 本质上来说是在记录训练数据 , 也就是说将训练数据的特征提取出来然后再预测时和输入处理后的特征进行比较 , 所以一个好的特征提取器应该能有效的提取数据的特征 . 所以如何看到训练函数生成的model的大小?

2 . 关于距离函数的选择的问题

KNN还有一个问题是距离函数怎么选择来表示不同图片的区别,**不同的距离函数会对你预测的空间里底层的几何或拓扑结构做出不同的假设。**L2其实是一个⚪,L1是一个方形,也就是说L1距离取决于坐标系,坐标系变换距离也会变化,但是L2距离不会随着坐标系的改变而变换。 如果你的输入特征向量中的一些值有一些重要的意义,你可以选择L1距离,如果它只是某个空间中的一个通用向量,你不知道不同的数值代表什么意义,那么L2距离可能更合适一些。

3 . 关于train data,validation data ,test data

最常见的将数据分为:train data,validation data ,test data。用大部分的数据作为train data,在训练集上用不同的超参数训练算法,在validation data上评估,然后选择一组在validation data上表现最后的超参数。最后将这组超参数咋test data上测试,得到最终的模型效果,即论文上的model数据。

4 . 关于超参数

有些人会在得到比较好的超参数之后,重新训练整个model,使得这个model的效果进一步提高。但是这里要分析超参数设model之间是否有本质的联系,如果没有的话,这样重新train是可以得到更好的model的。如果是数据在model上适配了超参数,那这样做可能没什么效果。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

GRF-Sunomikp31

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

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

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

打赏作者

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

抵扣说明:

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

余额充值