计算机视觉与深度学习
1. 计算机视觉与深度学习的关系
长期以来,让计算机能看会听可以说是计算机科学家孜孜不倦的追求目标,这个目标中最基础的就是让计算机能够看见这个世界,让计算机能够像人类一样拥有眼睛,让它们也能看懂这个世界。
1.1 人类视觉神经的启迪
1.1.1 动物视觉实验
1958 年,DavidHubel 和Torsten Wiesel 在 JohnHopkins University,研究瞳孔区域与大脑皮层神经元的对应关系。他们在猫的后脑头骨上,开了一个3 毫米的小洞,向洞里插入电极,测量神经元的活跃程度。然后,他们在小猫的眼前,展现各种形状、各种亮度的物体。并且,在展现每一件物体时,还改变物体放置的位置和角度。他们期望通过这个办法,让小猫瞳孔感受不同类型、不同强弱的刺激。之所以做这个试验,目的是去证明一个猜测。位于后脑皮层的不同视觉神经元,与瞳孔所受刺激之间,存在某种对应关系。一旦瞳孔受到某一种刺激,后脑皮层的某一部分神经元就会活跃。经历了很多天反复的枯燥的试验,同时牺牲了若干只可怜的小猫,David Hubel 和Torsten Wiesel 发现了一种被称为“方向选择性细胞(Orientation Selective Cell)”的神经元细胞。当瞳孔发现了眼前的物体的边缘,而且这个边缘指向某个方向时,这种神经元细胞就会活跃。这个发现激发了人们对于神经系统的进一步思考。神经-中枢-大脑的工作过程,或许是一个不断迭代、不断抽象的过程。
1.1.2 视觉神经科学观点
从DavidHubel 和Torsten Wiesel 的视觉神经实验之后,视觉神经科学正式被人们所确立,截止目前,关于视觉神经的几个广为接受的观点有以下几点:
(1)大脑对视觉信息的处理是分层级的,低级脑区可能处理对边度,边缘什么的,高级脑区处理更抽象的比如人脸、房子、物体的运动之类的。信息被一层一层抽提出来往上传递进行处理。
(2)大脑对视觉信息的处理也是并行的,不同的脑区提取出不同的信息干不同的活,有的负责处理这个物体是什么,有的负责处理这个物体是怎么动的。
(3)脑区之间存在着广泛的联系,同时高级皮层对低级皮层也有很多的反馈投射。
(4)信息的处理普遍受到自上而下和自下而上的注意的调控。也就是说,大脑可能选择性的对某些空间或者某些特征进行更加精细的加工。
进一步的研究发现,当一个特定物体出现在视野的任意一个范围,某些脑部的视觉神经元会一直处于固定的活跃状态。从视觉神经科学的角度解释,就是人类的视觉辨识是从视网膜到脑皮层,神经系统从识别细微细小的特征演变为目标识别。对于计算机来说,如果拥有这么一个“脑皮层”对信号进行转换,那么计算机仿照人类拥有视觉就会变为现实。
1.2 计算机视觉的难点与人工神经网络
尽管在大量的研究下,人类视觉的秘密逐渐被揭露开,但是想要将这写想法和经验运用于计算机上却并不是那么简单。计算机的识别是机械化的,这样就导致即使读取的同一张图片,当光线不一样时,计算机判别的结果都有很大可能发生改变。对于计算机来说,识别两个独立的物体容易,但是在不同的环境下识别同一个问题就比较有难度。但是只有解决了后面这个问题,才算是比较完善的视觉系统。
计算机视觉的核心在于如何忽略同一个物体内部的差异而强化不同物体之间的分别,即同一个物体相似,而不同的物体之间有很大差异。
人工神经网络在20世纪60年代就产生萌芽,但是限于当时的计算机硬件资源,其理论只能停留在简单的模型之上,无法得到全面的发展和验证。
20世纪80年代人工神经网络具有里程碑意义的理论基础 “反向传播算法” 的发明,将原本非常复杂的链式法则拆解为一个个独立的、只有前后关系的连接层,并按各自的权重进行错误分配。
![](/qrcode.jpg)
反向传播算法:
BP算法(即反向传播算法)适合于多层神经元网络的一种学习算法,它建立在梯度下降法的基础上。BP网络的输入输出关系实质上是一种映射关系:一个n输入m输出的BP神经网络所完成的功能是从n维欧氏空间向m维欧氏空间中一有限域的连续映射,这一映射具有高度非线性。它的信息处理能力来源于简单非线性函数的多次复合,因此具有很强的函数复现能力。这是BP算法得以应用的基础。
随着研究的进一步深入,2006年,Geoffrey Hinton 在深层神经网络的训练上取得了突破。他首次证明了使用更多隐层和更多神经元的人工神经网络具有更好的学习能力。其基本原理就是使用具有一定分布规律的数据,保证神经网络模型初始化,再使用监督数据在初始化好的网络上进行计算,使用反向传播对神经元进行优化调整。
1.3 应用深度学习解决计算机视觉的问题
“带有卷积结构的深度神经网络(CNN)”被大量应用于计算机视觉之中。这是一种仿照生物视觉的逐层分解算法,分配不同的层级对图像进行处理。
什么是卷积?卷积就是两个函数之间的相互关系,然后得出一个新的值,他是在连续空间做积分计算,然后在离散空间内求和的过程。实际上在计算机视觉里面,可以把卷积当做一个抽象的过程,就是把小区域内的信息统计抽象出来。
CNN,特别是其基本原理与算法被视为计算机视觉的首选解决方案,深度学习应用于计算机视觉上还有更多优点:
(1)深度学习算法的通用性很强,在传统算法里面,针对不同的物体需要定制不同的算法。相比来看,基于深度学习的算法更加通用,比如在传统CNN基础上发展起来的faster RCNN,在人脸、行人、一般物体检测任务上都可以取得非常好的效果。
(2)深度学习获得的特征(feature)有很强的迁移能力。所谓特征迁移能力,指的是在A任务上学习到的一些特征,在B任务上使用也可以获得非常好的效果。
(3)工程开发、优化、维护成本低。深度学习计算主要是卷积和矩阵乘法,针对这种计算优化,所有深度学习算法都可以提升性能。
2. 计算机视觉学习的基础与研究方向
计算机视觉是一个专门教计算机如何去“看”的学科,更进一步的解释就是使用机器代替生物眼睛来对目标进行识别,并在此基础上做出必要的图像处理,加工所需要的对象。
2.1 计算机视觉结构图
可以把使用深度学习解决计算机视觉的问题归纳成一个结构关系图,如下图所示:
对于计算机视觉学习来说,选择一个好的训练平台是重中之重。因为对于绝大多数的学习者来说,平台的易用性以及便捷性往往决定着学习的成败。其次是模型的使用。除此之外,速度和周期也是需要考虑的一个非常重要的因素,如何使得训练速度更快,如何使用模型更快的对物体进行辨识,这是计算机视觉中非常重要的问题。
2.2 计算机视觉的学习方式
“给计算机连接上一个摄像头,让计算机描述它看到了什么。”这是计算机视觉作为一门学科被提出时就决定下来的目标。拿出一张图,上面是一只狗和一只猫,让一个人去辨识,无论图片上猫和狗的形象和种类如何,人类总是能够精确的区分图片是猫还是狗。而把这种带有标注的图片送到神经网络模型中去学习,这种学习方式称为“监督学习”。
虽然目前来说,在监督学习的计算机视觉领域,深度学习取得了重大成果,但是相对于生物视觉学习和分辨的“半监督学习”和“无监督学习”,还有更多更重要的内容亟待解决,比如视频中物体的运动、行为存在特定的规律;在一张图片里,一个动物也是有特定的结构的,利用这些视频或图像中特定的结构可以把一个无监督的问题转化为一个有监督的问题,然后利用有监督学习的方法来学习。这是计算机视觉的学习方式。
3. 写在后面
笔者刚刚进入该领域的学习,上述均为学习过程中记录的笔记,后期还会不断地更新文章,此文是该系列第一篇。上述内容均参照:深度学习与计算机视觉实战 王晓华版。或许在不久的将来,计算机视觉将会处理更多的问题,笔者欢迎志同道合的学习者一起探究各种问题。本文中如有不当之处,希望读者可以批评之,笔者必改正。如果本文对读者有帮助,希望读者们可以关注笔者一波。