【cs231n】图像分类K最邻近算法和线性分类器

本文基于斯坦福cs231n课程,更多详细笔记[0]

图像分类遇到的问题

  • semantic gap 语义鸿沟,人看到的是一张图片,但是计算机看到的是数字矩阵
  • viewpoint variation 视角不同,看到的内容不同
  • Illumination 照明问题
  • Deformation 变形问题
  • Occlusion 遮挡问题
  • Background Clutter 比如猫身上的条纹和背景很像
  • Intraclass variation 类内差异问题,猫有不同的大小颜色等

很难直接写代码来判断是什么对象

image-20220424130422953

数据驱动的方法

  1. 图像数据集的集合
  2. 使用机器学习方法训练分类器
  3. 在新图像上评估此分类器

K-最近邻算法分类

通过比较图像之间的差异进行分类,并通过像素比较差异。

首先,通过训练函数简单地记住所有的训练数据。每次输入一张图片进行预测,都会遍历记忆的训练数据,找到最接近的图片,根据最接近的图片的类别对输入的图片进行预测。类别。

image-20220424174048469

训练的复杂度:O(1)

预测的复杂度:O(N)

这是一个糟糕的结果,因为该算法在训练时很快,但在实际进行预测时却很慢,这与我们最初的意图完全相反。

K最邻近

如果只计算最近的图像,就会有缺点。例如,在下图中,绿色分区中有一个黄色点。因为只计算最近的点,所以将为该区域选择黄色点。

所以K最邻近算法是找到最近的K的点,然后在这些邻近点中进行投票,然后这些票数多的临近点预测出结果,实现这个算法的方式有很多,比如将距离进行加权,但是最简单的还是进行多数投票,临近点中哪个类别最多就确定为哪个类别。

image-20220424120101855

当k=3时,图中的黄色噪点不会导致周围的区域划分为黄色了,决策边界也将随着K的增加而被平滑掉。图中的白色区域代表在这个区域中没有临近点,即没有进行分类。

衡量距离的两种函数

曼哈顿距离(L1)和欧氏距离(L2)

L1距离取决于选取的坐标轴,如果你旋转坐标轴,那么L1距离可能改变,但是L2距离不会改变。所以,如果你输入的向量值有一部分有一些重要的意义,那么L1可能更合适,如果只是空间中的通用向量,没有什么意义,那么L2可能更自然一些。

image-20220424115725935

超参数的确定

超参数:K和距离测量方式

q:什么时候L1比L2好?

a:需要根据实际问题来看,最佳的方法时两种都尝试一下

错误的判断方法:

  1. 不区分测试集和训练集,选择表现最好的超参数进行整体训练
  2. 训练后,在测试集上使用,调整参数,选择在测试集上表现最好的超参数。缺点:遇到一组新数据时可能会失效

正确方法:

它分为三个部分,训练、验证和测试。在验证数据集上选择合适的超参数,最后可以使用测试数据集

image-20220424113636191

或者使用交叉验证,但是这种方法在深度学习中不是很常见,因为训练数据本身非常耗费资源,而交叉验证需要额外训练几次,非常耗费资源

交叉验证的思想是将测试数据集平均分成若干份后的数据,每次选取其中一份作为验证数据集,其余作为训练数据集。这样,多次训练得到最优参数。

image-20220423220722353

测试集是否能很好地代表真实世界的数据?将收集到的数据随机分为训练集和测试集。

knn不会被使用,它的测试时间很长,使用L1或L2这种向量化的距离衡量方式不适合表示图像之间的视觉相似度,例子:

维度灾难,所需样本数量呈指数增长

总结:

  • 在图像分类中,我们使用训练数据集,包括图像和标签,我们需要在测试数据集上预测图像的标签
  • KNN分类器预测标签基于最近的训练样例
  • 超参数是,距离的衡量方式和K
  • 使用验证数据集选择超参数,最后只用测试数据集测试模型

线性分类

linear classification

神经网络的模块化

将神经网络想象成乐高积木。您可以将不同的神经网络模块拼接成一个大型卷积网络。线性分类器是深度学习应用中最基本的构建块之一。

再例如,该系统输入一幅图像输出对于该图像的描述性句子,工作原理就是使用CNN关注图像处理图像,使用RNN关注语义处理语言,将这两个网络放在一起就可以组成一个很好的处理系统。

image-20220421204006068

线性分类器

思想就是将图片参数输入,与权重W相乘,可以再加上一个偏差量b(偏差给了数据独立的缩放比例以及每个类别的偏移量),得到一个列向量,每个元素都代表一个类别的得分,该图像所属类别为得分高的那个。原理如下如所示:

image-20220423214736115

将一个32 * 32像素三通道的图片看成一个3072的列向量,由于类别一共有10类,那么权重W就可以设置为10 * 3072的矩阵,那么结果就是一个长度为10的列向量。

具体来看下面这个例子,假设一张像素为4的图片,类别有三类,整个流程如下:

image-20220421204016562

问题来了,那个这个训练好的权重矩阵W到底和输入的图像有什么关系呢?其实可以把权重矩阵的每一行看成一个模板,我们把矩阵中每一行单独拿出来做成一个图像,在CIFAR-10中,训练好的权重矩阵W的每一行对应的图像如下图:

image-20220423221042130

另一种解释:

你也可以把每张图像想象成高维空间中的一个点,我们尝试用一条线对每个点进行分类。但这也带来了线性分类器的困境,当多模态数据出现在不同的域空间时(例如,一个类别出现在不同的域空间中)

image-20220423221646455

更多内容可以访问我的个人博客[0]

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
心中带点小风骚的头像心中带点小风骚普通用户
上一篇 2022年4月27日
下一篇 2022年4月27日

相关推荐