计算机视觉(Computer Vision)又称为机器视觉(Machine Vision),顾名思义是一门“教”会计算机如何去“看”世界的学科。在机器学习大热的前景之下,计算机视觉与自然语言处理(Natural Language Process, NLP)及语音识别(Speech Recognition)并列为机器学习方向的三大热点方向。而计算机视觉也由诸如梯度方向直方图(Histogram of Gradient, HOG)以及尺度不变特征变换(Scale-Invariant Feature Transform, SIFT)等传统的手办特征(Hand-Crafted Feature)与浅层模型的组合逐渐转向了以卷积神经网络(Convolutional Neural Network, CNN)为代表的深度学习模型。
传统方法的处理流程一般为: 图像预处理 → 特征提取→ 建立分类或回归模型 → 输出 深度学习一般采用端到端的方法,常见处理流程为: 图片 → 端到端算法(常用深度学习)→ 输出
1. 数据
图像
- 色彩空间 常见的色彩空间有RGB和HSV。
- 格式 常见的图像格式有JPEG,PNG,BMP,区别主要是图片的压缩编码方式不同。
- 图像深度 存储每个像素所用的位数(bits),当一个像素占用的位数越多时,它所能表现的颜色就更多,更丰富。
视频
- 帧率
- 带宽
2.数据获取设备
摄像机的分类:
- 监控摄像机(网络摄像机和摸你摄像机)
- 不同行业需求的摄像机(超宽动态摄像机、红外摄像机、热成像摄像机等)
- 智能摄像机
- 工业摄像机
3.数据处理设备
- CPU CPU 它是一个高性能,就是超低延时性的,他能够快速的去做复杂运算,并且能达到一个很好的性能要求,CPU重视的是性能。
- GPU GPU是以一个叫做运算单元为格式的,所以他的优点不在于低延时性,因为他确实不善于做复杂运算,它每一个处理器都非常的小,相对来说会很弱,但是它可以让它所有的弱处理器,同时去做处理,那相当于他就能够同时处理大量的数据,那这个就意味着它的吞吐量非常大,GPU重视的是吞吐量。GPU 他会跟另外一个词语联系在一起,叫做并行计算,意思就是它可以同时做大量的线程运算,为什么图像会特别适合用 GPU 运算呢?这是因为 GPU 它最开始的设计就是叫做图形处理单元,它的意思就是我可以把每一个像素,分割为一个线程去运算,每一个像素只做一些简单的运算,这个就是最开始图形处理器出现的原理。它要做图形渲染的时候,要计算的是每一个像素的变换。所以每一个像素变换的计算量是很小很小的,可能就是一个公式的计算,计算量很少,它可以放在一个简单的计算单元里面去做计算,那这个就是 CPU 跟 GPU 的差别。
1.无人驾驶 无人驾驶又称自动驾驶,是目前人工智能领域一个比较重要的研究方向,让汽车可以进行自主驾驶,或者辅助驾驶员驾驶,提升驾驶操作的安全性。目前已经有一些公司研发出了自动泊车等辅助驾驶功能并得以应用。目前这方面做得比较好的是谷歌的无人驾驶汽车。国内也有一些比较好的公司,如百度无人驾驶车已经在一些园区得以应用,还有图森未来的货运车也完成了多次路测,并已经投入市场使用。
计算机视觉在无人驾驶中起到了非常关键的作用,比如道路的识别,路标的识别,红绿灯的识别,行人识别等等平常驾驶过程中需要注意的。另外还包括三维重建及自主导航,通过激光雷达或者视觉传感器可以重建三维模型,辅助汽车进行自主定位及导航,进行合理的路径规划和相关决策。
2.人脸识别
人脸识别技术目前已经研究得相对比较成熟,并在很多地方得到了应用,且人脸识别准确率目前已经高于人眼的识别准确率,很多高铁站及门禁的地方都用到了人脸识别,很多都有刷脸系统,有些城市甚至在银行取钱都可以直接刷脸。
3.无人安防
安防一直是我国比较重视的问题,也是人们特别重视的问题,在很多重要地点都安排有巡警巡查,在居民小区以及公司一般也都有保安巡查来确保安全。随着计算机视觉的发展,计算机视觉技术已经能够很好的应用到安防领域,目前很多智能摄像头都已经能够自动识别出异常行为以及可疑危险人物,及时提醒相关安防人员或者报警,加强安全防范。
4.车辆车牌识别
车辆车牌识别目前已经是一种非诚成熟的技术了,高速路上的违章检测,车流分析,安全带识别,智能红绿灯,还有停车场的车辆身份识别等都用到了车辆车牌识别,不仅能识别出车牌的号码,目前车辆识别技术已经能对道路上的车辆车型进行识别,通过识别摄像头获取的图像,能获取到车辆的型号及颜色等特征。
5.智能识图
智能识图是我们生活中比较常见的计算机视觉的应用了。看到一个纸质文档,想要把其转换成电子文档,直接把文档拍下来,用相关软件进行文字识别,就能把图像中的文字自动转换成电子文档,甚至还能自动翻译成其他语言。看到一件衣服或一个物品,想在网上找他的来源等其他相关信息,直接输入图片,以图搜图,很快就能找到很多该图片出现的地方以及很多类似的图片。甚至还有些能直接告诉你图片中的物体是个什么东西,或者大概判断图片中的人像的大概年龄等比较好玩的功能。
6.3D重构
3D重构之前在工业领域应用比较多,可以用于对三维物体进行建模,方便测量出物体的各种参数,或者对物体进行简单复制。最近也慢慢开始应用到民用领域了,比如新出的华为mate20系列手机,就已经可以对玩偶进行三维建模,并能够设置一些特定的动作,让玩偶“活”起来,甚至可以与人进行一些互动。当然这里与人互动还用到AR技术。
7.VR/AR
VR/AR技术相信大家都已经比较熟悉了。VR眼睛在前两年卖得特别火爆,还有一些9D游戏机,就是利用VR技术让人能够有一种身临其境的感觉。而AR技术目前比较常见的可能是双十一时候淘宝的天猫,还有之前比较火爆的宠物捕获游戏,可以在现实场景中加入一些其他元素,目前这个领域还在快速发展中。很多方便人们生活的应用也在不断推出,比如智能翻译,用手机对着需要翻译的字,在这个界面上就自动显示出相关的翻译,或者后面可能实现的虚拟试衣间等,将大大的方便人们的生活。
8.智能拍照
这个相信是大家很熟悉的一个名词了,基本每个智能手机都开始配有这个功能。最基础的功能包括自动曝光,自动白平衡,自动对焦等,还有一些去燥算法,能很好的提高手机拍照的图像质量。随着计算机视觉技术的进步,一些自动美颜算法,自动挂件,自动滤镜,场景切换等越来越多有趣的功能都被开发出来。还有一些图像处理软件,像专业的Photoshop,还有比较民用化的美图秀秀,美颜相机等,基本也都是利用计算机视觉的技术。
9.医学图像处理
常见的医学成像,比如B超,核磁共振,X光拍片等。随着AI技术的发展,还开始有一些AI诊断的功能,AI根据图像的特征对相关疾病的可能性进行分析。
10.无人机
随着无人机技术的发展,计算机视觉技术在无人机上的应用必不可少,军用无人机中,可以对目标进行自动识别并自主导航,精确制导等,民用的无人机也类似,例如大疆的无人机,能够跟踪人进行实时的拍照,还有一些手势控制等。还有一些特殊场景的应用,例如电力巡检,农作物分析等。
11.工业检测
工业领域计算机视觉也得到了充分应用,例如产品缺陷检测,工业机器人姿态控制,利用立体视觉来获得工件和机器人之间的相对位置姿态。
1.编程语言
熟练使用C++或者python,推荐书籍为《C++ Primer》和《python编程 从入门到实践》,B站上有相关的教学视频可以用来学习。
2. 熟练使用linux操作系统
推荐书籍为《鸟哥的Linux私房菜》。
3.机器学习和深度学习
计算机视觉中使用的机器学习方法个人感觉不算多,早期的时候会用SVM做分类,现在基本都用深度学习选特征+分类。原因在于统计机器学习这一块虽然方法不少,但是基本都无法应对图像这么大的数据量。 不过大家在学习过程中很容易接触到各种机器学习方法的名字因为现在大数据分析、机器学习、语音识别、计算机视觉等这些其实分得不是很开,然后不自觉地就会去了解和学习。这样我感觉总体来说是好的。不过在学习一些暂时用不着的算法时,个人感觉没必要做的太深:重在理解其思想,抓住问题本质,了解其应用方向。 传统机器学习方法主要包括决策树、神经网络、支持向量机、boosting、贝叶斯网等等。方法挺多的,同一类方法不同的变形更多。除了这些监督式学习,还有非监督学习、半监督学习、强化学习。当然还有一些降维算法(如PCA)等。学习资料主要推荐吴恩达的coursera课程《Machine Learning》,还有李航的《统计学习方法》和周志华的《机器学习》,两本在国内机器学习界成为经典的书。 深度学习主要是CNN和RNN,近年来GAN也逐渐火起来了,增强学习的发展也很快。具体学习路线后续会出专门的博文进行介绍。
4.数学 一切工程问题归根结底都是数学问题,这里说说计算机视觉和机器学习所涉及的数学问题。
微积分:比如图像找边缘即求微分在数字图像里是做差分(离散化)啦,光流算法里用到泰勒级数啦,空间域转频域的傅立叶变换啦,还有牛顿法、梯度下降、最小二乘等等这些都用的特别普遍了。
概率论与统计:这个比较高深,是应用在机器学习领域里最重要的数序分支。应用比如:条件概率、相关系数、最大似然、大数定律、马尔可夫链等等。 浙大的《概率论与数理统计》感觉还行,够用。
线性代数与矩阵:数字图像本身就是以矩阵的形式呈现的,多个向量组成的样本也是矩阵这种形式非常常见,大多机器学习算法里每个样本都是以向量的形式存在的,多个矩阵叠加则是以张量(tensor)的形式存在google深度学习库tensorflow的字面意思之一。具体应用,比如:世界坐标系->相机坐标系->图像坐标系之间的转换,特征值、特征向量,范数等。 推荐国外的上课教材《线性代数》。
凸优化:这个需要单独拎出来说一下。因为太多问题(尤其机器学习领域)都是优化问题(求最优),凸优化是里面最简单的形式,所以大家都在想办法怎么把一般的优化问题转化为凸优化问题。至于单纯的凸优化理论,好像已经比较成熟了。在机器学习里,经常会看到什么求对偶问题、KKT条件等,潜下心花两天学一学。