1.1 计算机视觉与深度学习的关系
长期以来,让计算机能看会听可以说是计算机科学家孜孜不倦的追求目标,这个目标中最基础的就是让计算机能够看见这个世界,赋予计算机一双和人类一样的眼睛,让它们也能看懂这个美好的世界,这也是激励作者及所有为之奋斗的计算机工作者的主要动力。虽然目前计算机并不能达到动画片中变形金刚的十分之一的能力,但是技术进步是不会停止的。
1.1.1 人类视觉神经的启迪
20世纪50年代,Torsten Wiesel和David Hubel两位神经科学家在猫和猴子身上做了一项非常有名的关于动物视觉的实验(如图1-2所示)。
图1-2 脑部连入电极的猫
实验中猫的头部被固定,视野只能落在一个显示屏区域,显示屏上会不时出现小光点或者划过小光条,而一条导线直接连入猫的脑部区域中的视觉皮层位置。
Torsten Wiesel和David Hubel通过实验发现,当有小光点出现在屏幕上时,猫视觉皮层的一部分区域被激活,随着不同光点的闪现,不同脑部视觉神经区域被激活。而当屏幕上出现光条时,则有更多的神经细胞被激活,区域也更为丰富。他们的研究还发现,有些脑部视觉细胞对于明暗对比非常敏感,对视野中光亮的方向(不是位置)和光亮移动的方向具有选择性。
自从Torsten Wiesel和David Hubel做了这个有名的脑部视觉神经实验之后,视觉神经科学(如图1-3所示)正式被人们所确立。截至目前,关于视觉神经的几个广为接受的观点是:
- 大脑对视觉信息的处理是分层级的,低级脑区可能处理边度、边缘的信息,高级脑区处理更抽象的信息,比如人脸、房子、物体的运动之类的。信息被一层一层地提取出来往上传递进行处理。
- 大脑对视觉信息的处理也是并行的,不同的脑区提取出不同的信息,干不同的活,有的负责处理这个物体是什么,有的负责处理这个物体是怎么动的。
- 脑区之间存在着广泛的联系,同时高级皮层对低级皮层也有很多的反馈投射。
- 信息的处理普遍受到自上而下和自下而上的调控。也就是说,大脑可能选择性地对某些空间或者某些特征进行更加精细的加工。
图1-3 视觉神经科学
进一步的研究发现,当一个特定物体出现在视野的任意一个范围,某些脑部的视觉神经元会一直处于固定的活跃状态。从视觉神经科学的角度解释,就是人类的视觉辨识是从视网膜到脑皮层,神经系统从识别细微细小的特征演变为目标识别。对计算机来说,如果拥有这么一个“脑皮层”对信号进行转换,那么计算机仿照人类拥有视觉就会变为现实。
1.1.2 计算机视觉的难点与人工神经网络
尽管通过大量的研究,人类视觉的秘密正在逐渐被揭开,但是相同的想法和经验用于计算机上却并非易事。计算机识别往往有严格的限制和规格,即使同一张图片或者场景,一旦光线,甚至于观察角度发生变化,那么计算机的判别也会发生变化。对于计算机来说,识别两个独立的物体容易,但是在不同的场景下识别同一个物体则困难得多。
因此,计算机视觉的核心在于如何忽略同一个物体内部的差异而强化不同物体之间的分别(如图1-4所示),即同一个物体相似,而不同的物体之间有很大的差别。
图1-4 计算机视觉
长期以来,对于解决计算机视觉识别问题,大量的研究人员投入了很多的精力,贡献了很多不同的算法和解决方案。经过不懈的努力和无数次尝试,最终计算机视觉研究人员发现,使用人工神经网络用以解决计算机视觉问题是最好的解决办法。
人工神经网络在20世纪60年代就产生萌芽,但是限于当时的计算机硬件资源,其理论只能停留在简单的模型之上,无法得到全面的发展和验证。
随着人们对人工神经网络的进一步研究,20世纪80年代人工神经网络具有里程碑意义的理论基础“反向传播算法”的发明,将原本非常复杂的链式法则拆解为一个个独立的、只有前后关系的连接层,并按各自的权重分配错误更新。这种方法使得人工神经网络从繁重的、几乎不可能解决的样本计算中脱离出来,通过学习已有的数据统计规律,对未定位的事件做出预测。
随着研究的进一步深入,2006年,多伦多大学的Geoffrey Hinton在深层神经网络的训练上取得了突破。他首次证明了使用更多隐层和更多神经元的人工神经网络具有更好的学习能力。其基本原理就是使用具有一定分布规律的数据,保证神经网络模型初始化,再使用监督数据在初始化好的网络上进行计算,使用反向传播对神经元进行优化调整。
1.1.3 应用深度学习解决计算机视觉问题
受前人研究的启发,“带有卷积结构的深度神经网络(CNN)”被大量应用于计算机视觉之中。这是一种仿照生物视觉的逐层分解算法,分配不同的层级对图像进行处理(如图1-5所示)。例如,第一层检测物体的边缘、角点、尖锐或不平滑的区域,这一层几乎不包含语义信息;第二层基于第一层检测的结果进行组合,检测不同物体的位置、纹路、形状等,并将这些组合传递给下一层。以此类推,使得计算机和生物一样拥有视觉能力、辨识能力和精度。
图1-5 分层的视觉处理算法
因此CNN,特别是其基本原理和算法被视为计算机视觉的首选解决方案,这就是深度学习的一个应用。除此之外,深度学习应用于计算机视觉上还有其他优点,主要表现如下:
- 深度学习算法的通用性很强,在传统算法里面,针对不同的物体需要定制不同的算法。相比来看,基于深度学习的算法更加通用,比如在传统CNN基础上发展起来的faster RCNN,在人脸、行人、一般物体检测任务上都可以取得非常好的效果(如图1-6所示)。
- 深度学习获得的特征(feature)有很强的迁移能力。所谓特征迁移能力,指的是在A任务上学习到一些特征,在B任务上使用也可以获得非常好的效果。例如在ImageNet(物体为主)上学习到的特征,在场景分类任务上也能取得非常好的效果。
- 工程开发、优化、维护成本低。深度学习计算主要是卷积和矩阵乘法,针对这种计算优化,所有深度学习算法都可以提升性能。
图1-6 计算机视觉辨识图片