python计算机视觉深度学习1简介

神经网络和深度学习简史

人工神经网络(ANN Artificial Neural Network)是一类学习的机器学习算法,它专注于模式识别,对数据进行学习,灵感来自大脑的结构和功能深度学习属于ANN算法的家族,在大多数情况下,两者可以互换使用。

事实上,你可能会惊讶地发现深度学习领域已经存在了60多年。自20世纪40年代以来,“深度学习”一直存在着各种各样的名字 变化,包括控制论,连接主义和最熟悉的人工神经网络。

image.png

第一个神经网络模型来自McCulloch和Pitts,1943年。这个网络是一个二元分类器,能够根据一些输入识别两个不同的类别。

然后,在20世纪50年代,开创性的Perceptron算法由Rosenblatt发表 - 这个模型可以自动学习输入分类所需的权重(无人为干预需要)。这个自动训练程序构成了随机梯度下降(SGD Stochastic Gradient Descent)的基础,今天仍用于训练非常深的神经网络。

image.png

在此期间,基于感知器的技术在神经网络社区中风靡一时。然而,Minsky和Papert 在1969年出版的一本书有效地停滞了神经 网络研究近十年。他们的工作证明了具有线性的感知器激活函数(深度无关)只是线性分类器,无法解决非线性问题问题。

image.png

上图中无法用直线分隔蓝色星星与红色圆圈。此外,作者认为(当时)我们没有计算资源来构建大型深度神经网络(事后看来,它们绝对正确)。

反向传播算法和Werbos(1974),Rumelhart(1986)和LeCun(1998)的研究[17]唤醒了神经网络。他们在反向传播算法中的研究启用了多层要训​​练的前馈神经网络。

image.png

结合非线性激活函数,研究人员现在可以学习非线性函数并解决XOR问题,为神经网络研究的全新领域打开了大门。 进一步的研究表明神经网络是通用的近似,能够近似任何连续函数(但不保证网络是否正常可以学习表示函数所需的参数)。

反向传播算法是现代神经网络的基石.有效地训练神经网络并“教导”他们从错误中吸取教训。但即便如此,在由于(1)计算机速度慢(与现代机器相比)和(2)缺少大量标记的训练集,研究人员无法(可靠地)训练超过两个隐藏的层的神经网络,因为计算上是不可行的。

今天最新神经网络为深度学习,我们拥有更快,更专业的硬件,提供更多可用的训练数据。我们现在可以训练具有更多隐藏层的网络,能够进行分级学习,在较低层和更多层次中学习简单的概念,在较高层中的抽象模式。

应用深度学习到特征学习的典型例子是应用于手写字符识别的Convo-lutional神经网络(LeCun 1988)。通过顺序堆叠自动从图像中学习区分模式(称为“过滤器”)。网络较低级别的过滤器代表边缘和角落,而更高级别的图层使用边缘和角落来学习更有用的抽象概念以区分图像类。

在许多领域中,CNN现在被认为是最强大的图像分类器,是目前负责推动计算机视觉子领域的最先进技术。

分层特征学习

机器学习算法通常分为三个阵营 - 监督,无人监督和半监督学习。

在监督的情况下,机器学习算法被给予一组输入和目标输出。然后,该算法尝试学习可用于自动映射输入数据的模式 指向正确的目标输出。监督学习类似于让老师看着你参加考试。鉴于您以前的知识,您尽力在您的标记上标记正确的答案 考试; 但是如果你不对老师会指导你做一个更好的,让你更有根据的猜测下一次。

在无监督的情况下,没有任何提示关于输入是什么,机器学习算法试图自动发现。在这种情况下,我们的学生会尝试 将类似的问题和答案组合在一起,即使学生不知道正确的答案,老师也不提供真正的答案。无监督学习显然是比监督学习更具挑战性的问题。

过去我们手工衡量图像的内容 ,很少使用原始像素强度作为我们机器学习模型的输入。现在对于每个图像,我们执行了特征提取,并返回旨在量化内容的矢量。

image.png

局部二元模式(Local Binary Patterns),Haralick纹理[22]),形状(shape)、Zernike Moments [24])和颜色(color moments, color histograms, color correlograms)广发用于识别。

其他方法,如关键点检测器(keypoint detector)和局部不变描述符(local invariant descriptor)用于处理图像关键区域。

当我们的图像的视点角度和训练的分类器没有显着变化时,定向梯度直方图(HOG  Histogram of Oriented Gradient)非常擅长检测图像中的对象。

有一段时间,HOG及其变体引导了图像中物体检测的研究,如可变形零件模型( Deformable Parts Model)和范例SVM。

在深度学习中,特征提取由系统学习完成。

该有多深

我个人认为可以考虑任何具有两个以上隐藏层的网络为“深”。 image.png

我们现在有: 1.更快的电脑 2.高度优化的硬件(即GPU) 3.数百万张图像的大型标记数据集 4.更好地理解权重初始化函数以及什么/不起作用 5.卓越的激活功能和对前一非线性原因的理解

image.png

处理您自己的深度学习应用程序的建议:

1.您使用的是专门的网络架构,如卷积神经网络,回归神经网络或长期短期记忆(LSTM)网络?如果是的话,是的,你正在进行深度学习。 2.您的网络深度是否> 2?如果是的话,你正在深入学习。 3.您的网络深度是否> 10?如果是这样,你正在进行非常深入的学习。

不要太纠结于概念,无论如何你还在使用人工神经网络进行机器学习。

代码地址:https://github.com/whydna/Deep-Learning-For-Computer-Vision

注意不是: https://github.com/PacktPublishing/Deep-Learning-for-Computer-Vision

参考资料

links