当前位置: 首页 > 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.lqws.cn/news/469657.html

相关文章:

  • MySQL之InnoDB存储引擎深度解析
  • Rust自动化测试的框架
  • Linux 系统结构划分详解:用户区与内核区的设计逻辑
  • 软件工程概述知识点总结
  • 1.23Node.js 中操作 mongodb
  • 基于机器学习的侧信道分析(MLSCA)Python实现(带测试)
  • 智慧医院核心引擎:IBMS 系统守护医疗环境高效与安全​
  • 浅议 3D 展示技术为线上车展新体验带来的助力​
  • Taro 跨端开发:从调试到发布的完整指南
  • CTF--PhP Web解题(走入CTF)
  • 贪心算法思路详解
  • Redis后端的简单了解与使用(项目搭建前置)
  • ARCGIS国土超级工具集1.6更新说明
  • 零基础学习Redis(12) -- Java连接redis服务器
  • 60-Oracle 10046事件-实操
  • Qt的学习(七)
  • 【价值链】产品经理
  • 学习C++、QT---03(C++的输入输出、C++的基本数据类型介绍)
  • nn4dms开源程序是用于深度突变扫描数据的神经网络
  • 车载电子电器架构 --- 法律和标准对电子电气架构的影响
  • JAVA锁机制:对象锁与类锁
  • Vue 简写形式全解析:清晰记忆指南
  • 自动化立体仓库堆垛机控制系统STEP7 FC3功能块 I/O映射
  • 【基础算法】二分(二分查找 + 二分答案)
  • Gunicorn 在 Windows 上能安装但无法运行的解决方案
  • 跟着AI学习C# Day29
  • 网络安全迎来了新契机
  • C# WPF常用调试工具汇总
  • 【Redis】主从复制:配置、管理与优化
  • RTX5 | 配置文件RTX_Config.h