计算机视觉 -hxw

背景: 传感器的急剧增加——视觉数据的生成量急剧增加——计算机视觉的重要性

研究大脑: 大脑的视觉处理:边缘的简单结构——信息的路径移动——(逐步)复杂结构


一、计算机视觉的发展:

  1. 视觉图像——(简化)几何图形——识别与重建

  2. 原始草图(Raw Primal Sketch)——二维轮廓(2.5D Sketch)——三维模型(3D Model)

    1. 原始草图(Raw Primal Sketch)
    • 图像预处理:去除图像噪声,增强边缘
    • 边缘检测:通过计算图像梯度来检测图像中的边缘和亮度变化
    • 特征提取:如亮度、颜色、纹理和边缘方向
    1. 二维轮廓(2.5D Sketch)
    • 深度信息:通过信息,形状和相对位置,来估计物体在三维空间中的定位及其变化(物体的空间关系)(深度信息的草图(即“2.5D”))。
    1. 三维模型(3D Model)
    • 物体建模:根据提取特征和信息,重建物体的三维形状
    • 识别与分类:物体识别和分类。(可能涉及比较已有的模型,或者使用学习算法来处理新输入的图像)
    • 场景理解:对整个场景的理解,不仅仅局限于单个物体,其实包括对多个物体之间的关系、以及与人类经验的结合。​
    1. image
  3. 图像分割(把有意义的(想研究的)像素点划区域来简化

  4. 机器学习——基于特征的对象识别——支持向量机/Adaboost——可能有过拟合问题

    过拟合问题:这里值得仔细阐述下过拟合:过拟合发生在模型学习到了训练数据中的噪声和细节,而不全是我们期望提取的特征。这意味着模型在训练集上表现得很好,但在未见过的数据上却无法泛化。

    我这里可以举一个之前学机器学习分类和回归的简单例子:

    image

    其中 Normal 曲线是使用使用了带参数空间限制的最小二乘法进行求解的模型,Overfit 曲线是使用最小二乘法直接求解得到的

    角度一:我们可以用训练误差和交叉验证(k 折交叉验证)误差来直观体现这样的情况

    • 训练误差反映了模型对**训练数据的拟合程度,而交叉验证误差则反映了模型在新数据上的泛化能力**。

      image

      这个图是之前记录的,它说明了随着多项式的复杂,训练误差不断降低,但是交叉验证误差却从某个点开始上升,这就是过拟合

    角度二:我们可以从偏差和方差的角度

    image

    其中右下角的低偏差高方差就是过拟合

    如何消除过拟合?

    1. 增加样本量
    2. 各种不同的样本:丰富的数据集包含更多的变异性
    3. 数据训练进行之前进行数据清洗
    4. 对于神经网络:要么可以考虑让神经网络不要那么复杂(减少隐藏层数/节点数)、要么可以考虑增加 Drop 层(在每层中随机选取一些节点使其不工作),或是添加 Batch Normalization(对每一层的输入归一化)来减轻过拟合现象
  5. pascal 视觉对象挑战(基准数据集)——imageNet(巨大数据集) ——用于识别与分类以及各种应用

  6. 卷积神经网络——CPU 和 GPU 的发展——增加计算提升效果

  7. 未来的路:对图片的深刻理解(包括图片背后的“故事”含义)

二、图像分类

首先我们需要明确最本质的原理:

数据驱动:数据集——训练(接受图像和它对应的标签)——输出模型——预测

最近邻算法——(进阶)K 最近邻算法(KNN)

这个非常其实类似于聚类算法 K-means++

K 最近邻算法(KNN)

  • 一种监督学习算法,主要用于分类任务。它通过计算测试样本与训练样本之间的距离,找到最近的 K 个邻居,并根据这些邻居的标签进行预测。
  1. 原理:

    • 计算其与所有训练样本的距离(根据问题不同,选择的距离类型也不同)
    • 找到距离最近的 K 个训练样本,统计这些样本的标签,选择出现频率最高的标签作为预测结果
  2. 特点:

    • KNN 不需要显式的训练过程,所有的训练数据在预测时都被使用
##非常简单的最近邻算法
import numpy as np  

class NearestNeighbor:  
    def __init__(self):  
        pass  

    def train(self, X, y):  
        """存储训练数据和标签"""  
        self.Xtr = X  
        self.ytr = y  
//train O(1)
    def predict(self, X):  
        """对测试数据进行预测"""  
        num_test = X.shape[0]  
        Ypred = np.zeros(num_test, dtype=self.ytr.dtype)  

        for i in range(num_test):  
            # 计算测试样本与所有训练样本之间的L1距离  
            distances = np.sum(np.abs(self.Xtr - X[i, :]), axis=1)  
            # 找到距离最小的训练样本的索引  
            min_index = np.argmin(distances)  
            # 将对应的标签存储在预测结果中  
            Ypred[i] = self.ytr[min_index]  
//predict O(n)
        return Ypred
//这其实与我们的期待背道而驰,我们希望训练的时候慢一些,加快预测速度

超参数:比如这里的 K 就是超参数:这里我们需要提到超参数的概念:

  • 超参数是我们在训练模型之前需要设置的参数,而不是通过训练数据学习得到的。

  • 这些参数的选择会直接影响算法的表现和效果

  • 实验和验证来确定最佳的超参数值

    下面我要谈到如何实验和验证:

    在此之前有两种不好的方式:

    一种是整个数据集为训练集,这样前面提到过可能会过拟合,而且不知道超参数的效果

    一种是分成训练集和测试集::选择超参数时只依赖于测试集

    所以应该把集合分成三个:训练集、验证集和测试集

    选择在验证集上表现最佳的超参数,并在测试集上进行最终评估。

这里需要提到的一点是:刚开始可能会有一个疑惑:对于第二种情况,我不能根据测试集的结果来反复改变训练集的参数反复调试吗?

可以明确的说:这是不能的,出于科学的原则,测试集只能在最终测试的时候触碰一次,才能公平得显示模型的优劣,如果可以触碰多次,那么就好像专为了这一个测试集专设的模型(不严谨 且容易出现过拟合的情况)

1 操作
XiaoweiH 在 2024-10-10 02:00:39 更新了该帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • 周末

    星期六到星期天晚,实行五天工作制后,指每周的最后两天。再过几年可能就是三天了。

    14 引用 • 297 回帖
  • 服务器

    服务器,也称伺服器,是提供计算服务的设备。由于服务器需要响应服务请求,并进行处理,因此一般来说服务器应具备承担服务并且保障服务的能力。

    125 引用 • 588 回帖
  • CloudFoundry

    Cloud Foundry 是 VMware 推出的业界第一个开源 PaaS 云平台,它支持多种框架、语言、运行时环境、云平台及应用服务,使开发人员能够在几秒钟内进行应用程序的部署和扩展,无需担心任何基础架构的问题。

    5 引用 • 18 回帖 • 166 关注
  • HHKB

    HHKB 是富士通的 Happy Hacking 系列电容键盘。电容键盘即无接点静电电容式键盘(Capacitive Keyboard)。

    5 引用 • 74 回帖 • 471 关注
  • 前端

    前端技术一般分为前端设计和前端开发,前端设计可以理解为网站的视觉设计,前端开发则是网站的前台代码实现,包括 HTML、CSS 以及 JavaScript 等。

    247 引用 • 1347 回帖
  • 反馈

    Communication channel for makers and users.

    123 引用 • 911 回帖 • 243 关注
  • webpack

    webpack 是一个用于前端开发的模块加载器和打包工具,它能把各种资源,例如 JS、CSS(less/sass)、图片等都作为模块来使用和处理。

    41 引用 • 130 回帖 • 263 关注
  • golang

    Go 语言是 Google 推出的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性。谷歌首席软件工程师罗布派克(Rob Pike)说:我们之所以开发 Go,是因为过去 10 多年间软件开发的难度令人沮丧。Go 是谷歌 2009 发布的第二款编程语言。

    497 引用 • 1387 回帖 • 287 关注
  • WebClipper

    Web Clipper 是一款浏览器剪藏扩展,它可以帮助你把网页内容剪藏到本地。

    3 引用 • 9 回帖
  • SQLServer

    SQL Server 是由 [微软] 开发和推广的关系数据库管理系统(DBMS),它最初是由 微软、Sybase 和 Ashton-Tate 三家公司共同开发的,并于 1988 年推出了第一个 OS/2 版本。

    19 引用 • 31 回帖 • 1 关注
  • 开源

    Open Source, Open Mind, Open Sight, Open Future!

    408 引用 • 3574 回帖 • 1 关注
  • 禅道

    禅道是一款国产的开源项目管理软件,她的核心管理思想基于敏捷方法 scrum,内置了产品管理和项目管理,同时又根据国内研发现状补充了测试管理、计划管理、发布管理、文档管理、事务管理等功能,在一个软件中就可以将软件研发中的需求、任务、bug、用例、计划、发布等要素有序的跟踪管理起来,完整地覆盖了项目管理的核心流程。

    6 引用 • 15 回帖 • 114 关注
  • Windows

    Microsoft Windows 是美国微软公司研发的一套操作系统,它问世于 1985 年,起初仅仅是 Microsoft-DOS 模拟环境,后续的系统版本由于微软不断的更新升级,不但易用,也慢慢的成为家家户户人们最喜爱的操作系统。

    222 引用 • 473 回帖
  • LeetCode

    LeetCode(力扣)是一个全球极客挚爱的高质量技术成长平台,想要学习和提升专业能力从这里开始,充足技术干货等你来啃,轻松拿下 Dream Offer!

    209 引用 • 72 回帖
  • OpenShift

    红帽提供的 PaaS 云,支持多种编程语言,为开发人员提供了更为灵活的框架、存储选择。

    14 引用 • 20 回帖 • 632 关注
  • OpenStack

    OpenStack 是一个云操作系统,通过数据中心可控制大型的计算、存储、网络等资源池。所有的管理通过前端界面管理员就可以完成,同样也可以通过 Web 接口让最终用户部署资源。

    10 引用 • 4 关注
  • JetBrains

    JetBrains 是一家捷克的软件开发公司,该公司位于捷克的布拉格,并在俄国的圣彼得堡及美国麻州波士顿都设有办公室,该公司最为人所熟知的产品是 Java 编程语言开发撰写时所用的集成开发环境:IntelliJ IDEA

    18 引用 • 54 回帖 • 4 关注
  • 宕机

    宕机,多指一些网站、游戏、网络应用等服务器一种区别于正常运行的状态,也叫“Down 机”、“当机”或“死机”。宕机状态不仅仅是指服务器“挂掉了”、“死机了”状态,也包括服务器假死、停用、关闭等一些原因而导致出现的不能够正常运行的状态。

    13 引用 • 82 回帖 • 53 关注
  • Quicker

    Quicker 您的指尖工具箱!操作更少,收获更多!

    31 引用 • 124 回帖 • 7 关注
  • RYMCU

    RYMCU 致力于打造一个即严谨又活泼、专业又不失有趣,为数百万人服务的开源嵌入式知识学习交流平台。

    4 引用 • 6 回帖 • 53 关注
  • Netty

    Netty 是一个基于 NIO 的客户端-服务器编程框架,使用 Netty 可以让你快速、简单地开发出一个可维护、高性能的网络应用,例如实现了某种协议的客户、服务端应用。

    49 引用 • 33 回帖 • 21 关注
  • 微信

    腾讯公司 2011 年 1 月 21 日推出的一款手机通讯软件。用户可以通过摇一摇、搜索号码、扫描二维码等添加好友和关注公众平台,同时可以将自己看到的精彩内容分享到微信朋友圈。

    130 引用 • 793 回帖 • 1 关注
  • OAuth

    OAuth 协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式不同之处是 oAuth 的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此 oAuth 是安全的。oAuth 是 Open Authorization 的简写。

    36 引用 • 103 回帖 • 8 关注
  • RESTful

    一种软件架构设计风格而不是标准,提供了一组设计原则和约束条件,主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。

    30 引用 • 114 回帖 • 1 关注
  • DNSPod

    DNSPod 建立于 2006 年 3 月份,是一款免费智能 DNS 产品。 DNSPod 可以为同时有电信、网通、教育网服务器的网站提供智能的解析,让电信用户访问电信的服务器,网通的用户访问网通的服务器,教育网的用户访问教育网的服务器,达到互联互通的效果。

    6 引用 • 26 回帖 • 511 关注
  • SOHO

    为成为自由职业者在家办公而努力吧!

    7 引用 • 55 回帖 • 21 关注
  • 自由行
    10 关注