知荐深度学习在计算机视觉领域的应用一

女性应该要适当补充的物质 http://www.bdfyy999.com/bdf/yufangbaojian/zhegaitiandi/m/32928.html

文:黄浴博士奇点汽车美研中心首席科学家兼总裁

转自:自动驾驶的挑战和发展

知乎专栏

还是做一些背景介绍。已经是很热的深度学习,大家都看到不少精彩的故事,我就不一一重复。

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

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

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

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

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

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

简单回顾一下:

AlexNet应该算第一个深度CNN;

ZFNet采用DeconvNet和visualization技术可以监控学习过程;

VGGNet采用小滤波器3X3去取代大滤波器5X5和7X7而降低计算复杂度;

GoogleNet推广NIN的思路定义Inception基本模块(采用多尺度变换和不同大小滤波器组合,即1X1,3X3,5X5)构建模型;

HighwayNetworks借鉴了RNN里面LSTM的gaiting单元;

ResNet是革命性的工作,借鉴了HighwayNetworks的skipconnection想法,可以训练大深度的模型提升性能,计算复杂度变小;

Inception-V3/4用1X7和1X5取代大滤波器5X5和7X7,1X1滤波器做之前的特征瓶颈,这样卷积操作变成像跨通道(crosschannel)的相关操作;

DenseNet主要通过跨层链接解决vanishinggradient问题;

SE-Net是针对特征选择的设计,gating机制还是被采用;

前段时间流行的Attention机制也是借鉴于LSTM,实现object-aware的context模型。

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

detection问题的R-CNN,fastRCNN,fasterRCNN,SSD,YOLO,RetinaNet,CornerNet等,

解决segmentation问题的FCN,DeepLab,Parsenet,Segnet,MaskR-CNN,RefineNet,PSPNet,U-Net等,

处理激光雷达点云数据的VoxelNet,PointNet,BirdNet,LMNet,RT3D,PIXOR,YOLO3D等,

实现激光雷达和图像融合的PointFusion,RoarNet,PointRCNN,AVOD等,

做图像处理的DeHazeNet,SRCNN(super-resolution),DeepContour,DeepEdge等,

2.5D视觉的MatchNet,DeepFlow,FlowNet等,

3-D重建的PoseNet,VINet,PerspectiveTransformerNet,SfMNet,CNN-SLAM,SurfaceNet,3D-R2N2,MVSNet等,

以及解决模型压缩精简的MobileNet,ShuffleNet,EffNet,SqueezeNet,

。。。

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

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

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

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

经典的ISP流程图如下:

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

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

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

先给出一个encoder-decodernetwork的AR-CNN模型(AR=ArtifactReduction):

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

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

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

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

3修补/恢复/着色;

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

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

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

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

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

1特征提取;

LIFT(LearnedInvariantFeatureTransform)模型,就是在模仿SIFT:

2边缘/轮廓提取;

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

3特征匹配;

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

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

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

后来,随机概率和贝叶斯估计大行其事,约束条件变成了先验知识(prior),计算机视觉圈里写文章要是没有P(Probability)和B(Bayes),都不好意思发。像SVM,Boosting,GraphicalModel,RandomForest,BP(BeliefPropagation),CRF(ConditionalRandomField),MixtureofGaussians,MCMC,SparseCoding都曾经是计算机视觉的宠儿,现在轮到CNN出彩:)。

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

1运动/光流估计;

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

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

2视差/深度图估计;

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

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

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

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

3视频去隔行/内插帧;

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

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

首先看一个做MEMC的模型:

这是做Deinterlacing的一个模型:

这是Nvidia的FramerateUpconversion方面模型:

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

4新视角图像生成;

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

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

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

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

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

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

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

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

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

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

1标定;

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

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

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

它的模型CalibNet结构视图:

2VisualOdometry(VO);

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

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

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

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

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

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

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

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

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

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

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

4MVS:

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

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

它的系统框图如下:

UIUC/Facebook合作的DeepMVS模型:

这是他们的系统框图:

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

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

核心部分是计算机视觉的高层:环境理解。

这部分是深度学习在计算机视觉最先触及,并展示强大实力的部分。出色的工作太多,是大家



转载请注明地址:http://www.sheyingxingye.com/ggsy/30400.html
  • 上一篇文章:
  • 下一篇文章: 没有了