简单回顾的话,2006年Geoffrey Hinton的论文点燃了“这把火”,现在已经有不少人开始泼“冷水”了,主要是AI泡沫太大,而且深度学习不是包治百病的药方。
计算机视觉不是深度学习最早看到突破的领域,真正让大家大吃一惊的颠覆传统方法的应用领域是语音识别,做出来的公司是微软,而不是当时如日中天的谷歌。计算机视觉应用深度学习堪称突破的成功点是2012年ImageNet比赛,采用的模型是CNN,而不是Hinton搞的RBM和DBN之类,就是Hinton学生做出来以他命名的AlexNet。
(注:顺便提一下,2010年的ImageNet冠军是余凯/林元庆领导的NEC和UIUC Tom Huang组的合作团队,当时采用的方法是基于sparse coding+SVM。)
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, ......
下面我们针对具体应用再仔细聊。
图像/视频处理
先说图像/视频处理(计算机视觉的底层,不低级)。
这是一个典型成像处理的流程图:
先给出一个encoder-decoder network的AR-CNN模型(AR=Artifact Reduction):
Bilateral filter是很有名的图像滤波器,这里先给出一个受此启发的CNN模型做图像增强的例子:
用于修补的基于GAN思想的Encoder-Decoder Network模型:
还有计算机视觉的预处理(2-D)。
1、特征提取
一个轮廓检测的encoder-decoder network模型:
这里给出一个做匹配的模型MatchNet:
2.5-D计算机视觉
再说2.5-D计算机视觉部分(不是全3-D)。
可以说深度学习是相当“暴力”的,以前分析的什么约束呀,先验知识呀在这里统统扔一边,只要有图像数据就可以和传统机器学习方法拼一把。
传统的方法包括局部法和全局法,这里CNN取代的就是全局法。
2、视差/深度图估计
深度图估计和运动估计是类似问题,唯一不同的是单目可以估计深度图,而运动不行。
这里是一个双目估计深度图的模型:
刚才介绍单目估计深度图的时候,其实已经看到采用inverse warping方法做新视角生成的例子,在IBR领域这里有一个分支叫Depth Image-based Rendering (DIBR)。
这是一个产生新视角的模型:
3-D计算机视觉
下面谈谈3-D,基于多视角(MVS)/运动(SFM)的重建,后者也叫SLAM。
基本上可以分成两种路径:一是多视角重建,二是运动重建。前一个有一个经典的方法MVS(multiple view stereo),就是多帧匹配,是双目匹配的推广,这样采用CNN来解决也合理。当年CMU在Superbowl展示的三维重建和视角转化,轰动一时,就是基于此路径,但最终没有被产品化(技术已经转让了)。
想想像特征点匹配,帧间运动估计,Loop Closure检测这些模块都可以采用CNN模型解决,那么SLAM/SFM/VO就进入CNN的探索区域。
1、标定
Calibration是计算机视觉的经典问题,摄像头作为传感器的视觉系统首要任务就是要确定自己观测数据和3-D世界坐标系的关系,即标定。摄像头标定要确定两部分参数,一是内参数,二是外参数。对于有多个传感器的视觉系统,比如深度测距仪,以前有Kinect RGB-D,现在有Velodyne激光雷达,它们相互之间的坐标系关系是标定的任务。
2、Visual Odometry(VO)
运动恢复结构是基于背景不动的前提,计算机视觉的同行喜欢SFM这个术语,而机器人的peers称之为SLAM。SLAM比较看重工程化的解决方案,SFM理论上贡献大。
MVS的传统方法可以分成两种:region growing和depth-fusion,前者有著名的PMVS,后者有KinectFusion,CNN模型求解MVS的方法就是基于此。
环境理解
核心部分是计算机视觉的高层。
这部分是深度学习在计算机视觉最先触及,并展示强大实力的部分。出色的工作太多,是大家关注和追捧的,而且有不少分析和总结文章,所以这里不会重复过多,只简单回顾一下。
1、语义分割/实例分割(Semantic/Instance Segmentation)
语义分割最早成功应用CNN的模型应该是FCN(Fully Convolution Network),由Berkeley分校的研究人员提出。它是一种pixel2pixel的学习方法,之后各种演变模型,现在都可以把它们归类于Encoder-Decoder Network。
这是一个借鉴目标检测算法SSD的实例分割模型。
目标检测的开拓性工作应该是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基本也解决了精度低的弱点。
激光雷达点云数据的处理,无论识别还是分割,有PointNet以及改进的CNN模型。
请注意,人脸识别分人脸验证(face verification)和人脸确认(face identification);前者是指两个人是不是同一个人,1-to-1 mapping,而后者是确定一个人是一群人中的某个,1-to-many ampping。以前经常有报道机器的人脸识别比人强了,都是指前者,假如后者的话,那谁能像机器一样识别上万人的人脸数据库呢?何况中国公安部的数据高达亿的数量级。
一个完整的人脸识别系统,需要完成人脸检测和人脸校准(face alignment),而后者是需要人脸关键点(facial landmarks)的检测,也是可以基于CNN模型来做。这里以FB的DeepFace模型为例吧,给出一个人脸识别的系统框图:
这是不久前刚刚提出的人脸检测模型:Selective Refinement Network
而这里给出一个基于facial landmarks做校准的模型:
3、跟踪(特别例子:人体姿态/骨架)
目标跟踪是一个递推估计问题,根据以前的图像帧目标的信息推算当前目标的位置甚至大小/姿态。有一阵子,跟踪和检测变得浑为一体,即所谓tracking by detection,跟踪也可以看出一个目标分割(前后景而言)/识别问题。
跟踪是短时(short term)邻域的检测,而一般的检测是长时(long term)大范围的检测。跟踪的困难在于目标的遮挡(分部分还是全部),背景复杂(相似目标存在),快速(fast)以及突变(agile)运动等等。比如,跟踪人脸,当转90度成侧脸时就会有以上这些问题。
跟踪方法有一个需要区分的点,多目标(MOT)还是单目标(SOT)跟踪器。单目标不会考虑目标之间的干扰和耦合,而多目标跟踪会考虑目标的出现,消失以及相互交互和制约,保证跟踪各个目标的唯一性是算法设计的前提。
跟踪目标是多样的,一般是考虑刚体还是柔体,是考虑单刚体还是铰接式(articulated),比如人体或者手指运动,需要确定skeleton模型。跟踪可以是基于图像的,或者激光雷达点云的,前者还要考虑目标在图像中大小的变化,姿态的变化,难度更大。
基于以上特点,跟踪可以用CNN或者RNN模型求解,跟踪目标的描述本身就是NN模型的优势,检测也罢,分割或者识别也罢,都不是问题。运动特性的描述也可以借鉴RNN模型,不过目前看到的结果这部分不比传统方法好多少。
最近CMU提出一个方法,基于Part Affinity Fields(PAF)来估计人体姿态和骨架,速度非常快。PAF是一个非参数描述模型,用来将图像像素和人体各肢体相关起来,看它的架构如图,采用的是two branch CNN结构,联合学习各肢体的相关性和位置。
四大领域应用
最后一下计算机视觉的推动领域。
后来有了SIFT,用了Information Retrieval的概念Bag of Words,加上inverted Indexing,TF-IDF(term frequency–inverse document frequency),hashing之类的技术变得好多了,每年ACM MM会议上一堆的paper。深度学习进来,主要就是扮演特征描述的角色。
AR一开始就不好做,不说VR那部分的问题,主要是实时性要求高,无论识别还是运动/姿态估计,精度都不好。现在计算机硬件发展了,计算速度提高了,加上深度学习让识别变得落地容易了,最近越来越热,无论是姿态估计还是特征匹配(定位),都变得容易些了。希望这次能真正对社会带来冲击,把那些AR的梦想都实现。
Captioning是计算机视觉和NLP的结合。你可以把它当成一个“检索”任务,也可以说是一个“翻译”工作。深度学习,就是来帮助建立一个语言模型并取样产生描述。
4、内容问答(Q&A)
原文链接:
https://zhuanlan.zhihu.com/p/55747295