计算机视觉对数学的要求

2015-12-04 15:38:22 aliceyangxi1987 阅读数 0

转自:http://blog.csdn.net/zouxy09/article/details/8084511


和机器学习和计算机视觉相关的数学之一

(以下转自一位MIT牛人的空间文章,写得很实际:)

作者:Dahua

感觉数学似乎总是不够的。这些日子为了解决research中的一些问题,又在图书馆捧起了数学的教科书。从大学到现在,课堂上学的和自学的数学其实不算少了,可是在研究的过程中总是发现需要补充新的数学知识。Learning和Vision都是很多种数学的交汇场。看着不同的理论体系的交汇,对于一个researcher来说,往往是非常exciting的enjoyable的事情。不过,这也代表着要充分了解这个领域并且取得有意义的进展是很艰苦的。记得在两年前的一次blog里面,提到过和learning有关的数学。今天看来,我对于数学在这个领域的作用有了新的思考。对于Learning的研究, 
1Linear Algebra (线性代数)  Statistics (统计学) 是最重要和不可缺少的。

这代表了Machine Learning中最主流的两大类方法的基础。一种是以研究函数和变换为重点的代数方法,比如Dimension reduction,feature extraction,Kernel等,一种是以研究统计模型和样本分布为重点的统计方法,比如Graphical model, Information theoretical models等。它们侧重虽有不同,但是常常是共同使用的,对于代数方法,往往需要统计上的解释,对于统计模型,其具体计算则需要代数的帮助。以代数和统计为出发点,继续往深处走,我们会发现需要更多的数学。 
2Calculus (微积分),只是数学分析体系的基础。

其基础性作用不言而喻。Learning研究的大部分问题是在连续的度量空间进行的,无论代数还是统计,在研究优化问题的时候,对一个映射的微分或者梯度的分析总是不可避免。而在统计学中,Marginalization和积分更是密不可分——不过,以解析形式把积分导出来的情况则不多见。
3、Partial Differential Equation (偏微分方程)

这主要用于描述动态过程,或者仿动态过程。这个学科在Vision中用得比Learning多,主要用于描述连续场的运动或者扩散过程。比如Level set, Optical flow都是这方面的典型例子。
4、Functional Analysis (泛函分析)

通俗地,可以理解为微积分有限维空间到无限维空间的拓展——当然了,它实际上远不止于此。在这个地方,函数以及其所作用的对象之间存在的对偶关系扮演了非常重要的角色。Learning发展至今,也在向无限维延伸——从研究有限维向量的问题到以无限维的函数研究对象。Kernel Learning  Gaussian Process 是其中典型的例子——其中的核心概念都是Kernel。很多做Learning的人把Kernel简单理解为Kernel trick的运用,这就把kernel的意义严重弱化了。在泛函里面,Kernel (Inner Product)建立整个博大的代数体系的根本,从metric, transformspectrum都根源于此。
5、Measure Theory (测度理论)

这是和实分析关系非常密切的学科。但是测度理论并不限于此。从某种意义上说,Real Analysis可以从Lebesgue Measure(勒贝格测度)推演,不过其实还有很多别的测度体系——概率本身就是一种测度。测度理论对于Learning的意义是根本的,现代统计学整个就是建立在测度理论的基础之上——虽然初级的概率论教科书一般不这样引入。在看一些统计方面的文章的时候,你可能会发现,它们会把统计的公式改用测度来表达,这样做有两个好处:所有的推导和结论不用分别给连续分布和离散分布各自写一遍了,这两种东西都可以用同一的测度形式表达:连续分布的积分基于Lebesgue测度离散分布的求和基于计数测度,而且还能推广到那种既不连续又不离散的分布中去(这种东西不是数学家的游戏,而是已经在实用的东西,在Dirchlet Process或者Pitman-Yor Process里面会经常看到)。而且,即使是连续积分,如果不是在欧氏空间进行,而是在更一般的拓扑空间(比如微分流形或者变换群),那么传统的黎曼积分(就是大学一年级在微积分课学的那种)就不work了,你可能需要它们的一些推广,比如Haar Measure或者Lebesgue-Stieltjes积分
6、Topology(拓扑学)

这是学术中很基础的学科。它一般不直接提供方法,但是它的很多概念和定理是其它数学分支的基石。看很多别的数学的时候,你会经常接触这样一些概念:Open set / Closed set,set basis,Hausdauf, continuous function,metric space, Cauchy sequence, neighborhood, compactness, connectivity。很多这些也许在大学一年级就学习过一些,当时是基于极限的概念获得的。如果,看过拓扑学之后,对这些概念的认识会有根本性的拓展。比如,连续函数,当时是由epison法定义的,就是无论取多小的正数epsilon,都存在xxx,使得xxx。这是需要一种metric去度量距离的,在general topology里面,对于连续函数的定义连坐标和距离都不需要——如果一个映射使得开集的原像是开集,它就是连续的——至于开集是基于集合论定义的,不是通常的开区间的意思。这只是最简单的例子。当然,我们研究learning也许不需要深究这些数学概念背后的公理体系,但是,打破原来定义的概念的局限在很多问题上是必须的——尤其是当你研究的东西它不是在欧氏空间里面的时候——正交矩阵,变换群,流形,概率分布的空间,都属于此。
7、Differential Manifold (微分流形)

通俗地说它研究的是平滑的曲面。一个直接的印象是它是不是可以用来fitting一个surface什么的——当然这算是一种应用,但是这是非常初步的。本质上说微分流形研究的是平滑的拓扑结构。一个空间构成微分流形的基本要素是局部平滑:从拓扑学来理解,就是它的任意局部都同胚于欧氏空间,从解析的角度来看,就是相容的局部坐标系统。当然,在全局上,它不要求和欧氏空间同胚。它除了可以用于刻画集合上的平滑曲面外,更重要的意义在于,它可以用于研究很多重要的集合。一个n-维线性空间的全部k-维子空间(k
8、Lie Group Theory (李群论)

一般意义的群论在Learning中被运用的不是很多,群论在Learning中用得较多的是它的一个重要方向Lie group。定义在平滑流形上的群,并且其群运算是平滑的话,那么这就叫李群。因为Learning和编码不同,更多关注的是连续空间,因为Lie group在各种群中对于Learning特别重要。各种子空间,线性变换,非奇异矩阵都基于通常意义的矩阵乘法构成李群。在李群中的映射,变换,度量,划分等等都对于Learning中代数方法的研究有重要指导意义。 
9Graph Theory(图论)

图,由于它在表述各种关系的强大能力以及优雅的理论,高效的算法,越来越受到Learning领域的欢迎。经典图论,在Learning中的一个最重要应用就是graphical models了,它被成功运用于分析统计网络的结构和规划统计推断

 

和机器学习和计算机视觉相关的数学之二

转自:http://blog.sina.com.cn/s/blog_6833a4df0100nazk.html

1. 线性代数 (Linear Algebra):

我想国内的大学生都会学过这门课程,但是,未必每一位老师都能贯彻它的精要。这门学科对于Learning是必备的基础,对它的透彻掌握是必不可少的。我在科大一年级的时候就学习了这门课,后来到了香港后,又重新把线性代数读了一遍,所读的是

Introduction to Linear Algebra (3rd Ed.)  by Gilbert Strang.

这本书是MIT的线性代数课使用的教材,也是被很多其它大学选用的经典教材。它的难度适中,讲解清晰,重要的是对许多核心的概念讨论得比较透彻。我个人觉得,学习线性代数,最重要的不是去熟练矩阵运算和解方程的方法——这些在实际工作中MATLAB可以代劳,关键的是要深入理解几个基础而又重要的概念:子空间(Subspace),正交(Orthogonality),特征值和特征向量(Eigenvalues and eigenvectors),和线性变换(Linear transform)从我的角度看来,一本线代教科书的质量,就在于它能否给这些根本概念以足够的重视,能否把它们的联系讲清楚。Strang的这本书在这方面是做得很好的。

而且,这本书有个得天独厚的优势。书的作者长期在MIT讲授线性代数课(18.06),课程的video在MIT的Open courseware网站上有提供。有时间的朋友可以一边看着名师授课的录像,一边对照课本学习或者复习。

http://ocw.mit.edu/OcwWeb/Mathematics/18-06Spring-2005/CourseHome/index.htm

 

2. 概率和统计 (Probability and Statistics):

概率论和统计的入门教科书很多,我目前也没有特别的推荐。我在这里想介绍的是一本关于多元统计的基础教科书:

Applied Multivariate Statistical Analysis (5th Ed.)  by Richard A. Johnson and Dean W. Wichern

这本书是我在刚接触向量统计的时候用于学习的,我在香港时做研究的基础就是从此打下了。实验室的一些同学也借用这本书学习向量统计。这本书没有特别追求数学上的深度,而是以通俗易懂的方式讲述主要的基本概念,读起来很舒服,内容也很实用。对于Linear regression, factor analysis, principal component analysis (PCA), and canonical component analysis (CCA)这些Learning中的基本方法也展开了初步的论述。

之后就可以进一步深入学习贝叶斯统计和Graphical models。一本理想的书是

Introduction to Graphical Models (draft version).  by M. Jordan and C. Bishop.

我不知道这本书是不是已经出版了(不要和Learning in Graphical Models混淆,那是个论文集,不适合初学)。这本书从基本的贝叶斯统计模型出发一直深入到复杂的统计网络的估计和推断,深入浅出,statistical learning的许多重要方面都在此书有清楚论述和详细讲解。MIT内部可以access,至于外面,好像也是有电子版的。

 

3. 分析 (Analysis):

我想大家基本都在大学就学过微积分或者数学分析,深度和广度则随各个学校而异了。这个领域是很多学科的基础,值得推荐的教科书莫过于

Principles of Mathematical Analysis, by Walter Rudin

有点老,但是绝对经典,深入透彻。缺点就是比较艰深——这是Rudin的书的一贯风格,适合于有一定基础后回头去看。

在分析这个方向,接下来就是泛函分析(Functional Analysis)

Introductory Functional Analysis with Applications, by Erwin Kreyszig.

适合作为泛函的基础教材,容易切入而不失全面。我特别喜欢它对于谱论和算子理论的特别关注,这对于做learning的研究是特别重要的。Rudin也有一本关于functional analysis的书,那本书在数学上可能更为深刻,但是不易于上手,所讲内容和learning的切合度不如此书。

在分析这个方向,还有一个重要的学科是测度理论(Measure theory),但是我看过的书里面目前还没有感觉有特别值得介绍的。

 

4. 拓扑 (Topology):

在我读过的基本拓扑书各有特色,但是综合而言,我最推崇:

Topology (2nd Ed.)  by James Munkres

这本书是Munkres教授长期执教MIT拓扑课的心血所凝。对于一般拓扑学(General topology)有全面介绍,而对于代数拓扑(Algebraic topology)也有适度的探讨。此书不需要特别的数学知识就可以开始学习,由浅入深,从最基本的集合论概念(很多书不屑讲这个)到Nagata-Smirnov TheoremTychonoff theorem等较深的定理(很多书避开了这个)都覆盖了。讲述方式思想性很强,对于很多定理,除了给出证明过程和引导你思考其背后的原理脉络,很多令人赞叹的亮点——我常读得忘却饥饿,不愿释手。很多习题很有水平。

 

5. 流形理论 (Manifold theory):

对于拓扑和分析一定把握时,方可开始学习流形理论,否则所学只能流于浮浅。我所使用的书是

Introduction to Smooth Manifolds.  by John M. Lee

虽然书名有introduction这个单词,但是实际上此书涉入很深,除了讲授了基本的manifoldtangent space,bundlesub-manifold等,还探讨了诸如纲理论(Category theory)德拉姆上同调(De Rham cohomology)积分流形等一些比较高级的专题。对于李群和李代数也有相当多的讨论。行文通俗而又不失严谨,不过对某些记号方式需要熟悉一下。

虽然李群论是建基于平滑流形的概念之上,不过,也可能从矩阵出发直接学习李群和李代数——这种方法对于急需使用李群论解决问题的朋友可能更加实用。而且,对于一个问题从不同角度看待也利于加深理解。下面一本书就是这个方向的典范:

Lie Groups, Lie Algebras, and Representations: An Elementary Introduction.  by Brian C. Hall

此书从开始即从矩阵切入,从代数而非几何角度引入矩阵李群的概念。并通过定义运算的方式建立exponential mapping,并就此引入李代数。这种方式比起传统的通过“左不变向量场(Left-invariant vector field)“的方式定义李代数更容易为人所接受,也更容易揭示李代数的意义。最后,也有专门的论述把这种新的定义方式和传统方式联系起来。

————————————————————————————

无论是研究Vision, Learning还是其它别的学科,数学终究是根基所在学好数学是做好研究的基石学好数学的关键归根结底是自己的努力,但是选择一本好的书还是大有益处的。不同的人有不同的知识背景,思维习惯和研究方向,因此书的选择也因人而异,只求适合自己,不必强求一致。上面的书仅仅是从我个人角度的出发介绍的,我的阅读经历实在非常有限,很可能还有比它们更好的书(不妨也告知我一声,先说声谢谢了)。


2017-02-10 14:01:35 cloudqiu 阅读数 4476

    2015-11-30

math_for_CV.jpg

    

   过了好久我才来补充的记录一下学习的感受。我从年初开始准备CV的学习材料的时候就查到了这本书。起初,我看这本书是国内的人写的,感觉其可能没有国外著名大学的教材好,就没买。后来发现的确没有这方面的材料,就买了一本。现在看来是我错了,作者的确很牛掰,最早做数学研究,后来做人工智能,目前在做计算机视觉和图像处理。看起来越来越偏向应用,实践性越强。相信作者前期的数学能力让他在后续的工作中如鱼得水般自在。

   实际上这本书里面有很多东西我看不懂,有三个Part,我也只重点看了前两个part:射影几何、矩阵与张量。第三part 的模型估计讲的都是数学上的计算方式,我看不懂,也不知道如何应用,基本上略过了。“一切几何皆摄影几何”。相比于我们在高中学习过的欧氏几何,摄影几何更加具有广泛意义。必然导致我理解起来更费劲了。这本书仅仅涉及从图像中提取三维信息用到的几何知识。我并不认为我以后的工作中会单纯的使用RGB摄像头来进行场景重建。我仅仅想知道 how far can we go 这样的问题的答案,单纯使用二维图像提取三维信息的极限在哪里。前一段时间听这边做渲染的同学说有人在用一组RGB摄像头来对人身体进行模型重建,我有点吃惊,用这种从二维图片中重建三维场景需要多大的计算量、有多少限制?编码起来得多复杂啊?我现在还是倾向于有depth camera来做场景重建,加上其他的各种能够用上的sensor,这种方式应该是最简单、容易实现。

   我不能在视觉方面的学习做什么推荐了,我本来就非专业,再者花费的时间并不充足,我的数学根基更是需要加强,我只从一个侧面来评价一下吧:能从低层次的数学分析CV的材料并不多,说明作者的确想让学习者更加从本质上看待CV中的问题,实为难得。况且这本书是硬皮书,拿在手里很有质感呦。

[ 主页

2016-08-26 15:21:52 vevlins 阅读数 490
  1. 微积分
  2. 线性代数
2017-12-23 19:54:56 ksws0292756 阅读数 45210

以下内容整理自 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,这些都是顶刊,它代表着这个领域里面最尖端最前沿以及当下的研究方向。

2016-03-22 14:30:05 chuhang_zhqr 阅读数 6086

本文转载高博士的博客
主要介绍了在计算机视觉中关于3D变换矩阵的数学方法。

  1. 旋转矩阵是一种3×3的正交矩阵,
    这里写图片描述
    这里R为3D的旋转矩阵,同样的,t为3D的平移矢量。
    由于3D旋转都可以归结成按照某个单位向量n进行大小为θ的旋转。所以,已知某个旋转时,可以推导出对应的旋转矩阵。该过程由罗德里格斯公式表明,由于过程比较复杂,我们在此不作赘述,只给出转换的结果: 
    这里写图片描述
    这里这里写图片描述 公式虽然较为复杂,但实际写成程序后,只需知道旋转方向和角度后即可完成计算。另一件有趣的事是,如果用
    这里写图片描述
    表示与n对应的一个反对称矩阵,那么有:
    这里写图片描述 (李代数会对后面的指数形式做出解释)
    根据此式,我们也可以从任意给定的旋转矩阵,求出对应的转轴与转角。关于转角θ,我们对上式两边求矩阵的迹,可得:
    这里写图片描述
    可得 这里写图片描述
    关于转轴n,由于旋转轴上的向量在旋转后不发生改变,说明
    这里写图片描述
    因此,只要求此方程的解向量即可。这也说明n是R特征值为1的一个特征向量。
    总之,读者应当明白在3D时,旋转和平移仍可用转移矩阵T来描述,其结构也与2D类似。而T4×4构成了三维欧氏变换群SE(3)。注意到T虽然有16个变量,但真正的自由度只有6个,其中3个旋转,3个位移。
    欧拉角是一种广为使用的姿态描述方式,以直观见长。在最常用的欧拉角表达方式中,我们把旋转分解成沿三个轴转动的量:滚转角-俯仰角-偏航角(roll-pitch-yaw)。它的好处是十分的直观,且只有三个参数描述。缺点是会碰到著名的万向锁问题:在俯仰为±90∘时,表达某个姿态的形式不唯一。此外,它也不易于插值和迭代。一般不怎么用,只有在验证结果是否正确时,方便使用。

  2. 四元数
    相比欧拉角,四元数(Quaternion)则是一种紧凑、易于迭代、又不会出现奇异值的表示方法。它在程序中广为使用,例如ROS和几个著名的SLAM公开数据集、g2o等程序都使用四元数记录机器人的姿态。
    四元数仅是3D姿态的一种表达方式,我们用一个单位四元数表达原本用旋转矩阵表示的三维旋转。这样做一个直接的好处是省空间。一个旋转阵有9个分量,但只有三个自由度。那么,能不能用三个数来描述呢?可以是可以的,但不可避免会出现奇异的情况,欧拉角就是一个例子。而四元数,比三维向量多了一个分量,从而可以无奇异地表示各种姿态。
    四元数是Hamilton找到的一种扩展的复数。一个四元数拥有一个实部和三个虚部(故事上说他原先找了很久带两个虚部的,结果怎么也找不到,最后豁然开朗找到了三虚部的四元数):
    这里写图片描述
    其中i,j,k为四元数的三个虚部。这三个虚部满足关系式:
    这里写图片描述
    由于它的这种特殊表示形式,有时人们也用一个标量和一个向量来表达四元数:
    这里写图片描述
    这里,标量s称为四元数的实部,而向量v称为它的虚部。如果一个四元数虚部为0,称之为实四元数。反之,若它的实部为0,称之为虚四元数。该定义和复数是相似的。
    四元数可以表示三维空间中任意一个旋转。与旋转矩阵中类似,我们仍假设某个旋转是绕单位向量这里写图片描述 进行了角度为θ的旋转,那么这个旋转的四元数形式为:
    这里写图片描述
    事实上,这还是一个模长为1的四元数,称为单位四元数。反之,我们亦可通过任意一个长度为1的四元数,计算对应旋转轴与夹角:
    这里写图片描述
    若某个四元数长度不为1,我们可以通过归一化将它转换为一个模长为1的四元数。对旋转角的四元数形式的θ加上2π,我们得到一个相同的旋转,但此时对应的四元数变成了−q。因此,在四元数中,任意的旋转都可以由两个互为相反数的四元数表示。同理,取θ为0,则得到一个没有任何旋转的四元数:
    这里写图片描述
    四元数和通常复数一样,可以进行一系列的运算。常见的有四则运算、内积、求逆、共轭、求指数/对数等等。表示姿态时,它还可以进行插值。
    3D空间也可以用单位四元数表示旋转。假设一个空间三维点v=[x,y,z]∈R3 ,以及一个由旋转轴和夹角n,θ指定的旋转,首先,我们把三维空间点用一个虚四元数来描述:
    这里写图片描述
    然后,参照旋转角的四元数表示,用另一个四元数q表示这个旋转:
    这里写图片描述
    那么,旋转后的点p′p′即可表示为这样的乘积:
    这里写图片描述
    可以验证,计算结果的实部为这里写图片描述,故计算结果为纯虚四元数。其虚部的三个分量表示旋转后3D点的坐标。
    由于任意单位四元数都可表示为一个3D旋转,即SO(3)中的元素,我们可以找到一个旋转矩阵与之对应。最简单的方式是由四元数q解出旋转角θ和旋转轴n,但那样要计算一个arccos函数,代价较大。实际上这个计算是可以通过一定的计算技巧绕过的。为省略篇幅,我们直接给出四元数到旋转矩阵的转换方式。
    设四元数q=q0+q1i+q2j+q3k,对应的旋转矩阵R为:
    这里写图片描述
    反之,由旋转矩阵到四元数的转换如下。假设矩阵为R={mij},i,j∈[1,2,3],其对应的四元数q由下式给出:
    这里写图片描述

  3. 其他几种变换
    1). 相似变换比欧氏变换多了一个自由度,7个自由度,它允许物体进行自由地缩放。
    这里写图片描述
      注意到旋转部分多了一个缩放因子s,它在x,y,z三个坐标上形成均匀的缩放。类似的,相似变换的乘法也构成群,称为Sim(3)。由于含有缩放,相似变换不再保持图形的面积不变。
    2). 仿射变换的矩阵形式如下:
    这里写图片描述
      与欧氏变换不同的是,仿射变换只要求A是一个可逆矩阵,而不必是正交矩阵。在仿射变换下,直线的夹角会发生改变,但平行性质不变。这即是说,仿射变换把平行四边形变为平行四边形。有12个自由度。平行行和体积比不变。
    3). 射影变换是最一般的变换,它的矩阵形式为:
    这里写图片描述
      它左上角为可逆矩阵A,右上为平移t,左下缩放aT。由于采用齐坐标,当v≠0时,我们可以对整个矩阵除以v得到一个右下角为1的矩阵; 否则,则得到右下角为0的矩阵。因此,这个矩阵在2D中一共有8个自由度,而在3D中一共有15个自由度,是现在提到的变换中最为一般的。接触平面的相交和相切。