终于开始写计算机视觉了,很开心,因为这部分非常有意思,计算机视觉就相当于人类的眼睛嘛,有了眼睛是一件多么美好的事情啊!
声明:这部分内容我是参考了北邮的鲁鹏老师的视频,如果觉得我说不明白,可以到?1.前言.1080P_哔哩哔哩_bilibili?看鲁鹏老师的视频,老师的思路非常清晰,看完感觉自己都升华了。
说明:如果是看不懂这部分内容的小伙伴,那我觉得你是传统视觉部分的知识比较欠缺,所以看不懂,所以建议你从传统视觉看起,这部分内容可以参考我的博客?宝贝儿好-CSDN博客?,里面有一个二十多篇的OpenCV系列文章,各个知识点描述得非常详细和通俗,有了这个基础再回看这套视频就轻松很多。
1、理清几个概念:机器视觉、计算机视觉、深度视觉、传统视觉
我们首先要理清几个概念:
机器视觉一般指机器系统上使用的系统,比如机器人上的视觉系统、比如5G设备上的智能视觉系统、比如智能摄像头等,偏重于硬件设备,偏重于计算机视觉技术工程化。
计算机视觉就包括的非常广泛,一切从图片提取信息的技术都属于计算机视觉,此外还包括比如图像检索、图像处理(美颜、锐化、钝化、图片修补、抠图等等)也都属于计算机视觉,偏重于互联网领域。
深度视觉是和传统视觉相对应的。传统视觉是在深度学习之前,人们对图像处理技术的总称,后来随着深度学习的发展,深度学习的思想引入到视觉领域,就是深度学习和图像处理进行了融合,就是现在的深度视觉。
本课程偏重讲深度视觉,也就是深度学习领域的图像处理技术。也所以你要入门深度视觉,你得先有深度学习的基础和传统视觉的基础。而传统视觉的东西你可以参考我博客的opencv系列文章就掌握得差不多了。现在再回看我的那套笔记也还是自我感觉非常不错的。本部分深度视觉也将秉承这个认真的态度,尽量详细通俗。
2、应用领域
深度视觉可以说也是从图片中提取信息的一门技术。所以它可以应用于:
(1)图像组织,就是图像储存、搜索方面的,比如图像压缩、图像检索等,比如我们微信下载的图像先是个缩略图,当你想真正查看的时候才继续加载原图,这种图像压缩功能就可以用深度视觉技术来处理,后面会给大家展示相关代码的实现例子。
(2)图像处理,就包括的非常多,比如美颜、修复、图像拼接、更换背景等图像优化技术,比如提取特征等从图像提取信息的技术,这就非常非常多,这部分就是考验你对传统视觉和深度视觉各个零碎知识点的掌握程度。
(3)图像辅助识别,比如自动跟踪系统:物体追踪、姿态识别等;比如视觉识别系统:监控车牌、交通违规识别、人脸识别等;比如医疗辅助视觉识别系统;比如精准制导系统,导弹制导刚开始是沿着GPS制导的线路,到达目的地的时候就启用的是视觉匹配系统,看目标图像和它拍摄的图像是否一致,不一致就进行调整,一致就精准打击。这个阶段就是导弹打击的最后的精确制导阶段。但是图像不是可见光图像,都是红外成像图像,是雷达扫描成像的图像。除此之外还有比如星云图像、气象图像,都是深度视觉的处理对象。这部分就是极度考验你深度视觉知识的掌握程度。
3、涉及到的学科及相关课程
1、如何看待智能?
计算机视觉也是人工智能AI的一部分,所以先聊聊什么是智能。
1997年,IMB开发的深蓝,打败象棋世界冠军卡斯帕罗夫,轰动一时。但其背后就是搜索和穷举。
2016年,谷歌旗下DeepMind公司开发的Alpha go,打败围棋世界冠军李世石,2017打败世界冠军柯洁。围棋比象棋要灵活很多,接近我们人类认为的智能。而alpha go背后的主要工作原理是深度学习和强化学习。但是能进行深度学习和强化学习也是建立在海量数据、巨大技术资源GPU的基础上才能实现的,其本质还是更快的搜索、更快的穷举。
那什么是智能?比如人类可以作诗,现在虽然用RNN训练出来的模型可以写诗,而且写得诗在对称、平仄、押韵方面都非常优秀,但是是没有灵魂、没有思想!这就是目前的机器智能。我们现在讲的计算机视觉技术的演进也是在这种智能基础之上进化的。
2、人类视觉系统
最早研究人类视觉系统的是Hubel和Wiesel,这两个人是医学工作者,他们最开始只是想知道人眼看到物体后,在人类大脑的哪个地方处理这个信号。所以在1959年,他们就找很多猫进行实验,把猫的大脑开一个小洞,然后贴上一些电极,然后用一些图片去刺激这些猫,看猫大脑哪些区域有电流响应。
刚开始他们拿很多猫的食物,比如鱼什么的,让这些猫看,很失望,猫没反应。然后他们又拿很多其他猫的图片让猫看,这些猫也没反应,他们很失望,难道猫的大脑皮层不处理猫眼看到的图像?
但是无意间他们发现,给猫看一些简单的线条,有的猫的大脑皮层细胞对这些线条的方向比较感兴趣,就是有响应呀。而且他们的到规律:猫大脑皮层的某个细胞只对某个一个方向的线条感兴趣,如果把线条方向换一下,另外其他的某一个细胞对这个方向感兴趣,就是不同细胞只对它特定的方向感兴趣!除此之外,他们还得到规律:大脑深层的复杂细胞对运动的线条有反应,而且大脑更深层更复杂的细胞不仅对线条的运动有反应还对线条的起始点、终端点、边缘处也有反应。所以他们得出人类视觉系统的一个结论:人类大脑处理视觉信息是分层的,就是先用简单的细胞从处理简单的边缘开始,然后用更复杂的细胞再逐步去处理更复杂的东西。也正是这个实验Hubel和Wiesel在1981年获得了诺贝尔医学奖。这也是人类最早对自身视觉系统的研究。
这里再给大家展示一个特别神奇的人类视觉的例子:
不知道你们的眼神怎么样,反正我看上图左图的A、B两处的颜色是非常不同的,A处深B处浅。但是真的很奇幻,上图左图右下角的两个小截图,是我截屏截取的A处和B处的一个小截图,你再看,这个两个小截图的颜色竟然一模一样!就是其实AB处的颜色就是一样的!上图中间图就是用和AB处颜色一样的背景覆盖到左图上后,AB的颜色,是不是也是一样的!
这就是人类的视觉系统!它会自适应的把周围都是亮色的A的视觉感受调低,让你可以看到A。自动把周围都是暗色、并且处于阴影处的B,自动调亮,让你分辨出它和周围的不一样而看清它!
怎么可以让眼睛和大脑联合起来这样愚弄我?!一怒之下我就把把左图又拷贝了一份,我把所有的格子都截了个小图,就是右图,大家自己看看规律,我也说不清了。
但有没有想过,这是一个人类的bug呀,明明AB两处的像素值是一样的,大脑却给出了色彩不一样的判断!就是我的眼睛和大脑没有给我反馈一个真实客观的世界!虽说这个bug是有利有弊的,利就是让我分辨的能力更强了,弊是,对于同一个客观存在的、不变的对象,可能不同的人、或者同一个人,在不同时空下看到的可能都是不同的!眼见不为实了!我看到的不是真实客观的世界了!都有点玄学了,细思极恐啊。。。
人类视觉系统这部分内容是鲁鹏老师讲的,我是觉得特别有意思,所以这里再放一个关于人类世界系统的魔幻例子:
这幅图叫没有移动的运动。就是这幅图是个静态图,有没有小伙伴像我一样,看着都是在转转转。。。
鲁鹏老师说是人类大脑的某块神经出了问题。。。
3、计算机视觉体系
计算机视觉的起源一定是人类研究人类自身视觉系统后的启发,就好比观察小鸟而发明飞机一样。所以讲机器视觉的时候经常要和人类视觉系统进行类比讲。
(1)摄像头,就类似人类的眼睛,是图像数据的采集过程。
(2)深度学习模型,就类似人类的大脑,图像传入大脑,大脑对图像做出回应。
但是这样的类比某些方面是有共通的地方的,但也实在是太粗糙了。因为人类是碳基生物,计算机是硅基生物,而且人类自己都没弄明白自己是怎么通过眼睛看到东西并回应的,而且计算机(摄像头)看到的东西和我们人类不一样啊,摄像头看到的都是数字而已,就是感光传感器根据光线的强弱,通过物理效应得到不同数量的光子,然后把每个像素的光子个数数一数而已。同理,你把深度学习模型和人类大脑比更是类似对比石头的智商和动物智商的关系,就是风马牛不相及的差别程度。
所以计算机视觉应该有它自己的一套体系,这套体系就不一定非得是和人类视觉一样的逻辑,这就好比,机器下围棋的逻辑(穷举)是完全不同于人类的围棋棋谱的,就是完全是不同的维度的事情。但虽然维度不同,都能达到下围棋的目的。对这件事情的理解,我最大的感受就是第一次学计算机的时候,原来敲一下回车的背后其实是定义好的一串01,原来全部都是单调的01可以表示出数字、字符、图片、视频、音频等等的缤纷世界。。。感觉就是不一个维度的样子。再想想计算机底层的芯片,有人说做芯片就是在头发丝上盖大楼,我理解这就是不同的维度。。。
那如何建立这套体系?下面聊聊计算机视觉的起源和发展历程:
这是Larry Robers的博士论文,就是从图像a中恢复一个三维实体c。这可以说是计算机视觉的最早研究成果了。而且Larry Robers做的这个三维实体恢复也做得非常好,但是可能是他感觉限于当时技术和条件,三维重构也只能做到这个程度了,后来他就转向了计算机,牛人在那里都是牛人,他后来成了互联网之父!
而真正把计算机视觉作为一个学科独立出了的是1966年的这个事件:MIT的计算机科学家明斯基给他本科生的一个“暑期视觉项目”,就是让学生建一个系统,这个系统就是把照相机拍出来的照片描述出来。当时从感觉上讲,这个项目不难,但是实际一做,大家都发现不知所措,研究的方向是什么?怎么研究?从哪儿开始研究?研究方法、指导思想、甚至存在什么问题、要研究什么、难点在哪儿都说不清,从此在研究领域,人们就把计算机视觉和图像处理分开,成了两个不同的研究方向。而计算机科学家马文·明斯基(Marvin Lee Minsky)也因首次提出人工智能(Artificial Intelligence)这一概念,1969年度被授予图灵奖。我们一般认为这个事件是计算机视觉的真正起源。
而行业发展的先驱则大卫马尔:
为什么说马尔是计算机视觉的先驱?因为这个对人类而言感觉是显而易见的事情,但去做又是一个无从下手的尴尬问题。虽然科学家们一直在努力,但却一直处于懵逼状态中,直到马尔的出现,从框架上扫除了迷茫,所以说他是先驱一点不为过。
马尔是把计算机视觉问题分层了,就是分层次的解决问题。他分成了三个层次:
(1)计算理论:就是你要计算什么,因为你的问题一定要转化成数学计算才能算,那你计算的已知是什么、约束是什么。只有先弄明白这些才能计算。
(2)表达和算法:知道要计算什么,以及计算的约束后,就要知道你输入、输出、中间信息如何表达,以及输出的期望是什么。就是你的输入输出以及中间变量如何表示,就是图像如何表示的问题。而且你期望的输出是什么,比如你期望输出是语义:这是天空这是草地等等,这些都是文字,这些文字如何表示成计算机能够理解的东西。也就是输入输出以及中间信息的如何表示,而算法是实现这个表示的。
(3)硬件实现:你的表示和算法如何映射到计算机硬件上。反过来说就是计算机硬件怎样才能实现你的表达和算法。比如现在的CPU、GPU、多核结构就是对这个问题的实现。比如你想用GPU那你就要想办法把数据转化成矩阵的形式,这样计算速度就极大的提升了。也所以现在的深度学习都是最后要变成矩阵和矩阵的乘法,或者是矩阵和矩阵的加法,因为这样更适配硬件,速度更快。
这三个层次我们用现在的视角来看,似乎理所当然,但是在当时的条件下,是一个思想层面的指导,非常大的价值。其中马尔认为第二个层次的工作是最难的,所以他后面把第二个层次又分成三个阶段:
第一个阶段也是提取边缘,就是提取简单的东西。第二个阶段是理解提取的线条,就是线条转化成有语义概念的东西。第三个阶段是通过概念恢复图像在现实中的真实3D结构。
也就是这些前人的贡献,我们现在已经非常明确知道计算机视觉的目标:
跨越“语义鸿沟”建立像素到语义的映射,也就是建立从数字矩阵到语义的映射关系。所以研究如何跨越语义鸿沟就成为了计算机视觉的研究目标和方向。?
当前的研究进展:
(1)重建三维模型 摆不同角度的摄像机就可以步骤不同角度三维点的运动,就可以做不同的表情了。运动捕捉motion capture
(2)三维场景重建。无人机上空不同角度拍照一圈,就可以恢复真实场景,比如谷歌街景。无人驾驶技术、slam技术
(3)人脸检测。笑脸识别,辅助拍照等,但用的都是adaboost方法。
(4)生物识别。比如虹膜识别、指纹识别都已经非常成熟了,都没人研究了,只剩工程化了。
(5)街景识别。比如输入门牌号就可以在谷歌街景上搜索出来。
(6)家用机器人。扫地机器人最主要的就是视觉系统,可以边扫边重建三维场景地图,就可以定位、路径规划等。
(7)视觉搜索。手机拍照识别,商品推荐。
(8)智能穿戴。
(9)无人零售。
(10)人机交互。姿势识别。
(11)增强现实。虚拟现实,就是把虚拟东西添加到图片。
(12)视觉系统:全景拼接、三维地形建模、障碍物检测、位置跟踪。
计算机视觉目前从大的方向看就是两个分支:一个是三维结构重建,另一个就是语义理解。而语义理解任务中的最基础任务就是图像分类任务,也叫图像识别。与图像识别任务相关的、或者衍生的任务有:目标检测、图像分隔、图像描述、图像生成等。
图像分类就是给计算机输入一张图像,让计算机输出这张图像是什么,比如是狗是猫,这种任务这是分类任务。
目标检测是,要求计算机不仅要告诉我这张图像是什么,还告诉我们这个东西在图像的哪里,就是返回要识别的东西的坐标点。
图像分隔,也就是上图的语义分隔,就是从像素级别,让模型告诉我这个图像上所有的像素点都分别属于哪一类。
实例分隔是不仅要像素级别的分隔,还要识别出分隔后的对象是什么,比如上图的是狗1还是狗2还是狗3。
图像描述是,输入一张图像返回这张图像的描述文字,这个任务就涉及到NLP。
图像生成是从无到有生成一张目标图片,用的是图像生成技术,比如GAN、自动编码器等。
最后:计算机视觉的学习路径??
虽然不同类型的任务有不同的解决方案,但图像分类是所有其他任务的基础。所以我们学习也是按照:图像分类--图像检测--图像分隔--图像描述--图像生成这样的顺序开始学。
而对于图像分类,目前最有效的工具就是卷积神经网络CNN,就是本系列的重点讲解内容。基础的地基打扎实了,后面RNN、变分自编码网络、生成对抗网络就会迎刃而解。
CNN、RNN、变分自编码网络、生成对抗网络都是工具,你要重点弄清这些工具的背后原理和思想。那么你在明确自己的任务后,你就会知道思考问题的方式、用什么思路、用什么工具去完成和优化你的任务。