斯坦福大学cs231n (图像分类)

devtools/2024/9/25 10:36:57/

1.介绍

当作图像分类时,分类系统接收一些分类图像,比如猫咪。并且系统清楚了一些已经确定了分类或者标签的集合。那么,计算机的工作就是根据图片,给他分配一些固定的分类或者标签。

对于一个计算机来说,这是一个非常困难的事情。当一个计算机看到这些图片时,他看到的是一大堆数字。比如,这个图片是800*600的像素,每一个像素由三个数字表示,用来表示像素的红、绿、蓝三个值,这将是一个巨大的数字阵列,这很难提取猫咪的特性。我们把这种问题成为语义鸿沟。

一只猫咪的语义概念和计算机实际看到的像素值之间有着巨大的差距,图像稍微一点的变化,都会导致数字阵列完全不同。然而,我们希望我们的算法是鲁棒的。

再进行图像分类时,图片可能发生以下变化:

  • 摄像机从多个角度拍摄
  • 照明情况有亮有暗
  • 形状会发生变化
  • 有遮挡物遮挡
  • 图片中的物体与背景较为相似,难以辨认
  • 每一类物体多种多样

2.数据驱动

2.1 硬编码

首先,根据所给图像,提取出边缘线条。然后,设定一些规则(比如:什么样的线条代表什么特征),去判断该图像中的物体是什么类别。然而,这种硬编码的方式效果并不是很好。

2.2 数据驱动算法

我们不写具体的分类规则来识别一个物体,我们采取的方式是,抓取大量猫的图片数据集,接着,训练机器来分类这些图片。(机器会收集这些数据,用某种方式总结,然后生成一个模型,总结识别出这些不同类的对象的核心知识要素),然后,我们用这些模型识别新的图片。

因此,这种方式一般包含两个函数。一个是训练函数,根据输入的数据集,得出一个模型。另一个是预测函数,根据输入的数据集进行预测。

3 最近邻算法

这种方法只是单纯的记录数据,在图片预测时,我们会拿一些新的图片,去在训练数据中,寻找与新图片最相似的,基于此,给出一个标签。

3.1 CIFAR-10数据集

CIFAR-10是一个很常用的数据集。数据集CIFAR-10会给出10个不同的类别,比如,飞机、汽车、鸟、猫等等。每个类别会给出五万张训练数据图,另外有一万个额外的测试数据图。

在该图中,右半部分表示对一个测试图片,找到和它最接近的十个训练图片。

比较两个图片是否相似时,可以用到一些距离度量计算方法。

3.2 L1距离(曼哈顿距离)

d_{1}(I_{1},I_{2})=\sum_{P}^{}\left | I_{1}^{P} -I_{2}^{P}\right |

  • p为像素点,I^{P}表示第p个像素点

假设我们的测试图片是4x4的小图片,将测试图片与训练图片对应位置的值相减取平均值,再将这些差值进行相加。

实现方式很简单,如下图所示。

因为我们在做预测时可能希望它发生在手机上或者浏览器上等等,不具有较强大的计算能力,所以,我们希望一个模型训练时可以慢一些,在测试时要尽量快一点。从这一点上看,最近邻算法并不是一个很好的算法。

并且该算法的准确率较低,因此后面还会介绍其他算法。

3.3 L2距离(欧式距离)

d_{2}(I_{1},I_{2})=\sqrt{\sum_{P}^{}(I_{1}^{P}-I_{2}^{P})^{2}}

该方式是先计算对应像素值的差,再将差值平方相加取根值。

L1距离取决于你选择的坐标系统,如果转动坐标轴,将会改变点之间的L1距离,而改变坐标轴对L2距离毫无影响。

如果输入的特征向量中的一些值具有重要的意义,那么建议选择L1距离,二u过输入的特征向量只是普通的向量,那么建议选择L2距离。当然,在解决实际问题中,更建议分别使用两种距离度量的方法,比较选出较为合适的一种方式。

3.4 K最近邻分类器

只是用最相似的一张图片的标签作为测试图片的预测,往往效果并不好。因此,我们可以使用KNN算法:选取相似的K个图片,选择其中数量最多的标签,作为对测试图片的预测。

特例:K=1即最近邻算法。

上图分别展示了原始数据,K=1的KNN算法以及K=5的KNN算法。我们可以发现K变大后,分类边界线趋于平滑。其中,中间的白色区域,表示不确定为何种分类。

3.4.1 超参数

像K值的选取与度量方法的选择都不是通过训练学习可以得到的,而是需要我们提前设置好的参数,称为超参数,那么超参数的选择就格外重要,可能直接影响一个模型效果的好坏。

  • 首先,不可以使用训练集进行超参数调优。如果在训练集上调优,我们可以发现K=1时,效果总是很好。但是正如前面所说,K变大后,曲线更趋于平滑,即使其中可能个别数据出现错误,但是对于位在训练集中出现的数据往往会得到较好的效果。
  • 其次,也不可以使用测试集进行超参数调优。如果使用测试集调优,使用在测试集中表现最好的K值后,在使用测试机进行预测,那么相当于测试机过拟合,往往预期的性能好于实际的性能。

解决方式:

  1. 将数据划分为训练集、验证集和测试集。在验证机上对不同的K值进行比较,选择效果最佳的K值,然后,使用测试集对算法进行评价。
  2. 交叉验证。使用交叉验证时,将训练集划分为五部分,其中四份用来训练数据,另外一份用来验证数据。我们将每一份数据集以此作为验证集,最后取5次验证结果的平均值作为验证结果。

如下图所示,针对不同的K值,产生了五个验证结果,取其平均值,作为最终验证结果。我们可以在图中发现,当K=7时,模型效果是最好的。

但是,在很多图像分类的问题上,我们并不建议使用KNN算法,原因如下:

  • 测试花费大量时间。因为需要将测试图片与每一个训练图片进行比较,所以花费时间较多。
  • 使用像素差异来比较图片是远远不够的。使用像素差异进行比较的话,往往最终结果的好坏依赖于背景,背景相似的图片可能相差距离都比较小。举例:将原始图片向下移动两个单位距离,可能像素差异会非常大,但是显而易见,这两张图片应该属于一个类别。
  • 维度灾难。KNN算法有点类似训练数据将样本空间分成几块,如果我们希望分类器有较好的结果,那么就需要训练数据能密集地分布在空间中,否则最近邻点的实际距离可能很远,也就是说,和待测样本的相似度没有那么高。然而问题在于,想要密集地分布在空间中,我们需要指数倍的训练数据,这会导致训练数量猛增。

4 线性分类

4.1 线性分类介绍

KNN模型所做的就是把训练数据存储起来,并且在训练过程中不会产生参数(K为人为设定的,是超参数,不是这里提到的参数概念)。在预测时,将测试图片与训练图片进行比较,然后预测。

与之不同的是参数模型,其中,线性分类就是最简单的参数模型。参数模型通常指根据输入的训练数据,得到权重W或者\vartheta,在之后的预测中,将不会在使用训练数据,而是与这组权重参数进行某种运算做出预测。

线性分类模型:f(x_{i},W,b)=Wx_{i}+b

其中,参数W表示权重矩阵,参数b是偏置项。

在该例子中,将图片的像素值拉成[3072x1]的列向量,W大小为[10x3072],B的大小为[10x1],最后输出为[10x1]的列向量,分别对应了不同分类得到的分值。

参数矩阵W相当于多个分类器的组合,每一行代表一个分类器。

线性分类器在利用学习到的模板,和输入图像做模板匹配。我们设置可以把其视作一种高效的KNN,不同的是不再使用所有的训练集的图像来比较,而是每个类别只用了一张图片来表征(这张图片是我们学习到的模板,而不存在训练集中),而且我们会更换度量标准,使用(负)内积来计算向量间的距离,而不是使用 L1 或者 L2 距离。

如果我们将3072维空间假设为二维空间,我们可以看到效果如上图所示。每输入的一张图片代表一个点,三个颜色的直线,代表三个分类器。

线性分类并不能解决所有的问题。比如上图展示的三种情况,都无法使用线性将其分类。


http://www.ppmy.cn/devtools/102635.html

相关文章

uniapp的uploadFile在APP端上传视频失败

问题 使用uniapp开发APP,在使用上传接口时,出现了后台提示没有上传文件,但H5正常 原因 uni.uploadFile({url: url,filePath: path,name: file,// APP必须要写,H5可以不写success: (res) > {} });原因就是name属性必须填写&a…

如祺出行发布首份中期业绩,总收入增长13.6%

8月28日,如祺出行发布2024年中期业绩公告。这是如祺出行于7月10日在港交所主板上市后发布的首份业绩公告。 业绩公告显示,2024年上半年如祺出行收入实现10.37亿元(单位:人民币,下同)、同比增长13.6%&#x…

代码随想录算法训练营第13天 |二叉树的学习

目录 二叉树 理论基础 二叉树的分类 1. 满二叉树 (Full Binary Tree) 2. 完全二叉树 (Complete Binary Tree) 3. 平衡二叉树 (Balanced Binary Tree) 5. 二叉搜索树 (Binary Search Tree, BST) 二叉树的存储 1. 链式存储 (Linked Representation) 2. 顺序存储 (Sequent…

Qt/QML学习-MenuBarToolBar

QML学习 MenuBar&ToolBar例程视频讲解代码 main.qml import QtQuick 2.15 import QtQuick.Window 2.15 import QtQuick.Controls 2.15Window {width: 640height: 480visible: truetitle: qsTr("MenuBar&ToolBar")// 菜单栏MenuBar {id: menuBarcontentWid…

深入理解DPO(Direct Preference Optimization)算法

目录 1. 什么是DPO?2. Bradley-Terry模型2.1 奖励模型的训练 3. 从PPO到DPO4. DPO的简单实现5. 梯度分析Ref 1. 什么是DPO? 直接偏好优化(Direct Preference Optimization, DPO)是一种不需要强化学习的对齐算法。由于去除了复杂的…

SAP ERP与长城汽车EDI业务集成案例(SAP CPI平台)

一、项目背景 某智能座舱公司是国内领先的智能座舱领域科技公司,致力于成为智能网联行业变革的领导者和推动者,聚焦整车域控制器产品、智能网联软件产品和运营服务产品; 已建成首条先进的数智化域控制器生产线,为客户提供最优…

【ORACLE】如何使用EXPLAIN PLAN来分析 listagg() 函数的性能瓶颈?

在Oracle数据库中,EXPLAIN PLAN 语句用于显示SQL语句的执行计划,这对于分析和优化查询性能至关重要。要使用 EXPLAIN PLAN 来分析包含 LISTAGG 函数的查询的性能,你可以按照以下步骤操作: 步骤 1: 生成执行计划 首先&#xff0c…

Midjourney Describe API 的对接和使用

Midjourney Describe API 的对接和使用 Midjourney Describe API 的主要功能是通过上传图片,获取对图片的描述。使用该 API,只需要传递图片文件地址,API 会返回图片的详细描述。无需繁琐的参数设置,即可获得高质量的图片描述。 …