计算机视觉方向简介 | 三维深度学习中的目标分类与语义分割
三維數(shù)據(jù)的表示方法
?●??point cloud:點(diǎn)云,也就是三維坐標(biāo)系統(tǒng)中點(diǎn)的集合,這些點(diǎn)通常以x,y,z坐標(biāo)來表示,并且一般用來表示物體的外表形狀。當(dāng)然,除了最基本的位置信息以外,也可以在點(diǎn)云中加入其他的信息,如點(diǎn)的色彩信息等。大多數(shù)的點(diǎn)云是由3D掃描設(shè)備獲取的,如激光雷達(dá),立體攝像機(jī),深度相機(jī)等。
?●??Mesh:網(wǎng)格,是由一組凸多邊形頂點(diǎn)以及凸多邊形表面組成的,也叫做非結(jié)構(gòu)化網(wǎng)格。多邊形網(wǎng)格是希望通過一種易于渲染的方式來表示三維物體模型。在三維可視化等方面有很大的作用。現(xiàn)在有很多種方法來將點(diǎn)云轉(zhuǎn)換成多邊形網(wǎng)格。?●??Voxel:體素,概念上類似于二維空間中的最小單位--像素,體素可以看作是是數(shù)字?jǐn)?shù)據(jù)在三維空間分區(qū)中的最小單位,體素化是一種規(guī)格化的表示方法,在很多方面都有著重要的應(yīng)用。
?●??Multi-View Images:多視角圖片,是通過不同視角的虛擬攝像機(jī)從物體模型中獲取到的二維圖像的集合。多視圖通常需要使用比較多的圖片來構(gòu)建完整的三維模型,在固定圖片數(shù)量的情況下,很容易受到物體自遮擋等因素的影響。
圖1:三維模型的表示方法(來源:stanford bunny)
三維深度學(xué)習(xí)的難點(diǎn)與挑戰(zhàn):
點(diǎn)云的非結(jié)構(gòu)化
二維圖像是結(jié)構(gòu)化的,可以使用一個(gè)二維矩陣進(jìn)行表示,但是在三維表示方法中,點(diǎn)云以及多邊形網(wǎng)格都是非結(jié)構(gòu)化的,想要直接輸入到神經(jīng)網(wǎng)絡(luò)架構(gòu)中是非常困難的,而將點(diǎn)云數(shù)據(jù)進(jìn)行體素化,然后使用深度學(xué)習(xí)模型進(jìn)行特征提取的方法雖然效果很好,但是由于這種方法占用的內(nèi)存太多,導(dǎo)致只能使用比較小分辨率的體素網(wǎng)格。
點(diǎn)云姿態(tài)變換的類別不變性
物體在三維空間中的姿態(tài)是任意的,將物體點(diǎn)云進(jìn)行旋轉(zhuǎn)平移操作,雖然改變了點(diǎn)云中的點(diǎn)的坐標(biāo),但是物體的類別其實(shí)是沒有改變的,因此在三維深度網(wǎng)絡(luò)架構(gòu)過程中需要考慮到如何保證神經(jīng)網(wǎng)絡(luò)對(duì)于姿態(tài)的不變性。
點(diǎn)云數(shù)據(jù)的多樣性
實(shí)際場景中得到物體多種多樣,點(diǎn)云的大小差距也很大,模型能否處理不同尺度的點(diǎn)云也是非常大的挑戰(zhàn),還有就是,現(xiàn)在的點(diǎn)云數(shù)據(jù)集相較于二維方面的數(shù)據(jù)集來說,還是比較小的,這對(duì)于深度學(xué)習(xí)來說也是一個(gè)不小的挑戰(zhàn)。
三維深度學(xué)習(xí)的方法
基于體素化的方法
這種方法的核心思想就是將無序的點(diǎn)云進(jìn)行體素化,使之變成規(guī)格化的表示方法,然后使用3D CNN網(wǎng)絡(luò)架構(gòu)進(jìn)行特征學(xué)習(xí),來達(dá)到分類或是目標(biāo)檢測的目的。其中,比較有代
表性的文章有3D ShapeNets [1],VoxNet [2]等,圖2就是3D ShapeNets的網(wǎng)絡(luò)架構(gòu)以及數(shù)據(jù)的可視化圖片。
圖2:3D ShapeNets(來源:[1])
3D ShapeNets 的網(wǎng)絡(luò)架構(gòu)很簡單,前三層是卷積層,第四層是全連接層,并且為了降低對(duì)外形的影響,網(wǎng)絡(luò)中沒有使用池化層,當(dāng)然還有一些細(xì)節(jié)上的處理,包括對(duì)2.5D點(diǎn)云進(jìn)行識(shí)別時(shí)的NextBestView預(yù)測的方法,這里就不詳細(xì)講解了,感興趣的可以查看原論文。
其實(shí)這種方法可以看作是模擬二維深度學(xué)習(xí)的過程,只是將圖片變成了體素網(wǎng)格,2D CNN變成了3D CNN,確實(shí)在分類方面取得了很好的性能。
但是這種方法也存在著很明顯的缺點(diǎn),首先,由于使用的是3D CNN和三維體素網(wǎng)格,導(dǎo)致計(jì)算過程中占用內(nèi)存很大,且需要較長時(shí)間訓(xùn)練;這種情況下輸入的體素網(wǎng)格的分辨率(30*30*30)也很低,所以還會(huì)存在局部信息的丟失,也就導(dǎo)致這種方法很難應(yīng)用于大場景物體檢測與定位中。
基于多視角圖片的方法
區(qū)別于體素化的方法,多視角圖片在處理三維問題核心思想是,希望通過使用物體在不同視角下的圖片來將三維物體的表面特征完整表示出來,接下來就可以直接使用現(xiàn)在非常成熟的2D CNN技術(shù)進(jìn)行識(shí)別與檢測。這種技術(shù)的思想想并不難理解,其實(shí)跟人眼分類物體的方法相似,如果在某一個(gè)角度無法正確對(duì)物體進(jìn)行分類,那么我們可以換一個(gè)角度試著去進(jìn)行分類,多視角的方法就是使用了這種思想。在這方面比較具有代表性的論文就是Multi-view CNN [3]。
Multi-view CNN 通過對(duì)多個(gè)視角的圖片學(xué)習(xí)到特征,然后達(dá)到比使用單張圖片更好的性能。Multi-view CNN 主要分為兩個(gè)步驟:1)使用在ImageNet預(yù)訓(xùn)練好的VGG網(wǎng)絡(luò)提取特征,2)將這些特征組合在一起,然后再進(jìn)一步的輸入到可訓(xùn)練的CNN網(wǎng)絡(luò)中進(jìn)一步的進(jìn)行特征學(xué)習(xí)然后輸出分類結(jié)果。
圖3:Multi-view CNN架構(gòu)(來源:[3])
雖然這種方法取得了非常好的分類識(shí)別結(jié)果,但是,這種方法同樣存在很大的限制,首先就是網(wǎng)絡(luò)不允許我們無限制的使用各個(gè)視角的圖片,所以固定數(shù)量的多視角圖片可能無法將三維模型完全表示出來,很可能出現(xiàn)信息的丟失,比如物體自遮擋等。還有就是使用二維圖片本身就會(huì)損失一些三維上的結(jié)構(gòu)信息。當(dāng)然,在復(fù)雜場景下,上面的兩個(gè)限制就表現(xiàn)的更加明顯了。
基于點(diǎn)云的方法
PointNet[4]
其實(shí)多視角圖片和體素化的方法都有著相似的中心思想,就是希望通過將點(diǎn)云變換成規(guī)則化的、可以通過CNN直接進(jìn)行處理的形式。而直接對(duì)點(diǎn)云進(jìn)行處理的深度學(xué)習(xí)方法跟上述兩種方法最大的不同就是,它是可以直接使用這些三維點(diǎn)的位置信息的。在這方面比較有代表性的就是PointNet方法。
PointNet主要是解決了兩個(gè)核心問題:點(diǎn)云的無序化和物體姿態(tài)變換的不變性。
1)由于點(diǎn)云是無序的,那么最基本的就是需要保證的就是網(wǎng)絡(luò)對(duì)同一點(diǎn)云的不同輸入順序的不變性,PointNet的解決方案是使用一個(gè)比較簡單的對(duì)稱函數(shù),如圖4所示:
圖4:PointNet對(duì)稱函數(shù)(來源:[4])
其中h是特征提取函數(shù),在PointNet中就是MLP,g就是對(duì)稱函數(shù),可以是max、average等函數(shù),在PointNet中用的是max函數(shù),γ則代表的是網(wǎng)絡(luò)更高層的特征提取函數(shù)。
2)在解決點(diǎn)云的無序性問題之后,還有一個(gè)非常重要的問題,那就是點(diǎn)云的旋轉(zhuǎn)不變特性,點(diǎn)云在旋轉(zhuǎn)過后的類別是不會(huì)發(fā)生改變的,所以PointNet在這個(gè)問題上參考了二維深度學(xué)習(xí)中的STN[5]網(wǎng)絡(luò),在網(wǎng)絡(luò)架構(gòu)中加入了T-Net網(wǎng)絡(luò)架構(gòu),來對(duì)輸入的點(diǎn)云進(jìn)行空間變換,使其盡可能夠達(dá)到對(duì)旋轉(zhuǎn)的不變性。
圖5:PointNet網(wǎng)絡(luò)架構(gòu)(來源:[4])
圖5就是PointNet的整體網(wǎng)絡(luò)架構(gòu),整體的架構(gòu)中主要使用了MLP層進(jìn)行特征提取以及T-Net層進(jìn)行空間變換,并且在求解全局特征(global feature)時(shí)使用對(duì)稱函數(shù)g(max pool)。網(wǎng)絡(luò)支持分類和分割任務(wù),對(duì)于分類任務(wù)來說,就是輸出整個(gè)點(diǎn)云的類別,而分割任務(wù)則是輸出點(diǎn)云中每一個(gè)點(diǎn)的分類結(jié)果。PointNet在這兩種任務(wù)中都取得了很好的結(jié)果。
PointNet的實(shí)驗(yàn)是非常詳細(xì)的,其中個(gè)人對(duì)其中一個(gè)實(shí)驗(yàn)非常感興趣,就是輸入網(wǎng)絡(luò)中的所有的點(diǎn)只輸出了一個(gè)1*1024的全局特征向量,所以說只有不到1024個(gè)關(guān)鍵點(diǎn)的特征使用到了,而論文對(duì)全局特征進(jìn)行了反求,找出了是哪些關(guān)鍵點(diǎn)的特征這個(gè)構(gòu)成了這個(gè)全局向量,并將這些點(diǎn)繪制了出來,如圖6。
圖6:關(guān)鍵點(diǎn)可視化(來源:[4])
PointNet++[6]
雖然PointNet在分類和分割任務(wù)上都取得了很好的結(jié)果,但是論文指出PointNet存在著非常明顯的缺點(diǎn),那就是PointNet只使用了全局的點(diǎn)云特征,而沒有使用局部點(diǎn)附近的特征信息,為了解決這個(gè)問題,PointNet++在網(wǎng)絡(luò)中加入了局部信息提取的方案,并且取得了更好的結(jié)果。
圖7:PointNet++網(wǎng)絡(luò)架構(gòu)(來源:[6])
網(wǎng)絡(luò)最主要的部分就是圖7中的set abstraction部分,它首先是先尋找當(dāng)前點(diǎn)云中的關(guān)鍵點(diǎn),然后根據(jù)距離信息尋找關(guān)鍵點(diǎn)附近的點(diǎn)構(gòu)成一個(gè)小的點(diǎn)集,最后使用PointNet進(jìn)行特征求解。
通過重復(fù)上面的set abstraction部分,便可以不斷的對(duì)局部點(diǎn)云中進(jìn)行特征提取,可以使網(wǎng)絡(luò)更好的利用局部信息。并且實(shí)驗(yàn)也證明了PointNet++相對(duì)于PointNet有了不小的性能提升。當(dāng)然網(wǎng)絡(luò)也使用了MSG和MRG的方法來解決當(dāng)點(diǎn)云密度不均勻時(shí)的采樣距離需要改變的問題,具體細(xì)節(jié)可以查看原論文。
雖然PointNet++達(dá)到了更好的效果,但是由于網(wǎng)絡(luò)加入局部信息之后的不再使用T-net,所以PointNet++有時(shí)候存在結(jié)果不穩(wěn)定的情況,所以PointNet++的測試結(jié)果是對(duì)原始點(diǎn)云進(jìn)行多次旋轉(zhuǎn)求得的平均結(jié)果,可見網(wǎng)絡(luò)還有很大的改進(jìn)空間。
最近這段時(shí)間也陸續(xù)出現(xiàn)了很多很不錯(cuò)的直接處理點(diǎn)云的深度學(xué)習(xí)論文,在這里就不一一介紹了,對(duì)這個(gè)方向有興趣的同學(xué)可以去看看,應(yīng)該會(huì)有很大的幫助,例如:PointCNN,PointSift,Graph CNNs等。
基于二維RGB圖像與三維點(diǎn)云學(xué)習(xí)
Frustrum PointNet[7]
圖8:Frustrum PointNet物體定位流程(來源:[7])
由于無人駕駛技術(shù)的火熱,大規(guī)模場景物體定位問題一直受到很大的關(guān)注,而傳統(tǒng)的解決大規(guī)模場景物體定位的方法是在整個(gè)點(diǎn)云上進(jìn)行滑動(dòng)窗口然后對(duì)窗口進(jìn)行物體分類來確定物體的三維邊界,但是可想而知這種情況下的計(jì)算量太大,很難達(dá)到實(shí)時(shí)預(yù)測。
考慮到現(xiàn)在二維深度學(xué)習(xí)方向的技術(shù)已經(jīng)非常成熟,同時(shí)使用RGB和點(diǎn)云信息在大規(guī)模三位物體定位中應(yīng)該可以取得更好的成果,基于這個(gè)想法,Frustrum PointNet這篇文章就出現(xiàn)了。
上面圖8就是Frustrum PointNet的物體定位的主要流程圖,主要包含三個(gè)步驟:
1)使用二維圖像信息以及FPN網(wǎng)絡(luò)在二維圖像上找到物體邊界框。
2)使用相機(jī)的內(nèi)參數(shù)信息將這個(gè)二維邊界框投射到三維空間,形成一個(gè)Frustrum(截椎體),現(xiàn)在就只需要在這個(gè)Frustrum里面進(jìn)行物體搜索,大大減少了搜索時(shí)間。
3)將PointNet加入了進(jìn)來,使用PointNet直接對(duì)Frustrum中的點(diǎn)云進(jìn)行物體分割,而不是使用傳統(tǒng)的滑動(dòng)窗口操作,從而使得分割的速度更快。當(dāng)然,網(wǎng)絡(luò)還有一些其他的細(xì)節(jié)處理,比如對(duì)Frustrum里的點(diǎn)云進(jìn)行坐標(biāo)的變換處理。通過以上的操作,使得論文的方法既魯棒又迅速,同時(shí)在KITTI 以及 SUN RGB-D 檢測中取得了更好的性能。
論文當(dāng)然也存在著一些問題,那就是論文的二維物體定位之后才能進(jìn)行三維定位,一旦二維出錯(cuò),那么三維定位也將出現(xiàn)問題,當(dāng)然這也是基于現(xiàn)在二維定位效果比三維好的情況下設(shè)計(jì)的。
SPLATNet[8]
這篇文章使用了一種比較特殊的點(diǎn)云處理方法。文章主要是使用了bilateral convolution layers(BCL)這種網(wǎng)絡(luò)架構(gòu),可以對(duì)點(diǎn)云直接進(jìn)行卷積操作,見圖9。
BCL主要有三個(gè)基本操作:Splat、Convolve、Slice:Splat是將歐式空間通過使用一個(gè)變換矩陣轉(zhuǎn)換成另外一個(gè)Permutohedral Lattice空間,并使用插值的方法將點(diǎn)的信息賦值給空間的頂點(diǎn),從圖中可以看出Permutohedral Lattice空間是由多個(gè)三角形構(gòu)成的,分布在平面上,這個(gè)空間對(duì)于點(diǎn)云這種稀疏無序的數(shù)據(jù),能夠高效的進(jìn)行組織和查找,并且方便各種運(yùn)算的進(jìn)行,如卷積運(yùn)算。接下來就是Convolve,這就比較簡單了,由于點(diǎn)云已經(jīng)被投射到這個(gè)規(guī)格化的空間中,位置是比較規(guī)整的,只要按照哈希表做索引,進(jìn)行卷積操作就可以了。Convolve結(jié)束之后使用Slice操作了,這是Splat的逆過程就是把卷積后的Permutohedral Lattice空間上的點(diǎn)的信息轉(zhuǎn)換到原來歐式空間中的點(diǎn)上。
論文另一個(gè)吸引人的地方就是BCL2D->3D,可以將從多視圖圖像中提取的特征利用Permutohedral Lattice投射到三維空間,使得二維圖像與點(diǎn)云以一種學(xué)習(xí)的方法結(jié)合在一起,論文也通過這種方法取得了非常好的語義分割性能。
不過由于這篇論文在BCL方面講解的并不細(xì)致,所以要是想要深入了解這方面的的內(nèi)容的話,需要參考另外論文中的參考文獻(xiàn)1和25文獻(xiàn)才能真正理解這方面的一些詳細(xì)內(nèi)容。
總結(jié)
三維方向的深度學(xué)習(xí)在過去幾年里也已經(jīng)發(fā)生了比較大的變化,已經(jīng)從使用體素網(wǎng)格或者多視角圖像轉(zhuǎn)變?yōu)榱酥苯邮褂命c(diǎn)云進(jìn)行學(xué)習(xí),并且性能方面也有了很大的提高。不過,這個(gè)領(lǐng)域也是近期才快速的發(fā)展起來,并且隨著三維傳感器的進(jìn)一步普及,這個(gè)領(lǐng)域的相關(guān)研究會(huì)得到更多的關(guān)注。而且現(xiàn)在的大規(guī)模數(shù)據(jù)集基本上是關(guān)于自動(dòng)駕駛的,但是可以想象三維深度學(xué)習(xí)在三維醫(yī)療影像、智能機(jī)器人等也會(huì)發(fā)揮很大的作用。
原文發(fā)布時(shí)間為:2018-11-8
本文來自云棲社區(qū)合作伙伴“計(jì)算機(jī)視覺life”,了解相關(guān)信息可以關(guān)注“計(jì)算機(jī)視覺life”。
總結(jié)
以上是生活随笔為你收集整理的计算机视觉方向简介 | 三维深度学习中的目标分类与语义分割的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 多线程编程学习笔记——使用并发集合(三)
- 下一篇: 专家:不仅人脸识别,信息验证、生物特征都