计算机视觉如何入门

版权声明:本文为博主原创文章,转载请一定附上博主原文链接,并署名转自ZeroZone零域。 https://blog.csdn.net/ksws0292756/article/details/78881839

以下内容整理自 2017 年 6 月 29 日由“趣直播–知识直播平台”邀请的嘉宾实录。
分享嘉宾: 罗韵

目前,人工智能,机器学习,深度学习,计算机视觉等已经成为新时代的风向标。这篇文章主要介绍了下面几点:
第一点,如果说你要入门计算机视觉,需要了解哪一些基础知识?

第二点,既然你要往这方面学习,你要了解的参考书籍,可以学习的一些公开课有哪些?

第三点,可能是大家都比较感兴趣的,就是计算机视觉作为人工智能的一个分支,它不可避免的要跟深度学习做结合,而深度学习也可以说是融合到了计算机视觉、图像处理,包括我们说的自然语言处理,所以本文也会简单介绍一下计算机视觉与深度学习的结合。

第四点,身处计算机领域,我们不可避免的会去做开源的工作,所以本文会给大家介绍一些开源的软件。

第五点,要学习或者研究计算机视觉,肯定是需要去阅读一些文献的,那么我们如何开始阅读文献,以及慢慢的找到自己在这个领域的方向,这些都会在本文理进行简单的介绍。

1.基础知识

接下来要介绍的,第一点是计算机视觉是什么意思,其次是图像、视频的一些基础知识。包括摄像机的硬件,以及 CPU 和 GPU 的运算。
在计算机视觉里面,我们也不可避免的会涉及到考虑去使用 CPU 还是使用 GPU 去做运算。然后就是它跟其他学科的交叉,因为计算机视觉可以和很多的学科做交叉,而且在做学科交叉的时候,能够发挥的意义和使用价值也会更大。另外,对于以前并不是做人工智能的朋友,可能是做软件开发的,想去转型做计算机视觉,该如何转型?需要学习哪些编程语言以及数学基础?这些都会在第一小节给大家介绍。

1.0 什么是计算机视觉

计算机视觉是一门研究如何使机器“看”的科学。
更进一步的说,就是指用摄影机和电脑代替人眼对目标进行识别、跟踪和测量等机器视觉,并进一步做图形处理,使电脑处理成为更适合人眼观察或传送给一起检测的图像
作为一个科学学科,计算机视觉研究相关的理论和技术,视图建立能够从图像或者多维数据中获取“信息”的人工智能系统。
目前,非常火的VR、AR,3D处理等方向,都是计算机视觉的一部分。
计算机视觉的应用

  • 无人驾驶
  • 无人安防
  • 人脸识别
  • 车辆车牌识别
  • 以图搜图
  • VR/AR
  • 3D重构
  • 医学图像分析
  • 无人机
  • 其他

了解了计算机视觉是什么之后,给大家列了一下当前计算机视觉领域的一些应用,几乎可以说是无处不在,而且当前最火的所有创业的方向都涵盖在里面了。其中包括我们经常提到的无人驾驶、无人安防、人脸识别。人脸识别相对来说已经是一个最成熟的应用领域了,然后还有文字识别、车辆车牌识别,还有以图搜图、 VR/AR,还包括 3D 重构,以及当下很有前景的领域–医学图像分析。
医学图像分析他在很早就被提出来了,已经研究了很久,但是现在得到了一个重新的发展,更多的研究人员包括无论是做图像的研究人员,还是本身就在医疗领域的研究人员,都越来越关注计算机视觉、人工智能跟医学图像的分析。而且在当下,医学图像分析也孕育了不少的创业公司,这个方向的未来前景还是很值得期待的。然后除此之外还包括无人机,无人驾驶等,都应用到了计算机视觉的技术。

1.1图像和视频,你要知道的概念

  • 图像
    一张图片包含了:维数、高度、宽度、深度、通道数、颜色格式、数据首地址、结束地址、数据量等等。
    • 图像深度:存储每个像素所用的位数(bits)
      • 当一个像素占用的位数越多时,它所能表现的颜色就更多,更丰富。
      • 举例:一张400*400的8位图,这张图的原始数据量是多少?像素值如果是整型的话,取值范围是多少?
        1,原始数据量计算:400 * 400 * ( 8/8 )=160,000Bytes
        (约为160K)
        2,取值范围:2的8次方,0~255
    • 图片格式与压缩:常见的图片格式JPEG,PNG,BMP等本质上都是图片的一种压缩编码方式
      • 举例:JPEG压缩
        1,将原始图像分为8*8的小块,每个block里有64pixels。
        2,将图像中每个8*8的block进行DCT变换(越是复杂的图像,越不容易被压缩)
        3,不同的图像被分割后,每个小块的复杂度不一样,所以最终的压缩结果也不一样
  • 视频
    原始视频=图片序列。
    视频中的每张有序图片称为“帧(frame)”。压缩后的视频,会采取各种算法减少数据的容量,其中IPB就是最常见的。
    • I帧:表示关键帧,可以理解为这一幅画面的完整保留;解码时只需要本帧数据就可以完成(因为包含完整画面)
    • P帧:表示的是这一帧跟之前的一个关键帧(或P帧)的差别,解码时需要用之前缓存的画面叠加上本帧定义的差别,生成最终画面。(也就是差别帧,P帧没有完整画面数据,只有与前一帧画面差别的数据)
    • B帧表示双向差别帧,记录的本帧与前后帧的差别(具体比较复杂,有4种情况),换言之,要解码B帧,不仅要取得之前的缓存画面,还要解码之后的画面,要通过前后画面与本帧数据的叠加取得最终的画面。B帧压缩率高,但是解码比较麻烦。
    • 码率:码率越大,体积越大;码率越小,体积越小。
      码率就是数据传输时单位时间传送的数据位数,一般我们用的单位是kbps即千位每秒。也就是取样率(并不等同于采样率,采样率用的单位是Hz,表示每秒采样的次数),单位时间内取样率越大,精度就越高,处理出来的文件就越接近原始文件,但是文件体积与取样率是成正比的,所以几乎所有的编码格式重视的都是如何用最低的码率达到最少的失真,围绕这个核心衍生出来cbr(固定码率)与vbr(可变码率),码率越高越清晰,反之则画面粗糙而且多马赛克。
    • 帧率
      影响画面流畅度,与画面流畅度成正比:帧率越大,画面越流畅;帧率越小,画面越有跳动感。如果码率为变量,则帧率也会影响体积,帧率越高,每秒钟经过的画面就越多,需要的码率也越高,体积也越大。
      帧率就是在一秒钟时间里传输的图片的帧数,也可以理解为图形处理器每秒钟刷新的次数。
    • 分辨率
    • 影响图像大小,与图像大小成正比;分辨率越高,图像越大;分辨率越低,图像越小。
    • 清晰度
      在码率一定的情况下,分辨率与清晰度成反比关系:分辨率越高,图像越不清晰,分辨率越低,图像越清晰
      在分辨率一定的情况下,码率与清晰度成正比关系:码率越高,图像越清晰;码率越低,图像越不清晰
    • 带宽、帧率
      例如在ADSL线路上传输图像,上行带宽只有512Kbps,但要传输4路CIF分辨率的图像。按照常规,CIF分辨率建议码率是512Kbps,那么照此计算就只能传一路,降低码率势必会影响图像质量。那么为了确保图像质量,就必须降低帧率,这样一来,即便降低码率也不会影响图像质量,但在图像的连贯性上会有影响。

1.2摄像机

摄像机的分类:

  • 监控摄像机(网络摄像机和摸你摄像机)
  • 不同行业需求的摄像机(超宽动态摄像机、红外摄像机、热成像摄像机等)
  • 智能摄像机
  • 工业摄像机

当前的摄像机硬件我们可以分为监控摄像机、专业行业应用的摄像机、智能摄像机和工业摄像机。而在监控摄像机里面,当前用的比较多的两个类型一个叫做网络摄像机,一个叫做模拟摄相机,他们主要是成像的原理不太一样。
网络摄像机一般比传统模拟摄相机的清晰度要高一些,模拟摄像机当前应该说是慢慢处于一个淘汰的状态,它可以理解为是上一代的监控摄像机,而网络摄像机是当前的一个主流的摄相机,大概在 13 年的时候,可能市场上 70% 到 80% 多都是模拟摄像机,而现在可能 60% 到 70% 都是的网络摄像机。
除此之外,不同的行业其时会有特定的相机,想超宽动态摄像机以及红外摄像机、热成像摄像机,都是在专用的特定的领域里面可能用到的,而且他获得的画面跟图像是完全不一样的。如果我们要做图像处理跟计算机视觉分析,什么样的相机对你更有利,我们要学会利用硬件的优势。
如果是做研究的话一般是可以控制我们用什么样的摄相机,但如果是在实际的应用场景,这个把控的可能性会稍微小一点,但是在这里你要知道,有些问题可能你换一种硬件,它就能够很好的被解决,这是一个思路。
还有些问题你可能用算法弄了很久也没能解决,甚至是你的效率非常差,成本非常高,但是稍稍换一换硬件,你会发现原来的问题都不存在了,都被很好的解决了,这个就是硬件对你的一个新的处境了。
包括现在还有智能摄像机、工业摄像机,工业摄像机一般的价格也会比较贵,因为他专用于各种工业领域,或者是做一些精密仪器,高精度高清晰度要求的摄像机。

1.3 CPU和GPU

接下来给大家讲一下 CPU 跟 GPU,如果说你要做计算机视觉跟图像处理,那么肯定跳不过 GPU 运算,GPU 运算这一块可能也是接下来需要学习或者自学的一个知识点。
因为可以看到,当前大部分关于计算机视觉的论文,很多实现起来都是用 GPU 去实现的,但是在应用领域,因为 GPU 的价格比较昂贵,所以 CPU 的应用场景相对来说还是占大部分。
而 CPU 跟 GPU 的差别主要在哪里呢? 它们的差别主要可以在两个方面去对比,第一个叫性能,第二个叫做吞吐量。
性能,换言之,性能会换成另外一个单词叫做 Latency(低延时性)。低延时性就是当你的性能越好,你处理分析的效率越高,相当于你的延时性就越低,这个是性能。另外一个叫做吞吐量,吞吐量的意思就是你同时能够处理的数据量。
而 CPU 跟 GPU 的差别在哪里呢?主要就在于这两个地方,CPU 它是一个高性能,就是超低延时性的,他能够快速的去做复杂运算,并且能达到一个很好的性能要求。而 GPU是以一个叫做运算单元为格式的,所以他的优点不在于低延时性,因为他确实不善于做复杂运算,他每一个处理器都非常的小,相对来说会很弱,但是它可以让它所有的弱处理器,同时去做处理,那相当于他就能够同时处理大量的数据,那这个就意味着它的吞吐量非常大,所以 CPU重视的是性能,GPU重视的是吞吐量。
所以大部分时候,GPU 他会跟另外一个词语联系在一起,叫做并行计算,意思就是它可以同时做大量的线程运算,为什么图像会特别适合用 GPU 运算呢?这是因为 GPU 它最开始的设计就是叫做图形处理单元,它的意思就是我可以把每一个像素,分割为一个线程去运算,每一个像素只做一些简单的运算,这个就是最开始图形处理器出现的原理。
它要做图形渲染的时候,要计算的是每一个像素的变换。所以每一个像素变换的计算量是很小很小的,可能就是一个公式的计算,计算量很少,它可以放在一个简单的计算单元里面去做计算,那这个就是 CPU 跟 GPU 的差别。
基于这样的差别,我们才会去设计什么时候用 CPU,什么时候用 GPU。如果你当前设计的算法,它的并行能力不是很强,从头到尾从上到下都是一个复杂的计算,没有太多可并性的地方,那么即使你用了 GPU,也不能帮助你很好提升计算性能。

所以,不要说别人都在用 GPU 那你就用 GPU,我们要了解的是为什么要用 GPU ,以及什么样的情况下用 GPU,它效果能够发挥出来最好。

1.4计算机视觉与其他学科的关系

计算机视觉目前跟其他学科的关系非常的多,包括机器人,以及刚才提到的医疗、物理、图像、卫星图片的处理,这些都会经常使用到计算机视觉,那这里呢,最常问到的问题无非就是有三个概念,一个叫做计算机视觉,一个叫做机器视觉,一个叫做图像处理,那这三个东西有什么区别呢?
这三个东西的区别还是挺因人而异的,每一个研究人员对它的理解都不一样。
首先,Image Processing更多的是图形图像的一些处理,图像像素级别的一些处理,包括 3D 的处理,更多的会理解为是一个图像的处理;而机器视觉呢,更多的是它还结合到了硬件层面的处理,就是软硬件结合的图形计算的能力,跟图形智能化的能力,我们一般会理解为他就是所谓的机器视觉。
而我们今天所说的计算机视觉,更多的是偏向于软件层面的计算机处理,而且不是说做图像的识别这么简单,更多的还包括了对图像的理解,甚至是对图像的一些变换处理,当前我们涉及到的一些图像的生成,也是可以归类到这个计算机视觉领域里面的。
所以说计算机视觉它本身的也是一个很基础的学科,可以跟各个学科做交叉,同时,它自己内部也会分的比较细,包括机器视觉、图像处理。

1.5 编程语言AND数学基础

这一部分的内容可以参见《非计算机专业,如何学习计算机视觉

2.参考书籍和公开课

参考书
第一本叫《Computer Vision:Models, Learning and Inference》written by Simon J.D. prince,这个主要讲的更适合入门级别的,因为这本书里面配套了非常多的代码,Matlab 代码,C 的代码都有,配套了非常多的学习代码,以及参考资料、文献,都配得非常详细,所以它很适合入门级别的同学去看。

第二本《Computer Vision:Algorithms and Applications》written by Richard Szeliski,这是一本非常经典,非常权威的参考资料,这本书不是用来看的,是用来查的,类似于一本工具书,它是涵盖面最广的一本参考书籍,所以一般会可以当成工具书去看,去查阅。

第三本《OpenCV3编程入门》作者:毛星云,冷雪飞 ,如果想快速的上手去实现一些项目,可以看看这本书,它可以教你动手实现一些例子,并且学习到 OpenCV 最经典、最广泛的计算机视觉开源库。

公开课:
Stanford CS223B
比较适合基础,适合刚刚入门的同学,跟深度学习的结合相对来说会少一点,不会整门课讲深度学习,而是主要讲计算机视觉,方方面面都会讲到。

Stanford CS231N
这个应该不用介绍了,一般很多人都知道,这个是计算机视觉和深度学习结合的一门课,我们上 YouTube 就能够看到,这门课的授课老师就是李飞飞老师,如果说不知道的话可以查一下,做计算机视觉的话,此人算是业界和学术界的“执牛耳”了。

3.需要了解的深度学习知识

深度学习没有太多的要讲的,不是说内容不多,是非常多,这里只推荐一本书给大家,这本书是去年年底才出的,是最新的一本深度学习的书,它讲得非常全面,从基础的数学,到刚才说的概率学、统计学、机器学习以及微积分、线性几何的知识点,非常的全面。
这里写图片描述

4.需要了解和学习的开源软件

OpenCV
它是一个很经典的计算机视觉库,实现了很多计算机视觉的常用算法。可以帮助大家快速上手。
Caffe
如果是做计算机视觉的话,比较建议 Caffe。Caffe 更擅长做的是卷积神经网络,卷积神经网络在计算机视觉里面用的是最多的。
所以无论你后面学什么样其它的开源软件, Caffe 是必不可免的,因为学完 Caffe 之后你会发现,如果你理解了 Caffe,会用 Caffe,甚至是有能力去改它的源代码,你就会发现你对深度学习有了一个质的飞跃的理解。
TensorFlow
TensorFlow 最近很火,但是它的入门门槛不低,你要学会使用它需要的时间远比其他所有的软件都要多,其次就是它当前还不是特别的成熟稳定,所以版本之间的更新迭代非常的多,兼容性并不好,运行效率还有非常大的提升空间。

5.如何阅读相关的文献

先熟悉所在方向的发展历程,然后精读历程中的里程碑式的文献。
例如:深度学习做目标检测,RCNN,Fast RCNN,Faster RCNN,SPPNET,SSD和YOLO这些模型肯定是要知道的。又例如,深度学习做目标跟踪,DLT,SO-DLT等。

计算机视觉的顶会:
ICCV:International Conference on Computer Vision,国际计算机视觉大会
CVPR:International Conference on Computer Vision and Pattern Recognition,国际计算机视觉与模式识别大会
ECCV:European Conference on Computer Vision,欧洲计算机视觉大会
除了顶会之外呢,还有顶刊。像 PAMI、IJCV,这些都是顶刊,它代表着这个领域里面最尖端最前沿以及当下的研究方向。

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页