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 计算机视觉辨识图片