超全!深度學習在計算機視覺領域應用一覽(附鏈接)

 2019-08-02 13:02:11.0

簡單回顧的話,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

而這裏給出一個基於facial landmarks做校準的模型:

順便提一下曠視科技的Pyramid CNN模型和商湯科技的DeepID2模型(一共發佈過4個DeepID版本)依次如圖。

3、跟蹤(特別例子:人體姿態/骨架)

目標跟蹤是一個遞推估計問題,根據以前的圖像幀目標的信息推算當前目標的位置甚至大小/姿態。有一陣子,跟蹤和檢測變得渾爲一體,即所謂tracking by detection,跟蹤也可以看出一個目標分割(前後景而言)/識別問題。

跟蹤是短時(short term)鄰域的檢測,而一般的檢測是長時(long term)大範圍的檢測。跟蹤的困難在於目標的遮擋(分部分還是全部),背景複雜(相似目標存在),快速(fast)以及突變(agile)運動等等。比如,跟蹤人臉,當轉90度成側臉時就會有以上這些問題。

跟蹤方法有一個需要區分的點,多目標(MOT)還是單目標(SOT)跟蹤器。單目標不會考慮目標之間的干擾和耦合,而多目標跟蹤會考慮目標的出現,消失以及相互交互和制約,保證跟蹤各個目標的唯一性是算法設計的前提。

跟蹤目標是多樣的,一般是考慮剛體還是柔體,是考慮單剛體還是鉸接式(articulated),比如人體或者手指運動,需要確定skeleton模型。跟蹤可以是基於圖像的,或者激光雷達點雲的,前者還要考慮目標在圖像中大小的變化,姿態的變化,難度更大。

基於以上特點,跟蹤可以用CNN或者RNN模型求解,跟蹤目標的描述本身就是NN模型的優勢,檢測也罷,分割或者識別也罷,都不是問題。運動特性的描述也可以借鑑RNN模型,不過目前看到的結果這部分不比傳統方法好多少。

先看一個單目標跟蹤的CNN模型。
這個展示的模型是一個基於R-CNN檢測模型擴展的單目標跟蹤方法:
多目標跟蹤模型有這麼一個例子:
下面是一個基於RNN的多目標跟蹤模型:
補充一個基於RGB圖像和3-D點雲的目標跟蹤NN模型:
順便談一下人體姿態和骨架跟蹤問題。以前傳統方法在人體姿態估計花了很大力氣但效果不好,提出了part-based目標模型,比如constellation model, pictorial structure, implicit shape model, deformable model等等。

最近CMU提出一個方法,基於Part Affinity Fields(PAF)來估計人體姿態和骨架,速度非常快。PAF是一個非參數描述模型,用來將圖像像素和人體各肢體相關起來,看它的架構如圖,採用的是two branch CNN結構,聯合學習各肢體的相關性和位置。

下面這個是其中雙部圖形匹配(Bipartie matching)算法的示意圖。
這種多目標快速姿態跟蹤的實現對人體行爲的理解是非常重要的工具。

四大領域應用

最後一下計算機視覺的推動領域。

這裏我選了4個計算機視覺的應用,談談深度學習對這些領域的推動,在CNN或者RNN「火」之前,這些應用已經存在,但在識別分類任務上性能有限罷了。自動駕駛的應用在另外文章已經提過了,在此忽略。
1、內容檢索
CBIR(Content-based Image Retrieval)有兩波人搞,一波是計算機科學的,把這個問題當數據庫看待;另一波人是電子過程的,認爲是圖像匹配問題。剛開始大家也是對這個問題的semantic gap比較頭疼,用了一些feature,比如顏色,紋理,輪廓,甚至layout,效果真不咋樣。

後來有了SIFT,用了Information Retrieval的概念Bag of Words,加上inverted Indexing,TF-IDF(term frequency–inverse document frequency),hashing之類的技術變得好多了,每年ACM MM會議上一堆的paper。深度學習進來,主要就是扮演特徵描述的角色。

這是一個CBIR採用CNN的框架:
這個展示的是image matching用於CBIR的CNN模型:
2、增強現實

AR一開始就不好做,不說VR那部分的問題,主要是實時性要求高,無論識別還是運動/姿態估計,精度都不好。現在計算機硬件發展了,計算速度提高了,加上深度學習讓識別變得落地容易了,最近越來越熱,無論是姿態估計還是特徵匹配(定位),都變得容易些了。希望這次能真正對社會帶來衝擊,把那些AR的夢想都實現。

這個框架是Google Glass的AR應用平臺,其中幾個模塊都可以基於CNN實現:
下面給出的是camera motion 的encoder-decoder network框架:三個模型串聯,其中一個有迭代。
下面的模型展示了特徵提取和描述的作用,AR中直接可以用做re-localization。
3、內容加註/描述

Captioning是計算機視覺和NLP的結合。你可以把它當成一個「檢索」任務,也可以說是一個「翻譯」工作。深度學習,就是來幫助建立一個語言模型並取樣產生描述。

4、內容問答(Q&A)

Q&A 也是計算機視覺和NLP的結合,其實質是在圖像描述和語言描述之間建立一個橋樑。有人說,Q&A是一個Turing Test的好問題,這裏深度學習就是在幫助理解圖像的描述,問題的組成,以及它們模式之間的交互。
有些CNN的應用還是需要進一步改進模型,性能並沒有達到滿意。不過,大家高興地看到深度學習已經進來了,以後隨着研究的深入性能會越來越好。

原文鏈接:

https://zhuanlan.zhihu.com/p/55747295

文章來源:機器之心