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

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.rhkb.cn/news/410404.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

springsecurity 在web中如何获取用户信息(后端/前端)

一、SecurityContextHolder 是什么 SecurityContextHolder用来获取登录之后用户信息。Spring Security 会将登录用户数据保存在Session中。但是,为了使用方便,Spring Security在此基础上还做了一些改进,其中最主要的一个变化就是线程绑定。当用户登录成功…

FastGPT如何增减用户

背景 开源版本的FastGPT默认只有一个超级用户root,为了更好地管理应用和知识库,可以通过操作MongoDB数据库来增加新的用户和团队。 所需环境 已安装并运行的FastGPT实例MongoDB客户端工具(如Mongo Shell或Robo 3T等) 操作步骤…

数据库三大范式

三大范式 一种数据库设计理念,意义在于降低耦合 写代码 高内聚 低耦合 一个表只有一个主键 一个主键可以是多列 ‌第一范式(1NF)‌:要求数据库表的每一列都是不可分割的原子数据项,即列中存储的数据是最小的数据单元&…

并发服务器

一、服务器 1.单循环服务器:同一时刻,只能处理一个客户端的任务; 2.并发服务器:同一时刻,可以处理多个客户端的任务; 3.TCP并发服务器: (1)多进程: (2&a…

搭建面向切面编程项目

此项目在整合Mybatis基础上修改&#xff0c;可参考主页的整合Mybatis文章 注解版本 第一步 引入maven坐标 <!-- 切面编程所需jar包--><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId>…

Windows 11系统 Eclipse 2024版本安装教程和环境搭建

文章目录 目录 文章目录 安装流程 小结 概要安装流程技术细节小结 概要 Eclipse 是一个开源的集成开发环境 (IDE)&#xff0c;主要用于 Java 开发&#xff0c;但也支持其他编程语言如 C、Python 和 PHP。它提供了丰富的工具和插件&#xff0c;用于编写、调试和管理代码&#x…

安卓13 背光反向 亮度反向 android13 backlight reverse

总纲 android13 rom 开发总纲说明 目录 1.前言 2.问题分析 3.代码分析 4.代码修改 5.彩蛋 1.前言 有些设备,在调整背光的时候,会发现,背光调大,显示亮度反而变暗,背光调小,亮度变亮。这是由于PWM背光本身并没有一个标准去决定怎么样算是高亮度,怎么算是低亮度。因…

《黑神话·悟空》是用什么编程语言开发的?

最近火爆全球的国产 3A 大作《黑神话悟空》&#xff0c;你玩了吗&#xff1f;没玩没关系&#xff0c;有人就是对游戏不感冒&#xff0c;我找了个宣发片&#xff0c;一起感受下3A大作的视觉冲击&#xff0c;而且还是我们从小听到大&#xff0c;那猴子&#x1f412;的故事。 ‌‌…

Onnx使用预训练的 ResNet18 模型对输入图像进行分类,并将分类结果显示在图像上

目录 一、整体功能概述 二、函数分析 2.1 resnet() 函数&#xff1a; 2.2 pre_process(img_path) 函数&#xff1a; 2.3 loadOnnx(img_path) 函数&#xff1a; 三、代码执行流程 一、整体功能概述 这段代码实现了一个图像分类系统&#xff0c;使用预训练的 ResNet18 模型对…

设计模式26-解析器模式

设计模式26-解析器模式 动机定义与结构定义结构 C代码推导代码说明 优缺点应用总结 动机 在软件构建过程中&#xff0c;如果某一特定领域的问题比较复杂&#xff0c;类似结构会不断重复的出现。如果使用普通的编程方式来实现&#xff0c;将面临非常频繁的变化。 在这种情况下&…

无人机 PX4 飞控 | ROS应用层开发:指令(字符串)订阅功能

无人机 PX4 飞控 | ROS应用层开发&#xff1a;指令&#xff08;字符串&#xff09;订阅功能 指令&#xff08;字符串&#xff09;订阅功能代码测试 指令&#xff08;字符串&#xff09;订阅功能 为了通过键盘触发mavros 的不同功能&#xff0c;需要实现一个订阅字符串的功能 该…

【国外比较权威的免费的卫星数据网站】

国外比较权威的免费卫星数据网站有多个&#xff0c;它们各自在数据覆盖范围、分辨率、以及数据种类等方面具有不同的特点和优势。以下是一些推荐的网站&#xff1a; NASA Worldview 网址&#xff1a;https://worldview.earthdata.nasa.gov/简介&#xff1a;NASA Worldview显示…

p10 容器的基本命令

首先先拉取一个centos的镜像 命令&#xff1a;docker pull centos 新建容器并且启动 这里直接参考老师的命令吧 接下来是启动并且进入到容器当中去输入docker run -it centos /bin/bash这里是以交互的方式进入到容器中可以看到接下来的ls命令输出的东西就是一个Linux系统最…

Python和MATLAB和R对比敏感度函数导图

&#x1f3af;要点 深度学习网络两种选择的强制选择对比度检测贝叶斯自适应估计对比敏感度函数空间观察对比目标量化视觉皮质感知差异亮度、红/绿值、蓝/黄值色彩空间改变OpenCV图像对比度对比敏感度函数模型空间对比敏感度估计眼球运动医学研究空间时间颜色偏心率对比敏感度函…

mysql 不同版本安装不同端口

安装版本为Mysql8.0.11 先解压&#xff0c;解压后&#xff0c;包下创建my.ini文件内容如下&#xff1a; 注意&#xff1a;端口不能给别的mysql一样 [mysqld]# 设置3306端口port3307 # 自定义设置mysql的安装目录&#xff0c;即解压mysql压缩包的目录basedirD:\\rj\\mysql8.0.…

模型 SPIN销售法

系列文章 分享 模型&#xff0c;了解更多&#x1f449; 模型_思维模型目录。探需挖痛&#xff0c;引导成交。 1 SPIN销售法的应用 1.1 提升工作效率的软件销售应用SPIN模型 一家制造企业正在寻求提升工作效率的解决方案。他们注意到员工在处理文件和任务时存在效率问题&#…

【Docker】Linux系统以及威联通QNAP部署思源笔记的通用教程

本文首发于 ❄️慕雪的寒舍 本文测试的是旧版本v2.11.4的部署方式&#xff0c;实测当前&#xff08;2024.08.15&#xff09;最新的v3.1.3版本也可以用相同的方式部署。本文的部署方式共写了三种&#xff0c;非qnap的linux系统也可以参考本文部署思源笔记。 阅读本文之前&#…

新审视零阶优化在内存高效大模型微调中的应用

人工智能咨询培训老师叶梓 转载标明出处 随着大模型模型规模的增大&#xff0c;反向传播&#xff08;BP&#xff09;所需的内存开销也日益增加&#xff0c;这对内存效率提出了挑战。尤其是在设备上训练等内存效率至关重要的应用场景中&#xff0c;解决这一问题变得尤为迫切。 …

【Linux】07.Linux 下的项目自动化构建工具——make/makefile

前言 会不会写makefile&#xff0c;从一个侧面说明了一个人是否具备完成大型工程的能力一个工程中的源文件不计数&#xff0c;其按类型、功能、模块分别放在若干个目录中&#xff0c;makefile定义了一系列的规则来指定&#xff0c;哪些文件需要先编译&#xff0c;哪些文件需要…

【Datawhale X 李宏毅苹果书 AI夏令营】Task1笔记

第三章&#xff1a;深度学习基础 3.1 局部极小值与鞍点 临界点&#xff0c;即梯度为零的点&#xff0c;包含局部极小值&#xff08;local minimum&#xff09;和鞍点&#xff08;saddle point&#xff09;。 梯度下降算法在接近鞍点的时候会变得非常慢&#xff0c;阻碍了继续…