专栏名称: AI数据派
THU数据派"基于清华,放眼世界",以扎实的理工功底闯荡“数据江湖”。发布全球大数据资讯,定期组织线下活动,分享前沿产业动态。了解清华大数据,敬请关注姐妹号“数据派THU”。
目录
相关文章推荐
纪念币发行信息  ·  重磅!2025新版100元纸钞发行!开始预约! ·  昨天  
纪念币发行信息  ·  重磅!2025新版100元纸钞发行!开始预约! ·  昨天  
海西晨报  ·  涨幅超过黄金!很多人都在买 ·  昨天  
海西晨报  ·  涨幅超过黄金!很多人都在买 ·  昨天  
国际金融报  ·  隐私不合规!银行APP被公开通报,如何整改? ·  2 天前  
金融早实习  ·  西门子艾闻达咨询实习生招聘 ·  2 天前  
Wind万得  ·  刚刚!马斯克的大模型宣布免费 ·  3 天前  
51好读  ›  专栏  ›  AI数据派

超全!深度学习在计算机视觉领域应用一览(附链接)

AI数据派  · 公众号  ·  · 2019-08-02 07:30

正文

来源:知乎

作者: 黄浴,奇点汽车美研中心首席科学家兼总裁

本文约 7200 字, 建议阅读 15 分钟。

这是一份深度学习在计算机视觉领域的超全应用预览~


简单回顾的话,2006年Geoffrey Hinton的论文点燃了“这把火”,现在已经有不少人开始泼“冷水”了,主要是AI泡沫太大,而且深度学习不是包治百病的药方。

计算机视觉不是深度学习最早看到突破的领域,真正让大家大吃一惊的颠覆传统方法的应用领域是语音识别,做出来的公司是微软,而不是当时如日中天的谷歌。 计算机视觉应用深度学习堪称突破的成功点是2012年ImageNet比赛,采用的模型是CNN,而不是Hinton搞的RBM和DBN之类,就是Hinton学生做出来以他命名的AlexNet。


(注: 顺便提一下,2010年的ImageNet冠军是余凯/林元庆领导的NEC和UIUC Tom Huang组的合作团队,当时采用的方法是基于sparse coding+SVM。


当然,真正一直在研究CNN的专家是Yann LeCun,小扎后来拉他去FB做AI research的头。 第一个CNN模型就是他搞出来的,即LeNet,原来就是做图像数字识别。 不得不说,CNN非常适合2-D信号的处理任务,RNN呢,是时域上的拓展。

现在CNN在计算机视觉应用的非常成功,传统机器学习方法基本被弃之不用。 其中最大的一个原因就是,图像数据的特征设计,即特征描述,一直是计算机视觉头痛的问题,在深度学习突破之前10多年,最成功的图像特征设计 (hand crafted feature)是SIFT,还有著名的Bag of visual words,一种VQ方法。 后来大家把CNN模型和SIFT比较,发现结构还蛮像的,之后不是也有文章说RNN和CRF很像吗。

CNN从AlexNet之后,新模型如雨后春笋,每半年就有新发现。 这里随便列出来就是,ZFNet (也叫MatNet),VGGNet, NIN, GoogleNet (Inception), Highway Network, ResNet, DenseNet,SE-Net(Squeeze and Excitation Net),基本上都是在ImageNet先出名的。

简单回顾一下:

  • AlexNet应该算第一个深度CNN;
  • ZFNet采用DeconvNet和visualization技术可以监控学习过程;
  • VGGNet采用小滤波器3X3去取代大滤波器5X5和7X7而降低计算复杂度;
  • GoogleNet推广NIN的思路定义Inception基本模块(采用多尺度变换和不同大小滤波器组合,即1X1,3X3,5X5)构建模型;
  • Highway Networks借鉴了RNN里面LSTM的gaiting单元;
  • ResNet是革命性的工作,借鉴了Highway Networks的skip connection想法,可以训练大深度的模型提升性能,计算复杂度变小;
  • Inception-V3/4用1X7和1X5取代大滤波器5X5和7X7,1X1滤波器做之前的特征瓶颈,这样卷积操作变成像跨通道(cross channel)的相关操作;
  • DenseNet主要通过跨层链接解决vanishing gradient问题;
  • SE-Net是针对特征选择的设计,gating机制还是被采用;
  • 前段时间流行的Attention机制也是借鉴于LSTM,实现object-aware的context模型。
  • ......


在具体应用领域也出现了不少成功的模型,比如:

  • detection问题的R-CNN,fast RCNN,faster RCNN,SSD,YOLO,RetinaNet,CornerNet等,
  • 解决segmentation问题的FCN,DeepLab,Parsenet,Segnet,Mask R-CNN,RefineNet,PSPNet,U-Net等,
  • 处理激光雷达点云数据的VoxelNet,PointNet,BirdNet,LMNet,RT3D,PIXOR,YOLO3D等,
  • 实现激光雷达和图像融合的PointFusion,RoarNet,PointRCNN,AVOD等,
  • 做图像处理的DeHazeNet,SRCNN (super-resolution),DeepContour,DeepEdge等,
  • 2.5 D视觉的MatchNet,DeepFlow,FlowNet等,
  • 3-D重建的PoseNet,VINet,Perspective Transformer Net,SfMNet,CNN-SLAM,SurfaceNet,3D-R2N2,MVSNet等,
  • 以及解决模型压缩精简的MobileNet,ShuffleNet,EffNet,SqueezeNet,
    ......

下面我们针对具体应用再仔细聊。

图像/视频处理


先说图像/视频处理(计算机视觉的底层,不低级)。


图像处理,还有视频处理,曾经是很多工业产品的基础,现在电视,手机还有相机/摄像头等等都离不开,是技术慢慢成熟了(传统方法),经验变得比较重要,而且芯片集成度越来越高,基本上再去研究的人就少了。 经典的ISP,A3,都是现成的,当然做不好的也很难和别人竞争,成本都降不下来。


这是一个典型成像处理的流程图:



经典的ISP流程图如下:



图像处理,根本上讲是基于一定假设条件下的信号重建。 这个重建不是我们说的3-D重建,是指恢复信号的原始信息,比如去噪声,内插。 这本身是一个逆问题,所以没有约束或者假设条件是无解的,比如去噪最常见的假设就是高斯噪声,内插实际是恢复高频信号,可以假设边缘连续性和灰度相关性,著名的TV(total variation)等等。

以前最成功的方法基本是信号处理,机器学习也有过,信号处理的约束条件变成了贝叶斯规则的先验知识,比如sparse coding/dictionary learning,MRF/CRF之类,现在从传统机器学习方法过渡到深度学习也正常吧。

1、去噪/去雾/去模糊/去鬼影


先给出一个encoder-decoder network的AR-CNN模型(AR=Artifact Reduction):



这是一个图像处理通用型的模型框架:



2、增强/超分辨率(SR)


Bilateral filter是很有名的图像滤波器,这里先给出一个受此启发的CNN模型做图像增强的例子:


前面说过内插的目的是恢复失去的高频信息,这里一个做SR的模型就是在学习图像的高频分量:


3、修补/恢复/着色


用于修补的基于GAN思想的Encoder-Decoder Network模型:



用于灰度图像着色(8比特的灰度空间扩展到24比特的RGB空间)的模型框架:



图像预处理


还有计算机视觉的预处理(2-D)。


计算机视觉需要图像预处理,比如特征提取,包括特征点,边缘和轮廓之类。 以前做跟踪和三维重建,首先就得提取特征。 特征点以前成功的就是SIFT/SURF/FAST之类,现在完全可以通过CNN形成的特征图来定义。


边缘和轮廓的提取是一个非常tricky的工作,细节也许就会被过强的图像线条掩盖,纹理(texture)本身就是一种很弱的边缘分布模式,分级(hierarchical)表示是常用的方法,俗称尺度空间(scale space)。 以前做移动端的视觉平台,有时候不得不把一些图像处理功能关掉,原因是造成了特征畸变。 现在CNN这种天然的特征描述机制,给图像预处理提供了不错的工具,它能将图像处理和视觉预处理合二为一。


1、特征提取


LIFT(Learned Invariant Feature Transform)模型,就是在模仿SIFT:



2、边缘/轮廓提取


一个轮廓检测的encoder-decoder network模型:



3、特征匹配


这里给出一个做匹配的模型MatchNet:



2.5-D计算机视觉


再说2.5-D计算机视觉部分(不是全3-D)。


涉及到视差或者2-D运动的部分一般称为2.5-D空间。 这个部分和前面的2-D问题是一样的,作为重建任务它也是逆问题,需要约束条件求解优化解,比如TV,GraphCut。 一段时间(特别是Marr时代)计算机视觉的工作,就是解决约束条件下的优化问题。

后来,随机概率和贝叶斯估计大行其事,约束条件变成了先验知识(prior),计算机视觉圈里写文章要是没有 P (Probability) 和 B (Bayes),都不好意思发。 像SVM, Boosting,Graphical Model,Random Forest,BP(Belief Propagation),CRF(Conditional Random Field),Mixture of Gaussians,MCMC,Sparse Coding都曾经是计算机视觉的宠儿,现在轮到CNN出彩: )。


可以说深度学习是相当“暴力”的,以前分析的什么约束呀,先验知识呀在这里统统扔一边,只要有图像数据就可以和传统机器学习方法拼一把。


1、运动/光流估计


传统的方法包括局部法和全局法,这里CNN取代的就是全局法。

这里是一个光流估计的模型:



2、视差/深度图估计


深度图估计和运动估计是类似问题,唯一不同的是单目可以估计深度图,而运动不行。


这里是一个双目估计深度图的模型:



而这个是单目估计深度图的模型: 巧妙的是这里利用双目数据做深度图估计的非监督学习。


另外一个单目深度估计的模型: 也是利用双目的几何约束做非监督的学习。



3、视频去隔行/内插帧;

Deinterlacing和Framerate upconversion视频处理的经典问题,当年Sony和Samsung这些电视生产商这方面下了很大功夫,著名的NXP(从Philips公司spin-off)当年有个牛逼的算法在这个模块挣了不少钱。

基本传统方法都是采用运动估计和补偿的方法,俗称MEMC,所以我把它归类为2.5-D。 前面运动估计已经用深度学习求解了,现在这两个问题自然也是。

首先看一个做MEMC的模型:



这是做Deinterlacing的一个模型:



这是Nvidia的Framerate Upconversion方面模型:



因为它采用optic flow方法做插帧,另外附上它的flow estimation模型: 就是一个沙漏(hourglass)模式。



4、新视角图像生成


刚才介绍单目估计深度图的时候,其实已经看到采用inverse warping方法做新视角生成的例子,在IBR领域这里有一个分支叫Depth Image-based Rendering (DIBR)。


和上个问题类似,采用深度图学习做合成图像,也属于2.5-D空间。 在电视领域,曾经在3-D电视界采用这种方法自动从单镜头视频生成立体镜头节目。 以前也用过机器学习,YouTube当年采用image search方法做深度图预测提供2D-3D的内容服务,但性能不好。 现在感觉,大家好像不太热衷这个了。


这是一个产生新视角的模型:



而这个是从单镜头视频生成立体视频的模型:



有做编码/解码的,也是采用运动或者相似变换为基础,但性能不如传统方法,这里忽略。


3-D计算机视觉


下面谈谈3-D,基于多视角(MVS)/运动(SFM)的重建,后者也叫SLAM。


这部分就是经典的计算机视觉问题: 3-D重建。


基本上可以分成两种路径: 一是多视角重建,二是运动重建。 前一个有一个经典的方法MVS(multiple view stereo),就是多帧匹配,是双目匹配的推广,这样采用CNN来解决也合理。 当年CMU在Superbowl展示的三维重建和视角转化,轰动一时,就是基于此路径,但最终没有被产品化(技术已经转让了)。


后一个在机器人领域成为SLAM,有滤波法和关键帧法两种,后者精度高,在稀疏特征点的基础上可以采用BA(Bundle Adjustment),著名的方法如PTAM,ORB-SLAM1/2,LSD-SLAM,KinectFusion(RGB-D),LOAM和Velodyne SLAM(LiDAR)等。 如今SLAM已经成为AR产业的瓶颈,看看MagicLeap和HoloLens,大家不能总是在平面检测基础上安一个虚拟物体吧,真正的虚实结合是在一个普通的真实环境里才行。


想想像特征点匹配,帧间运动估计,Loop Closure检测这些模块都可以采用CNN模型解决,那么SLAM/SFM/VO就进入CNN的探索区域。


1、标定


Calibration是计算机视觉的经典问题,摄像头作为传感器的视觉系统首要任务就是要确定自己观测数据和3-D世界坐标系的关系,即标定。 摄像头标定要确定两部分参数,一是内参数,二是外参数。 对于有多个传感器的视觉系统,比如深度测距仪,以前有Kinect RGB-D,现在有Velodyne激光雷达,它们相互之间的坐标系关系是标定的任务。


外参数标定的完成帮助是校准数据,比如激光雷达的点云,RGB-D的深度图,还有摄像头的图像像素集,它们一定存在一个最佳匹配标准,这就可以通过数据训练NN模型来完成。 而标定参数就是NN模型回归输出的结果。

这里是一个激光雷达和摄像头标定的系统框图:



它的模型CalibNet结构视图:



2、Visual Odometry(VO)


VO属于SLAM的一部分,只是估计自身运动和姿态变化吧。 VO是特斯拉的前Autopilot2.0负责人David Nister创立的,他之前以两帧图像计算Essential Matrix的“5点算法”而出名,现在是Nvidia的自动驾驶负责人,公司VP。

这里是一个和惯导数据结合的VIO(Visual-Inertial Odometry)NN模型:



这是著名的AR创业公司MagicLeap提出的VO模型: 两部分组成,即特征提取和匹配(Homography)。



顺便加一个,激光雷达数据做Odometry的CNN模型:



3、SLAM (Mono, Stereo, RGB-D, LiDAR)/SFM


运动恢复结构是基于背景不动的前提,计算机视觉的同行喜欢SFM这个术语,而机器人的peers称之为SLAM。 SLAM比较看重工程化的解决方案,SFM理论上贡献大。


先看一个单摄像头的SFM系统框图:



它的NN模型SFM-Net,包括Motion和Structure两部分:



再附上一个SLAM的模型CNN-SLAM: 主要是加上一个单目深度图估计的CNN模块。



这是一个用CNN的基于Lidar的localization方法: 不仅需要点云数据,还输入反射值灰度图。



图像像素运动是optic flow,而3-D场景的运动称之为scene flow,如果有激光雷达的点云数据,后者的估计可以通过ICP实现,这里给出一个CNN模型的实现方法FlowNet3D,是PointNet的扩展:



4、MVS


MVS的传统方法可以分成两种: region growing和depth-fusion,前者有著名的PMVS,后者有KinectFusion,CNN模型求解MVS的方法就是基于此。

先看看一个做MVS任务的基于RNN中LSTM的3D-R2N2模型:



它的系统框图如下:



UIUC/Facebook合作的DeepMVS模型:



这是他们的系统框图:



现在看到的是Berkeley分校Malik组提出的LSM(Learnt Stereo Machine )模型:



下面是最近香港权龙教授组提出的MVSNet模型:



环境理解


核心部分是计算机视觉的高层。


这部分是深度学习在计算机视觉最先触及,并展示强大实力的部分。 出色的工作太多,是大家关注和追捧的,而且有不少分析和总结文章,所以这里不会重复过多,只简单回顾一下。

1、语义分割/实例分割(Semantic/Instance Segmentation)


语义分割最早成功应用CNN的模型应该是FCN(Fully Convolution Network),由Berkeley分校的研究人员提出。 它是一种pixel2pixel的学习方法,之后各种演变模型,现在都可以把它们归类于Encoder-Decoder Network。


这里是去年CVPR的一片论文在总结自动驾驶的实时语义分割算法时给出的框图。



其中Encoder部分特别采用了MobileNet和ShuffleNet。

实例分割是特殊的语义分割,结合了目标检测,可以说是带有明确轮廓的目标检测,其代表作就是Mask R-CNN,应该是何凯明去FB之后的第一个杰作。


这是一个借鉴目标检测算法SSD的实例分割模型。


而下面这个是从目标检测算法Faster-RCNN演变的实例分割模型MaskLab,论文发表在去年CVPR‘18。



这是它修正Mask的方法示意图:



这是一个基于3-D点云的语义分割NN模型:



2、检测/识别(特别例子: 人脸)


目标检测的开拓性工作应该是Berkeley分校Malik组出来的,即两步法的R-CNN(Region-based CNN),借用了传统方法中的Region Proposal。 之后不断改进的有fast RCNN和faster RCNN,每次都有新点子,真是“群星闪耀”的感觉。


一步法的工作,有名的就是SSD(Single Shot Detection)和YOLO(You Only Look Once),期间何凯明针对one-stage和two-stage方法的各自优缺点引进一个Focal Loss,构建的新方法叫RetinaNet,而后来YOLO3基本也解决了精度低的弱点。


这里我画了一个算法发展草图(其实还有一些方法没有包括在里面,比如densebox,deepbox,R-FCN,FPN等等)。



ImageNet本身就是一个1000多种物体识别比赛,一般公布的是top 5的结果(可见最早精度有多低)。 CNN在ImageNet的发展史,就是它在图像识别的一段近5年的历史了。


激光雷达点云数据的处理,无论识别还是分割,有PointNet以及改进的CNN模型。



基于点云做目标识别的例子有Apple公司研究人员发表的VoxelNet模型:



将点云和RGB图像结合的目标检测CNN模型例子如下:



这里顺便提一下人脸识别,因为是对人脸的个体属性判别,所以这个课题应该算fine grained recognition。 就好像对狗或者马这种动物继续判别它的品种,都是细分的。


请注意,人脸识别分人脸验证(face verification)和人脸确认(face identification); 前者是指两个人是不是同一个人,1-to-1 mapping,而后者是确定一个人是一群人中的某个,1-to-many ampping。 以前经常有报道机器的人脸识别比人强了,都是指前者,假如后者的话,那谁能像机器一样识别上万人的人脸数据库呢? 何况中国公安部的数据高达亿的数量级。


一个完整的人脸识别系统,需要完成人脸检测和人脸校准(face alignment),而后者是需要人脸关键点(facial landmarks)的检测,也是可以基于CNN模型来做。 这里以FB的DeepFace模型为例吧,给出一个人脸识别的系统框图:



这是不久前刚刚提出的人脸检测模型: Selective Refinement Network









请到「今天看啥」查看全文