本系列文章是计算机视觉系列专栏的最后几篇了,跟前文不同的是后面的文字主要聚焦于一些概念的引入以及公式的解答,不会向之前那样用具体的代码示例来演示,博主这个苦逼的大学生又到了期末周了,后面文章的更新速度会相较之前慢一点
在前十一章我们都在围绕OpenCV技术而展开,似乎我们都忘了我们这个笔记的重心其实是用来讲解计算机视觉这么课。那么接下来我们就补上我们早就应该讲述的内容——计算机视觉概述,计算机视觉任务以及OpenCV在计算机视觉中充当着一个什么样的角色。
** 计算机视觉是人工智能的一个重要分支,它要解决的问题就是:看懂图像里的内容**
比如:
** 目前主流的基于深度学习的机器视觉方法,其原理跟人类大脑工作的原理比较相似**
人类的视觉原理如下:从原始信号摄入开始(瞳孔摄入像素 Pixels),接着做初步处理(大脑皮层某些细胞发现边缘和方向),然后抽象(大脑判定,眼前的物体的形状,是圆形的),然后进一步抽象(大脑进一步判定该物体是一个气球)。
机器的方法也是类似:构造多层的神经网络,较低层的识别初级图像特征,若干底层特征组成更上一层特征,最终通过多个层级的组合,最终在顶层做出分类,我们看下面的图是不是很形象的就把我们人脑识别图像的过程展现了出来。大家要牢记下面这个图,以后我们会经常的用到这个图。
** 对于人类来说看懂图片是一件很简单的事情,但是对于机器来说这是一个非常难的事情,最主要的就是两个难点。**
特征难以提取
同一只猫在不同的角度,不同的光线,不同的动作下。像素差异是非常大的。就算是同一张照片,旋转90度后,其像素差异也非常大**!
所以图片里的内容相似甚至相同,但是在像素层面,其变化会非常大。这对于特征提取是一大挑战。**
需要计算的数据量巨大
手机上随便拍一张照片就是 1000*2000像素的。每个像素 RGB 有 3 个参数,一共有1000X2000X3=6,000,000。随便一张照片就要处理掉 600万个参数,再算算最近越来越流行的4K视频。就知道计算量级有多恐怖。
而CNN(卷积神经网络) 可以解决上面的两大难题。
而CNN属于深度学习的范畴,深度学习我们后面也会涉及导,它可以很好的解决上面所说的两大难点:
图像分类是计算机视觉中重要的基础问题。后面提到的其他任务也是以它为基础的。
举几个典型的例子:人脸识别,图片鉴黄,相册根据人物自动分类等。
** 目标检测任务的目标是给定一张图像或是一个视频帧,让计算机找出其中所有目标的位置,并给出每个目标的具体类别**
它将整个图像分成像素组,然后对像素组进行标记和分类,语义分割视图在语义上理解图像中每个像素是上面(人,车,狗,树。。。)
如下图,除了识别人,道路,汽车,树木等之外,我们还必须确定每个物体的边界。
** 除了语义分割之外,实例分割将不同类型的实例进行分类,比如用 5 种不同的原始来标记 5 俩汽车。我们会看到多个重叠物体和不同背景的复杂景象,我们不仅需要将这些不同的对象进行分类,而且还要确定对象的边界,差异和彼此之间的关系**
与图像分类不同的是,分类的对象不再是静止的图像,而是一个有多帧图像构成的,包含语音数据,包含运动信息等的视频对象,因此理解视频需要获得更多的上下文信息,不仅要理解每帧的图像是什么,包含什么,还需要结合不同帧,知道上下文的关联信息。
人体关键点检测,通过人体关键节点的组合和追踪来识别别人的运动和行为,对于描述人体姿态,预测人体行为至关重要。在Xbox 种就有利用到这个技术。
** 很多照片中都有一些文字信息,这对理解图像有重要的作用。**
场景文字识别是在图像背景复杂,分辨率底下,字体多样,分布随意等情况下,将图像信息转化为文字序列的工程
停车场,收费站的车牌识别就是的应用场景。
目标追踪,是指在特定场景跟踪某一个或多个特定感兴趣对象的过程。传统的应用就是视频和真实世界的交互,在检测到初始对象之后进行观察
** 前面我们已经用OpenCV做了几个项目,但是那几个项目的流程都只是,导入图片,预处理图片,然后简单的匹配一下设置好的图片,如果我们想要针对一些图片的特征用来预测某些东西的话,我们前面学的东西就不够用 了。那从这里看 OpenCV在计算机视觉中可以用来进行图片处理,然后将处理好的图片交给某个模型之类的,最后根据模型返回的结果进行预测或者检测等等。**
** 前面我们讲述过 OpenCV 负责处理图片,而我们需要将处理好的图片交给一个模型来处理,这个模型就是神经网络。**
** 我们先来看一个最简单的神经网络模型。这是一个包含三个层次的神经网络。红色的是输入层,绿色的是输出层,紫色的是中间层(也叫隐藏层)。输入层有3个输入单元,隐藏层有4个单元,输出层有2个单元。后面,我们统一用这种颜色来表达神经网络的结构。**
在正式介绍前,我们先引入一些知识:
除了从左到右的形式表达的结构图,还有一个常见的表达形式,是从下到上来标识一个神经网络。这时候,输入层在图的最下方。输出层则在图的最上方。
我们先来回顾一些生物学的神经元概念
一个神经元通常具有多个树突,主要用来接受传入信息;而轴突只有一条,轴突尾端有许多轴突末梢可以给其他多个神经元传递信息。轴突末梢跟其他神经元的树突产生连接,从而传递信号。这个连接的位置在生物学上叫做突触
对应这种生物学结构,我们可以用下面的抽象结构来简单的代替
连接是神经元中最重要的东西。每一个神经元上都有一个权重
一个神经网络的训练算法就是让权重的值调整到最佳,以使得整个网络的预测效果最好
我们用 a 来表示输入,用w来表示权重。一个表示连接的有向箭头可以这样理解:在初端,传递的信号大小仍然是a,端中间有加权参数 w,经过这个加权后的信号会变成 aw,因此在连接的末端,信号的大小就变成了aw
如果我们将神经元图中的所有变量用符号表示,并且写出输出的计算公式,就是下图
可见 z 是在输入和权重的线性加权和叠加了一个函数g的值。在MP模型(下个小结就讲)中,函数g是sgn函数,也就是取符号函数。这个函数当输入大于0时,输出1,否则输出0.
下面对神经元模型的图进行一些扩展。首先将 sum函数与sgn函数合并到一个圆圈里,代表神经元的内部计算。其次,把输入a入输出z写到连接线的左上方,便于后面画复杂的网络,最好说明,一个神经元可以因此多个代表输出的有向箭头,但值都是一样的。
神经元可以看作一个计算与存储单元,计算是神经元对其的输入进行计算功能。存储是神经元会暂存计算结果,并传递到下一层。
神经元模型的使用可以这样理解:
我们有一个数据,称之为样本。样本有四个属性,其中三个属性已知,一个属性未知。我们需要做的就是通过三个已知属性预测未知属性。
具体办法就是使用神经元的公式进行计算。三个已知属性的值是a1,a2,a3,未知属性的值是z。z可以通过公式计算出来。
这里,已知的属性称之为特征,未知的属性称之为目标。假设特征与目标之间确实是线性关系,并且我们已经得到表示这个关系的权值w1,w2,w3。那么,我们就可以通过神经元模型预测新样本的目标
** 对应生物学上的神经网络中,每个神经元与其他神经元想连,当他兴奋时,就会像相连的神经元发生化学物质,从而改变这些神经元的电位。如果某神经元的电位超过了一个阈值,那么它就会被激活,即”兴奋“起来,向其他神经元发送化学物质。我们讲上述情形抽象出下图的简单模型,这就是沿用至今的 M-P神经元模型。**
其实跟上面我们讲的模型没有太大的区别
在这个模型中,神经元接收到来自 n 个其他神经元传递过来的输入信号,这些输入信号通过带权重的连接(connection)进行传递,神经元接收到的总输入值将与神经元的阈值进行比较,然后通过“激活函数”(activation function) 处理以产生神经元的输出。
** 上文我们提到了神经元的输入经过权重的连接传入到神经元后,要用激励函数,将输入值与阈值进行比较并输出,那激活函数有哪些呢?**
最简单的就是阶跃函数,也就是大于0的输出1,小于0的输出0
那我们看阶跃函数是不是很简单,但是阶越函数有很大的问题。
所以,我们对此改造了一下,那就是 sigmoid函数
”sigmoid函数看上去有些复杂,但它也仅仅是个函数而已。而函数就是给定某个输人后,会返回某个输出的转换器。比如,向sigmoid函数输人1.0或2.0后,就会有某个值被输出,类似h(1.0) = 0.731… h(2.0) = 0.88…这样。神经网络中用sigmoid函数作为激活函数,进行信号的转换,转换后的信号被传送给下一个神经元。
sigmoid函数是一条平滑的曲线,输出随着输入发生连续性的变化,而阶跃函数以0为界,输出发生急剧性的变化。sigmoid函数的连续性对神经网络的学习具有重要意义。
另一个不同点是,相对于阶跃函数只能返回0或1,sigmoid函数可以返回 0.731…0.880等实数,也就是说,流动的是连续的实数值信号。
到目前为止,我们介绍了作为激励函数的阶跃函数和sigmoid函数。在神经网络的发展历史中,sigmoid函数很早就开始使用,而最近则主要使用 ReLU (Rectified Linear Unit)函数。ReLU函数在输入大于0时,直接输出该值,在输入小于等于0时,输出0
神经网络以某个指标为线索寻找最优权重参数,神经网络的学习中所用的指标称为 损失函数(loss function)。这个损失函数可以使用任意函数,但一般使用均方误差和交叉熵误差等。
损失函数是表示神经网络性能的“恶劣程度”的指标,即当前的神经网络对监督数据在多大程度上不拟合,在多大程度上不一致。以"性能的恶劣程度"为指标可能会使人感到不太自然,但是如果给损失函数上一个负值,就可以解释"在多大程度上不坏",即"性能有多好。"并且,“使性能的恶劣程度达到最小"和"使性能的优良程度达到最大"是等价的,不管是用"恶劣程度"还是"优良程度”,做的事情本质都是一样的。
https://blog.csdn.net/fsfjdtpzus/article/details/106256925
本文主要简单引入了一下现代人工智能中计算机视觉的任务以及深度学习,神经网络这些概念的引入。之后的概念讲解也将着重于这些方面
我是Mayphyr,从一点点到亿点点,我们下次再见