2
本文作者: 劉鵬 | 2018-07-06 18:13 |
雷鋒網(wǎng) AI 科技評論按:隨著激光雷達,RGBD 相機等 3D 傳感器在機器人,無人駕駛領域的廣泛應用,深度學習在三維點云數(shù)據(jù)的研究在近兩年取得了廣泛關注。點云分割、識別、檢測成為學術界、工業(yè)界的熱門話題之一。
近期,在 GAIR 大講堂上,南加州大學計算機系在讀博士王薇月分享了其關于點云分割的最新工作。
王薇月,南加州大學計算機系在讀博士,導師是 Ulrich Neumann 教授,主要研究方向為計算機視覺,三維視覺等。其研究工作曾在 CVPR、ICCV、ECCV 等發(fā)表。公開課回放鏈接:http://www.mooc.ai/open/course/501
分享題目:深度學習在點云分割中的應用
分享提綱
深度學習在點云上的應用。
2D 圖像的實例分割與物體檢測。
SGPN [CVPR 2018]:點云的實例分割與物體檢測。(SGPN: Similarity Group Proposal Network for 3D Point Cloud Instance Segmentation)
RSNet [CVPR 2018]:點云的語義分割。(Recurrent Slice Networks for 3D Segmentation on Point Clouds)
以下為雷鋒網(wǎng) AI 科技評論整理的分享內(nèi)容:
大家好,我是來自南加州大學的在讀 phd 王薇月,我的主要研究方向是 computer vision(主要側(cè)重于 3D 的 vision),今天我們介紹的是深度學習在點云分割中的應用。我們知道三維物體和場景有很多種的表達方式,比如 3D 的 mesh,還有 Volumetric data,distance field 等等。點云是比較直接,而且很簡單的一種表示方式。首先介紹一下什么是點云(Pinot Cloud),點云是很多三維的點的坐標的集合,這整個集合可以反映場景或者物體的幾何信息,在計算機里面,它就是一個 N*3 維的一個矩陣,N 代表的是點的個數(shù),三維就是 x、y、z 的坐標(當然也可以是 N*6,即 x、y、z、r、g、b),隨著激光、雷達和深度攝像頭等硬件設備的發(fā)展,我們就能更好地捕捉 3D 的場景,處理 3D 信息也是現(xiàn)在的一個非常關注、非?;鸬脑掝}。采集點云的主要方式就是激光雷達、深度攝像頭(深度攝像頭采集來的 depth map 可以通過照相機的參數(shù)計算出 3D 的點云)。我們今天的講課專注點云的分割。
所謂點云的分割,今天我想介紹的有兩層,一層是語義分割和實例分割,所謂語義分割就是給每個點 assign 一個 label,比如說這個點是桌子還是椅子。實例分割就是在 assign 語義分割的同時,把每個不同的物體給分割出來,比如一個房間里有很多椅子,每個點標 label 成椅子 1、椅子 2。實例分割與物體檢測,即 object detection 是緊密相連的,object detection:給一個場景,把你想要的物體檢測出來并給一個 bounding box。實例分割是比物體檢測要稍微難一點的問題,因為它需要給每個點都要標出來。今天主要介紹在最新的 CVPR 上的兩個工作,一個是對點云進行實例分割的網(wǎng)絡:similarity group proposal network,還有一個是對點云進行語義分割的網(wǎng)絡,recurrent slice network。
首先介紹 SGPN:實例分割的網(wǎng)絡
在此之前,我想先回顧一下 2D 是怎么做實例分割和物體檢測的。
我們都知道 2D CNN 在物體檢測上取得了比較好的成果,就是 R-CNN 一系列的工作,包括 fast R-CNN,都是從 R-CNN 開始的,R-CNN 是使用 selective search 從圖片中提取一些用 Region Proposal,然后把每一個 proposal fit 到 CNN 的網(wǎng)絡里面,然后再進行分類,它用這種方法來進行物體檢測。根據(jù) R-CNN 的工作,faster R-CNN 替代了 selective search,通過 Region Proposal network 來 regress 每個 Region Proposal 的相對 anchor 的 offset 來獲取 proposal,然后這整個是一個 end-to-end 的網(wǎng)絡,出來的就是一些 pixel 的 bounding box,還有每個 bounding box 代表的每個物體的概率。根據(jù) faster R-CNN 的 ICCV 的 best paper 是 Mask R-CNN,它是通過做圖像 level 的實例分割來實現(xiàn),它們沿用了 faster R-CNN 的 Region Proposal network,然后在生成了 bounding box 的基礎上又生成了 object mask,我們也使用這種 Region Proposal 的概念,然后對點云進行分割,隨后我會對此進行詳細的介紹。
還有一個相關的工作是 3D 的 deep learning,從 2D 的 CNN 到 3D 的 CNN,最直接的方法就是 Volumetric CNN,當然這個是因為受到 GPU 內(nèi)存的限制,沒有辦法做到很高的精度。去年 CVPR 上斯坦福的研究者們提出了 PointNet,是針對 point cloud 的網(wǎng)絡,他們把 N*3 的點云 feed 到網(wǎng)絡里面,然后在最后一層用 max pooling 提取 global feature,然后把這個 global feature concat 到每一個點云,然后進行分割,我們的網(wǎng)絡建立在 pointnet 和它的后續(xù)工作 pointnet++的基礎上提取出來 feature。
我們還有一個相關的工作是,deep metric learning,中文:度量學習,在 deep learning 里面比較典型的 metric learning 就是 siamese network,比如說有兩張圖片,我們想讓它做分類的話,同一類在 feature space 里面很相近,不同類就是在 feature space 里面相差比較遠,它們的兩張圖片 feed 到的 CNN,是 share 的 weight,project 到同一個 feature space 上,訓練的時候用的是 Hinge Loss(即圖右公式)。
之后會講我們的工作跟 simaese network 的關系,先簡單介紹一下背景,之前說過,我們的任務是想生成一個 instance label 和一個 semantic segmentation label,也就是說對于每個點云有兩個 label,一個 label 代表著這個點云是屬于椅子 1 還是椅子 2 的,另一個 label 代表它是椅子還是桌子,還是電視等等,背景知識已經(jīng)介紹完畢了。我們是建立在 pointnet 和 pointnet++基礎上進行 feature 提取,然后借用 R-CNN 等工作的 Region Proposal 的思想,提出了一個叫 similarity group proposal 的 network,我們現(xiàn)在把它簡化為 SGPN。
SGPN 的大體思路是這樣的,我們首先是用 pointnet 提取 feature,也可用 pointnet++,提起完 feature 之后,之后有 3 部分(下圖中間部分),similarity matrix,confidence map,semantic prediction,我下面會對這三個部分進行一一介紹。
首先是 semantic prediction,semantic prediction 跟 pointnet 的 semantic segmentation 是一樣的,對于每個點生成的是一個 classic 的 probability,就是對于每個 class 它的概率是多大,比如說我們有 Np 個點,就生成了 Np*NC 的 matrix,NC 就是有多少個 object class,下面的這個結果就是 semantic prediction 的結果,比如下圖(右)黃色區(qū)域代表桌子,藍色區(qū)域代表椅子。
下面來介紹 similarity matrix,similarity matrix 就是對于每一個點,我們想生成 N 個點相對于它的位置,也就是說對于 similarity matrix 是通過 pointnet 生成的那個 feature,我們管它叫 Fsim,通過它進行計算它的 pointwise 的 distance,對于這個 similarity matrix,假設它叫做一個 ij 的元素,Sij 就是 point i 和 point j 在 feature space 的距離,如果它距離越遠,說明它們兩個就不在同一個 group,如果距離越近,就說明在同一個 group,也就是說如果兩個點都是椅子 1 的話,它們
兩個在 feature 里的距離比較近。如果椅子 1 和椅子 2 在 feature space 里面距離比較遠,或者說它們是椅子和桌子的話,它們兩個在 feature space 里面的距離也要非常遠。然后,我們有這樣一個 Np(點的個數(shù)),有這樣一個 Np*Np 的 similarity matrix,就是說每一行都可以是一個 group proposal,我們要設一個 threshold,如果小于這個 threshold,對于每一個小于這個 threshold,表示這些點在一個 group 里面,也就是說我們現(xiàn)在有 Np 個 group proposal,現(xiàn)在的問題就是我們怎么去 train 這個 matrix,它的 Ground Truth 是什么?
我們剛才講過了 siamese network,就是說兩個圖片如果是一類的話,就讓它們在 feature specs 里面的距離很小。如果它們不是一類的話,就讓它們距離比較大,所以我們通過采用這種方式,借用這個思想,來訓練我們的 similarity matrix,如果兩個點屬于不同類的話,我們就讓它們的距離很大。如果它們是相同類的話,我們就讓它們在 feature specs 里面的距離比較小,我們同樣得使用的是 Hingle loss,兩個點都是椅子 1 的話,我們就 minimize 這個 term(下圖右下公式),在這里介紹一個 double hinge loss,也就是說兩個點,一個椅子 1、一個椅子 2 的話,我們讓它們的 margin 比 K1 大。如果兩個點是一個桌子、一個椅子的話,我們就讓它們的距離比 K2 大,在訓練的時候 K1 要比 K2 小一點,在實驗中我們發(fā)現(xiàn)用這種 double hinge loss 的方式,會讓結果更好一點,比 K1=K2 的時候結果好一點,這樣我們就訓練出了 similarity matrix。
大家可以來看一下這些 visualize 的結果,這些代表的是 similarity,越黑的表示 feature specs 它們的距離越近,顏色越淺,就表示它們 feature specs 距離越遠。
介紹完了 similarity matrix,我們再來介紹另一個部分:confidence map。
因為 similarity matrix 是個 Np*Np 的矩陣,也就是說我們有 Np 個 group proposal,這樣就有很多冗余,我們想用這個 confidence map 削減一些 group proposal,confidence map 的定義,也就是說它的 ground truth 是如下定義的。
對于 similarity matrix 的每一個行,我們是一個 group proposal,對于這一個 group proposal,我們有一個 ground truth,然后我們把這個通過 similarity matrix 預測出來的 prediction 的結果和 ground truth 進行比較,我們計算 IoU,IoU 就是 inter section over union,也就是說,如果 IoU 越大的話,表示這一行,也就是這個 similarity propose 出來的結果更可信。如果 IoU 更小的話,是更不可信的,這樣我們就 regress 出來 confident map,然后在這里,我們也 visualize 這些 confidence,顏色越深表示 confidence 越高,顏色越淺表示 confidence 越低,我們可以看到著一些 connection part,連接處的 confidence 比較低,通過這些方式去排除掉一些噪聲,相當于在 similarity matrix 的預測削減掉一些 similarity matrix confidence 比較低的 group proposal。
之后,像 R-CNN、faster R-CNN 它們有一些 post processing,它們會多預測出來一些 region proposal,然后就會用 threshold 的方法去 prove 這些結果,我們也同樣用一個比較簡單的貪婪法去 prove 這個結果,效果也是非常不錯的,對于網(wǎng)絡預測出來的一些 group proposal,對于每一個,先 initialize 一個大的 group set,如果這個 group proposal 是沒有出現(xiàn)在這個 group set 里面,我們就把它放進去,如果出現(xiàn)了的話,我們就進行下一個,這樣就做了一個 post processing,就得到了最終的結果,下面是一些實驗結果。
在介紹實驗結果之前,我們先簡單介紹一種非常簡單的均類方法,就是在所有的點里面選一些種子,然后進行 BFS 去 search 到最近的零點,然后去尋找跟它最近的相同的 label,如果它們有一個 threshold,如果大于這個 threshold 就停止,如果小于這個 threshold,就繼續(xù)尋找。相同的 label group 起來,就形成了一個新的 instance,就是我們的一個 group,然后通過跟這個方法進行比較,因為在 literature 上面進行點云實例分割的文章比較少,我們就用這種比較簡單的方法進行比較。
可以看到,這個是 stanford 3D indoor semantic dataset 上面,然后我們?nèi)〉玫慕Y果比 seg-cluster 好很多。我們有了 instance segmentation 之后,就很容易得到 3D 的 object detection 結果,因為我們有了每個 instance,每個點的位置,我們就可以計算 bounding box,然后去跟 Ground Truth 的 bounding box 比較,pointnet 也給了一個 framework 去做 instance segmentation,可以看到我們比它們也是好很多。
seg-cluster 有不同的 threshold,hreshold 變大的時候,也就是說兩個相同 label 的物體更容易連接在一起,如果 threshold 變小的時候就更不容易連接在一起,threshold 變小的時候,結果就如上圖(右部)所示,將它分成了兩個部分,但是在 SGPN 中就會避免這個問題,通過 similarity matrix 的方法,建立了上面和下面的聯(lián)系。
除此之外,還在 NYU dataset 上面做了實驗,因為 NYU 有很多 2D 的圖像數(shù)據(jù),包括 depth 信息,然后我們通過 2D 的 CNN 去 refine SGPN 的結果,因為通過相機參數(shù),我們可以把深度圖像換成點云,也就是說每一個點和每一個圖像的坐標是有聯(lián)系的,于是我們通過幾個 CNN layer,然后聯(lián)系相同的位置的 feature,把 CNN 里的 feature concatenate 到 pointnet 的相同 point 的 feature 里面,然后再進行幾個 pointnet 的 layer,再生成 SGPN 的 3 個 sub module 去進行 point 的 instance segmentation,在 NYU 的 dataset 上面。
這是我們的結果(圖上),SGPN 比 seg-cluster 好很多,我們還進行了 3D detection 跟 literature 的比較,因為 literature 有 Ground Truth 的 bounding box,像床、桌子一些大型的物體,它們的 bounding box 是 loose 的,也就是說,掃描的時候只是掃描一部分點,像有些?clusion,像床、桌子這些點其實都很小,存在的我們能看到的點,在點云中其實很少的,所以計算 bounding box,不是很準確,就是一個 tide 的 bounding box,沒有辦法跟大的 bounding box 去比,所以我們在這里(圖右下)只比較了一些小的物體,比 literature 都好一些。
然后我們看一些更多的 visualize 的 result,這里有在 stanford 3D indoor semanticdataset 上面的,我們還在 scannet 上面做了很多實驗,大家感興趣的話,可以去閱讀我們的 paper,有更多的實驗和 application study。
這個工作主要是針對,使用深度學習的方法去做點云的實例分割的問題,據(jù)我們所知,應該是第一個用深度學習去做這件事情的。
下面來介紹我們組的另一個工作,第一作者是我的朋友黃乾桂,我們的這個工作是做點云的 semantic segmentation,剛才我已經(jīng)介紹了 semantic segmentation,就是給一個 input 的點云,給每一個桌子、椅子的 label。
在此之前,我們先簡單介紹一下相關的工作。剛剛我已經(jīng)介紹了 pointnet,我們也知道 pointnet 就是經(jīng)過幾層 mlp 生成了一個大的矩陣 feature,然而對于使用 max pooling 提取 global feature,把每個 global feature concatenate 到 feature 上去,然后進行 semantic segmentation。我們可以看到所有的點只有一個 global feature,點與點之間沒有什么聯(lián)系,這樣就喪失了很多 local 的信息,很近的點,像 CNN 是可以一層一層傳遞的,這個就沒有辦法做到這一點。
斯坦福他們組同樣的人,去年在 NIPS 上提出了 pointnet++,他們是用了 farthest point sample 和 query KNN 來提取 local 的信息,也就是說對每個點,去找它的 neighborhood,然后去 sample 一些點,這樣以此類推,這樣去進行 local 信息的獲取。但是我們也知道像 KNN 的話,它的復雜度是 O(KN) 的,而且它需要每個點進行 query,復雜度比較高,我們就提出了如下的方法去更好地去做 local dependence 的事情。
因為點云有 3D 的 structure,我們根據(jù)這種 structure 提出了 recurrent slice network,比如點云是有 x,y,z 三個方向的信息,我們對 x,y,z 三個方向進行 slice 的切割,然后把點云分成一片、一片的。然后對每一片用 pointnet 提取 feature,然后通過 RNN 去 update 相鄰片的信息。在 pointnet 提取完特征之后,我們通過 RNN 去 update,然后再通過... 這里我們介紹三個 module 來介紹 local dependence 的信息的建立,下面我一一介紹。
進來一個點云,沿 z 方向進行切割,然后分成好幾片(slice),然后把每一個 slice 單獨放進每一個 pointnet 里面去 proper?信息和 feature,同樣的方法去 max pool 整個 global feature,每一片有一個小的 global feature。x,y,z 三個方向都做同樣的操作(如上圖 slice 所示),通過 x 方向 slice,通過 y 方向 slice,同樣的方式做三遍。
提取完這樣的 feature 之后,我們使用 bidirectional RNN 去 update 這個 feature,因為相鄰的 slice 有 local dependence,所以這樣 update feature 的時候,可以考慮到 local 的信息,而且因為是 bidirectional 的,所以不同層的信息也可以相互傳遞,我們通過 bidirectional 傳遞來的、update 過的 feature 是呈現(xiàn)在這個地方(上圖右),在文章中,我們也對不同的 RNN 的 module 做了 application study,比如 GRU、STM 等等,大家感興趣可以閱讀我們的?part。
通過 RNN update 過信息之后,我們通過?,也就是像 pointnet 一樣的方法去把每一層對應的信息、每一 slice 對應的信息提取 propogate 到每一個點上。這樣子每一個點就既有了 local 的信息,也有了 global 的信息,然后我們再通過 pointnet 的幾個 layer 進行 output 做 segmentation。
同樣是在 stanford indoor 3D data 上面做的,不同的顏色就表示不同的類別。圖(中)是 predict 的結果,圖(右)是 ground truth,我們得到的結果還是非常不錯的。
這個是在 stanford indoor 3D 的結果,3D cnn 是在這個數(shù)據(jù)庫做這個工作的 state-of-the-art,seg-cluster 是用 3D volumatric 的方法去做的,我們的結果可以看出來比 pointnet 好很多,都比 3D CNN 也好很多。
我們在 scanNet 上面也進行了很多的實驗,可以看出來我們比 pointnet++和 pointnet 都要好一些。
剛才我們也說了,因為 pointnet 是有 KNN 或者是 ball query 的方法,會讓它們的速度下降很多,我們在這里進行速度和 memory 的比較,像我們的 rsnet 是比 pointnet++速度要快很多。這里(上圖)顯示的是,以 pointnet 為一個 unit,先與 pointnet 比較,再與其他方法進行速度上的比較。這兩篇工作的代碼都已經(jīng) release 了,大家可以參看我們的 github。
3D learning 也獲得了大家越來越多的關注,近期的一些比較有趣的 work 在 3D 的形式上,(上圖)第一個和第三個都是在 mesh 上操作的,第一個是把 mesh 當成一個球,然后通過學習的方法把 mesh 捏成它們想要的 single RGB 的樣子,第三個就是對不同的 catergory 學一個 mesh,它的 mesh 也是要 manifold,然后生成一個 mesh 以及它的一個 texture 的信息,然后把 texture map 到 mesh 上,使得它跟它的 image 更相近。第二個工作是通過 sample 在 surface 上的點來生成 mesh,這個也是進行根據(jù) 2D image 來進行 3D reconstruction 的,大家感興趣可以都去再看一下。
這是我們實驗室的信息,如果大家感興趣的話,可以跟我的導師聯(lián)系,我們主要做 3D vison 和 computer graphics 方面上的研究。
Q&A
Q:為什么 curtain 很差?
A:curtain 主要是數(shù)據(jù)比較少而且很多都連著墻或窗,所以不太容易被識別。
Q:切割的精度怎么確定?
A:切割精度不同會對結果造成不同影響,我們在實驗部分的 ablation study 里面對不同精度進行了實驗。
Q:第二個 work x、y、z 都是 align 好的嗎?
A:嗯對 坐標是先 align 好的。
以上就是本期嘉賓的全部分享內(nèi)容。更多公開課視頻請到雷鋒網(wǎng) AI 慕課學院觀看。關注微信公眾號:AI 科技評論,可獲取最新公開課直播時間預告。
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。