关于计算机视觉(随谈)
http://blog.csdn.net/zouxy09
之前看了这么一本说自然图像统计学的书,本来是想着要好好看,然后每天翻译几页的。但实习的时候太忙了,没有什么时间,所以只把目录给翻译了,哈哈。这本书叫:Natural Image Statistics: A Probabilistic Approach to Early Computational Vision大家可以瞧瞧。不过,看到里面视觉概述的时候,自己也想扯扯点东西,按捺不住,就吐了不少文字。如果有什么不对的地方,也还希望大家不吝指正,谢谢。
一、什么叫视觉Vision?
什么叫视觉?可能这个问题的第一反应就是:不就是看东西么。好吧,那么高大上的问题就被这么轻描淡写了。看东西不是目的,目的是看到后知道是个什么东西,然后基于这种物体与事件的联系服务于高层意识理解。哈哈,瞬间档次又拉上去了。个人浅见,目前大体视觉可以分为生物视觉和机器视觉。生物视觉就是有眼睛的动物能什么看东西的。例如喵星人、汪星人还有地球人啥的。每种动物的视觉感官不同,能感受的光波长也不同。我们如果可以知道它们是怎么工作了,就可以借鉴着做出具有类似强大功能的设备了。这其中涉及到的东西有很多,它们的视觉流是怎样的?包含怎么接受光信号的输入,到如何逐级的提取信息,再到高层的推理,还有高层到底层的反馈等等。有的已经被解密了,有的还犹抱琵琶半遮面,也的神秘依旧。遗憾的是,后者的比重更大。
目前来说,大家最感兴趣的还是人的视觉系统。它实在是太强大了,但却又太神秘,使得众多探秘者倾注心血也只能窥知一二。不过也还是有令人欣慰的消息可以传出,然后对某些成果,也有种能用之一二,受用一生的感觉。哈哈。
人脑中大约70%的信息是来自于眼睛。大概20-30%的皮层区域是拿来做视觉处理的。生物视觉的最终目标还是想把人的视觉系统彻底告破于天下。嗯,理想是应该丰满点。那机器视觉又是啥呢?就是机器看东西嘛。因为内在的平台还是计算机,所以叫计算机视觉。Computer Vision!它属于人工智能里面很核心的一部分。机器要像人一样,会看,会听,会说,会学习,会思考等等。其中,像人一样,视觉的信息的比重依旧是最大的。所以计算机视觉的重要性毋庸置疑。计算机视觉研究的终极目标也是如何让机器具有人一样的视觉!这听起来就挺难的是吗?嗯,之前人工智能的发展实在太缓慢了,近几年Deep Learning的出现、大数据和大机器的支撑才给人工智能的发展稍微推进了一段距离,但还有很远的路要走。很远。
好了,视觉是啥?视觉就是看东西,呃,不是很专业。视觉是为了获取关于环境中物体和事件的信息,从物体发射或者反射出来的光中提取信息的过程。所以我们第一件需要考虑的事情是,这些信息在什么形式的时候才是有效的?
物体发出或者反射的光会被收集和度量,当然了,这里没有特定任务的信息提取的处理。生物视觉系统和人工视觉系统都通过同一种方式来完成这第一个步骤,也就是将这些光投影到一个二维的图像中。对于人眼和摄像头,虽然存在不少差别,但图像信息的处理基本是相同的。通过非常多的感光的细胞或者感光的原件接受光,然后将这些光的强度变成一个二维图像。然后图像的每个点的光强度就保存了某种信息。
一般来说,投影图像还具有时间和彩色的维度。但我们大部分关注静态和灰度的图像。这个图像可以表示为二维的标量函数I(x,y),也就是给定每个位置(x,y),会得到一个对应的灰度值I(x,y)。尽管位置和灰度值都应该是连续的,但典型的情况是离散采样。也就是说x和y是整数,而灰度值在每个点采样。在数字系统中,采样一般也是矩形。但实际上,生物系统中的空间采集采样并不是矩形的,甚至是无规律的。
视觉就是从这种图像数据中提取信息的。物理环境的信息包含在这个图像中的,但很遗憾,是隐含着的。视觉系统必须将这种隐含的信息变换成明确的形式,例如识别环境中的物体。但这不是一件容易的事情。
二、人类视觉系统的魔法
视觉是个非常棘手的任务。尽管这对搞视觉的人来说没什么可以惊讶的,但对其他人来说,他们可能会觉得非常惊讶,他似乎没有意识到自己与生俱来的双眼是如此的强大和不可复制。因为他几乎毫不费力的无时无刻的既有效又快速执行这个任务。但实际上在你看我的文字的时候,你大脑的整个计算过程是非常复杂的,但可惜呀,我们一般只在乎这个结果,大脑直接给我们它的计算结果,而没有告诉我们它完成这个是多么的辛苦。默默无闻,以使得被忽略和遗忘。
为了说明视觉的难度,我们看下图。其实一个度量后的图像就是这样子的,每个空间位置有个光的强度值。那请你告诉我,下面这幅图像是个啥?你可以破解吗?
OK,我知道这个对大家很难,那我们看看他究竟是啥,我们把每个方块的数字换成同等幅度的灰度。瞬间清晰了,有木有,这是一张男人的脸!虽然眼睛接收到的就是上面的那些类似数字之类的东西,但我们的视觉系统把这些数字都变得有意义了,然后发现了真实世界的物体。
到目前为止,我们做了大量惨绝人寰的简化。实际上人的视网膜的光接收器是可以接收不同波长的光的,同时我们一般是双眼看世界,而不是只用一个。还有一个最大的差别是,我们是看动态的图像,而不是静态的。相机是一次成像,而人眼则是眼睛和大脑的组合,眼睛持续不断把图像信息传递给大脑,并且眼睛在不挺的转动,让高分辨率的感应区域扫过对象的各个细节。大脑把所获得的信息进行动态累加,就得到了我们所感觉到的图像了。你惊呼,差点被忽悠了。但这些差别并没有改变一个事实,就是光信息的确是通过上图那么的数据展示的。所以视觉系统的使命就是读懂这些数据。
大部分凡人都会同意说,这些任务刚看起来会很难,但经过一定的思考后,就会觉得应该没那么难吧?图像灰度的边缘不是可以检测出来吗?只要找到小数字和大数字相邻的地方就是边缘了呀。嗯,是的,边缘特征检测的方法目前已经可以公式计算和实现了。那边缘得到了,将这些边缘片段连接到一起,那物体的轮廓或者说某种直观的物体表达形式是不是就出来了呢?嗯,你是聪明的,这种直观的想法造就了目前很多计算机视觉的算法。很遗憾的是,这些算法在一些合成图像或者一些在高度限制环境中的图像才有好的表现,但对于无约束的自然图像来说,他们的表现就很一般。经过多年的研究,有一个结论:real-world images is extremely difficult!就算是找到物体轮廓这样一个任务也变得非常困难,因为一般物体的轮廓在物理世界中是不够清晰的,如下图:
这不就是一个杯子吗?你看,你看,你就只在乎结果!!!我们慢慢分析下嘛。图中放大了两个地方,一个是本来杯子有边缘的地方,在图像中却没有了边缘,因为背景和杯子很像,边缘不清晰了。另一个是本来杯子没有边缘的地方,在图像中因为光照的关系,却变得有边缘了。这无中生有,有中化无,大自然的招数,怎么破!
也许这还不能说服你。我们看看下图。我们教小孩子识图的时候,是不会拿个这么变态的图来吓他的。但不拿这个给你看,是说服不了你的。说服什么?就一点:视觉有多难,你的视觉系统有多牛掰!
我们再看看下面的人脸:
不要惊讶。实际上一个小孩在六岁之前,就已经认识一万到三万类的物体了。而这个物理世界,大约也就是三万种物体。你说,目前的算法如何才能够强大到囊括这三万种物体(包括能识别它们在所有环境下的所有形态)。那你会想,那人为什么可以呢?你终于问出这个问题了,累觉不爱。因为人有种能从少量样本学习的能力!一类物体,变化万千。但人只要认识其中一两个,剩下的就不攻自破了。融会贯通,举一反三,乃人类与生俱来的才能!说这个好像又没什么实际意义,是吧。要怎么利用这个来指导目前的视觉才是王道。但鄙人才疏学浅,往下就讲不了了。这也是生物视觉和机器视觉研究者穷尽一生想要共同探索的神秘世界。希望有生之年,能瞥见这美丽的星空吧。
我有时候会想。人从呱呱坠地开始,花了六年的时间,来建立自己强大的大脑,也就是硬件设施。在这里,我还是要对人脑的硬件设备惊叹一番。据了解(这三个字就表示了不知道对不对,呵呵),人脑的CPU主频是320GHZ,目前电脑因为半导体工艺的限制,能做到3GHZ左右每个CPU核。所以咱们搞个300个CPU就可以了么?NO,NO。要运算,每个CPU之间还得通信,访问内存数据等,这些通信带宽的限制才是这种大集群的最大瓶颈。但人脑呢?它的存储体您得按斤算,哈哈。据猜测(哈哈,这算严谨么),人脑存储大概10^15GB,这还不是牛的,最牛的来了,这些空间可以作为内存和缓存使用!不要问我这代表什么了!怀疑怀疑为什么自己老忘记前天老师上课讲的东西,我昨天还记得的啊,怎么就忘了呢,这海马体废了么!哈哈,可能是忘了保存到硬盘了!然后大脑一死机,就没有了!所以记得每天要记得好好吃饭,补充能量。再来膜拜下人眼。人眼是很不可思议的精密系统,它能自动对焦,曝光自动补偿,自动运动模糊处理,目前所有让凡人穷三代的单反都望尘莫及的!还包括免费赠送的夜视功能……最神奇的是,实现这些功能,不需要升级windows和安装任何驱动,不需要耗电!每个人出生的时候就被装配了所有这些功能。所以在这里也呼吁大家好好珍爱如此高档的设备吧,追剧不要太晚,打游戏不要太晚,上班看电脑多用眼药水,哈哈。
扯远了。回来说说大脑的系统和软件吧。我们除了睡觉的时间,每时每刻都在接收输入,然后通过自己强大的硬件设施来处理输入。非常关键的一点是,大脑里面会慢慢的建立历史学习到的东西的知识关联库。随着知识的扩充与完善,大脑的网络越来越复杂。神经元个数,神经元连接的个数,千丝万缕却又理不清。但对于计算机呢?我们的硬件设施呢?最牛掰的就是超算了。我们也建立了一个很大的网络,与人的大脑相当的网络,然后期待着几天、几个月的时间就可以让我们的计算机能达到人脑的水平,这会不会太苛刻了呢?当然了,这其中有几点不公平对比的差别。一是大脑的高层结构和运作机制实际上是不清晰的,所以目前计算机所做的高层模拟是否与大脑高层类似,这个也没有答案。二是到底是计算机快还是人脑快?做同样的事情,超算运作需要消耗一个城市一个月的电量,但人脑只需要你吃个鸡腿补充下就好了。OK,what is your point?! I am Sorry!
生物上的启发对计算机视觉的研究者是非常重要的。很多视觉的处理过程和算法就是模拟生物视觉系统来进行设计的,而且也显示出了有效性。但到目前为止,人类对自身大脑所知还是九牛一毛,更谈不上对视觉更有力的指导了。但实际上,视觉计算理论和生物界实验没有什么谁靠谁,谁欠谁的说法。这里面官方点算就是相辅相成:视觉计算理论可以指导生物实验性研究,实验性研究结果又可以指导计算理论的研究。
好了,不说了。