计算机视觉 -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 更新了该帖

相关帖子

欢迎来到这里!

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

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

推荐标签 标签

  • 音乐

    你听到信仰的声音了么?

    60 引用 • 511 回帖
  • 分享

    有什么新发现就分享给大家吧!

    247 引用 • 1788 回帖 • 3 关注
  • Wide

    Wide 是一款基于 Web 的 Go 语言 IDE。通过浏览器就可以进行 Go 开发,并有代码自动完成、查看表达式、编译反馈、Lint、实时结果输出等功能。

    欢迎访问我们运维的实例: https://wide.b3log.org

    30 引用 • 218 回帖 • 619 关注
  • uTools

    uTools 是一个极简、插件化、跨平台的现代桌面软件。通过自由选配丰富的插件,打造你得心应手的工具集合。

    6 引用 • 14 回帖
  • 京东

    京东是中国最大的自营式电商企业,2015 年第一季度在中国自营式 B2C 电商市场的占有率为 56.3%。2014 年 5 月,京东在美国纳斯达克证券交易所正式挂牌上市(股票代码:JD),是中国第一个成功赴美上市的大型综合型电商平台,与腾讯、百度等中国互联网巨头共同跻身全球前十大互联网公司排行榜。

    14 引用 • 102 回帖 • 389 关注
  • 深度学习

    深度学习(Deep Learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。

    52 引用 • 40 回帖 • 2 关注
  • Docker

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的操作系统上。容器完全使用沙箱机制,几乎没有性能开销,可以很容易地在机器和数据中心中运行。

    490 引用 • 915 回帖
  • DNSPod

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

    6 引用 • 26 回帖 • 511 关注
  • 酷鸟浏览器

    安全 · 稳定 · 快速
    为跨境从业人员提供专业的跨境浏览器

    3 引用 • 59 回帖 • 31 关注
  • ZeroNet

    ZeroNet 是一个基于比特币加密技术和 BT 网络技术的去中心化的、开放开源的网络和交流系统。

    1 引用 • 21 回帖 • 626 关注
  • golang

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

    497 引用 • 1387 回帖 • 305 关注
  • 自由行
    2 关注
  • 导航

    各种网址链接、内容导航。

    38 引用 • 169 回帖
  • NetBeans

    NetBeans 是一个始于 1997 年的 Xelfi 计划,本身是捷克布拉格查理大学的数学及物理学院的学生计划。此计划延伸而成立了一家公司进而发展这个商用版本的 NetBeans IDE,直到 1999 年 Sun 买下此公司。Sun 于次年(2000 年)六月将 NetBeans IDE 开源,直到现在 NetBeans 的社群依然持续增长。

    78 引用 • 102 回帖 • 671 关注
  • 以太坊

    以太坊(Ethereum)并不是一个机构,而是一款能够在区块链上实现智能合约、开源的底层系统。以太坊是一个平台和一种编程语言 Solidity,使开发人员能够建立和发布下一代去中心化应用。 以太坊可以用来编程、分散、担保和交易任何事物:投票、域名、金融交易所、众筹、公司管理、合同和知识产权等等。

    34 引用 • 367 回帖 • 8 关注
  • 脑图

    脑图又叫思维导图,是表达发散性思维的有效图形思维工具 ,它简单却又很有效,是一种实用性的思维工具。

    22 引用 • 71 回帖
  • 智能合约

    智能合约(Smart contract)是一种旨在以信息化方式传播、验证或执行合同的计算机协议。智能合约允许在没有第三方的情况下进行可信交易,这些交易可追踪且不可逆转。智能合约概念于 1994 年由 Nick Szabo 首次提出。

    1 引用 • 11 回帖 • 5 关注
  • Sandbox

    如果帖子标签含有 Sandbox ,则该帖子会被视为“测试帖”,主要用于测试社区功能,排查 bug 等,该标签下内容不定期进行清理。

    403 引用 • 1246 回帖 • 587 关注
  • 又拍云

    又拍云是国内领先的 CDN 服务提供商,国家工信部认证通过的“可信云”,乌云众测平台认证的“安全云”,为移动时代的创业者提供新一代的 CDN 加速服务。

    21 引用 • 37 回帖 • 539 关注
  • Spark

    Spark 是 UC Berkeley AMP lab 所开源的类 Hadoop MapReduce 的通用并行框架。Spark 拥有 Hadoop MapReduce 所具有的优点;但不同于 MapReduce 的是 Job 中间输出结果可以保存在内存中,从而不再需要读写 HDFS,因此 Spark 能更好地适用于数据挖掘与机器学习等需要迭代的 MapReduce 的算法。

    74 引用 • 46 回帖 • 557 关注
  • Lute

    Lute 是一款结构化的 Markdown 引擎,支持 Go 和 JavaScript。

    25 引用 • 191 回帖 • 19 关注
  • Facebook

    Facebook 是一个联系朋友的社交工具。大家可以通过它和朋友、同事、同学以及周围的人保持互动交流,分享无限上传的图片,发布链接和视频,更可以增进对朋友的了解。

    4 引用 • 15 回帖 • 469 关注
  • 互联网

    互联网(Internet),又称网际网络,或音译因特网、英特网。互联网始于 1969 年美国的阿帕网,是网络与网络之间所串连成的庞大网络,这些网络以一组通用的协议相连,形成逻辑上的单一巨大国际网络。

    98 引用 • 344 回帖
  • Kotlin

    Kotlin 是一种在 Java 虚拟机上运行的静态类型编程语言,由 JetBrains 设计开发并开源。Kotlin 可以编译成 Java 字节码,也可以编译成 JavaScript,方便在没有 JVM 的设备上运行。在 Google I/O 2017 中,Google 宣布 Kotlin 成为 Android 官方开发语言。

    19 引用 • 33 回帖 • 64 关注
  • IBM

    IBM(国际商业机器公司)或万国商业机器公司,简称 IBM(International Business Machines Corporation),总公司在纽约州阿蒙克市。1911 年托马斯·沃森创立于美国,是全球最大的信息技术和业务解决方案公司,拥有全球雇员 30 多万人,业务遍及 160 多个国家和地区。

    17 引用 • 53 回帖 • 133 关注
  • Linux

    Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 Unix 的多用户、多任务、支持多线程和多 CPU 的操作系统。它能运行主要的 Unix 工具软件、应用程序和网络协议,并支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

    930 引用 • 937 回帖
  • C++

    C++ 是在 C 语言的基础上开发的一种通用编程语言,应用广泛。C++ 支持多种编程范式,面向对象编程、泛型编程和过程化编程。

    107 引用 • 152 回帖