当前位置: 首页 > news >正文

从0开始学习计算机视觉--Day02--数据驱动

上次我们在课程里了解到,亚马逊网站在当时构建了一个在那时候最大的供AI训练的数据集,为了推广这个测试,他们举办了比赛邀请了许多的参赛者,识别图片的标准是输出的类别中只要在前面五个里包含了正确答案就算识别成功。在这个过程中,AI识别的错误率从25.6%,最终降低到了5.1%,在当时达到了比赛方派出了一个博士花费几周时间去识别图片的错误率,这表明了AI从不可实现到在实际应用中的允许的错误率。其中,在2012年,错误率有了一个明显的降低,这得益于当时所提出的一个算法:卷积神经网络,而这个也是计算机视觉中的重点模型。

在当时的imagenet比赛初期,识别图像的算法依旧是采用分层式的结构:先是计算一些图像的特征和局部不变特征,通过一些池化操作(一般会取窗口内的最大值或平均值作为输出,能够减少数据量,保留重要特征,达到降低复杂度,增强鲁棒性的效果)后,再通过一些多层处理(通过多层对数据进行处理,实现模拟人眼处理特征的过程,即从简单到复杂特征的识别)后,最终将结果描述符传递给线性SVM。在这个方法中,依然保有最开始识别图像的思路:采取分层式的结构,识别边界与不变特征。而等到2012年的获胜者采用卷积神经网络后,后面几年的获胜者全都采用了神经网络,且层数越来越高。

其实卷积神经网络并不是2012年前几年发明的,相反其在90年代就已经出现,在当时被用于识别手写的支票和信件。那么是什么促使了这种经典算法在经过几十年后又能登上科技前列的舞台呢?一个原因是因为计算能力的更新。有一个大家都默认的理论尽管用的是经典算法,但只要想方设法把模型的架构扩大,那么就会取得更好的效果,而在2012年时有了90年代所不具备的能够实现并行计算的GPU,所以可以说只要算力足够,不断的扩大模型架构和规模就是能提升效果。第二个原因是在以前并没有那么多的带标签的数据供模型训练,模型也就没能展现出那么优秀的能力,毕竟算法模型是需要庞大的数据来打基础的,并不仅仅取决于其运行逻辑和计算能力,需要一个成长的过程。

数据驱动方法

图像分类,是一个计算机视觉中真正核心的任务,更具体的说,当我们做图像分类时,分类系统接受一些输入图像,并且此时系统已经知道了一些图片的分类,而计算机的任务就是观看图片并给出标签。在计算机中呈现图片的方式是一大堆数字,可能是一些800×600的像素,每个像素由三个数字组成,给出像素红绿蓝三个值。这个就叫做语义鸿沟,因为对于一张猫咪的标签或概念是我们人为赋予的,这种语义概念和计算机接收到的像素值完全不一样。另一方面,也许图片只是修改了不起眼的一部分,甚至仅仅只是将图片进行了左右翻转,并没有影响到图片还是一只猫,但在像素的层面上发生了很大的改变,这同样会影响计算机做出判断。除了图片的视角以外,图片里的主体猫,也可能会发生许多改变,例如只是露出背影,摆出了奇怪的姿势,拍照的光影条件不同,对于这些不同的情况,算法的结果应该是鲁棒(系统、模型或算法在面对异常输入、干扰或不确定环境时,仍能保持稳定性和正常功能的能力)的。

想要写出直接识别图片的算法,是一件比较苦难的事情,因为像之前说的,计算机需要找到主体的边缘,然后简化主体的部分,然后多次判断并组合结果才能识别一个种类的图片。但是世界上有那么多不同的图片,通过这种方法去识别很不现实。这就引出了数据驱动这个方法,我们不写具体的规则来识别一只猫或一条鱼,我们选择直接在网上下载很多不同种类的图片作为数据集,然后训练机器对图片进行分类,机器会用某种方式来总结各个图片的特征并生成一个模型,给出识别不同种类图片的核心要素,最后再用新的图片来验证模型识别的效果好坏。将这个过程简化为写两个函数,第一个函数负责接收图片及其标签并输出模型,第二个函数负责接受刚才的模型并对图片进行分类。这种算法比较简单,仅仅是用不同种类的图片训练模型,然后模型在预测时,会选择一个跟预测图片最相似的图片的标签作为结果,结果虽然很多时候并不准确,但算法的逻辑是比较直接的。

在对比图片是否不同时,我们通常会用一个叫做L1距离的方法,即将两幅图片的对应位置的像素作差,并将差值的绝对值加在一起(前提是图片的尺寸是一样的),如果差值小于0.1×总像素数×225,则认为两张图片是相同的。

学习来源于斯坦福教程:Stanford University CS231n: Deep Learning for Computer Vision

http://www.lryc.cn/news/573424.html

相关文章:

  • MySQL误删数据急救指南:基于Binlog日志的实战恢复详解
  • Mac Parallels Desktop Kali 2025 代理设置
  • OpenAI与微软的未来合作之路:充满挑战的AI竞赛与共赢
  • YAML 数据格式详解
  • 计算机网络第九章——数据链路层《流量控制和可靠传输》
  • 基于SpringBoot+Uniapp的活动中心预约小程序(协同过滤算法、腾讯地图、二维码识别)
  • Docker镜像制作---指令
  • Qt输入数据验证的方法
  • rent8_wechat-最常用出租屋管理系统-微信小程序
  • 从零开发ComfyUI插件:打造你的AI绘画专属工具
  • 私有规则库:企业合规与安全的终极防线
  • C# 将 Enum枚举转成List,并显示在下拉列表中
  • LINUX621 NFS 同步 ;FTP;samba环境
  • 面试题-ts中的typeof
  • 面试题-把类型为b的值赋给类型为a的变量
  • Laravel 项目中图片上传后无法访问的问题
  • SQL关键字三分钟入门:INSERT INTO —— 插入数据详解
  • Python实现MySQL建表语句转换成Clickhouse SQL
  • 【格与代数系统】偏序关系、偏序集与全序集
  • 2048小游戏C++板来啦!
  • 【Docker基础】Docker镜像管理:docker rmi、prune详解
  • 竞业限制协议能单独充当商业秘密的 “保护伞” 吗?
  • docker执行yum报错Could not resolve host: mirrorlist.centos.org
  • python web开发-Flask 蓝图(Blueprints)完全指南
  • 【Docker 08】Compose - 容器编排
  • C#测试调用EPPlus根据批注设置excel单元格内容
  • JavaEE初阶第三期:解锁多线程,从 “单车道” 到 “高速公路” 的编程升级(一)
  • 【开源项目】当大模型推理遇上“性能刺客”:LMCache 实测手记
  • linux安装minio并使用
  • 在Docker、KVM、K8S常见主要命令以及在Centos7.9中部署的关键步骤学习备存