余方潔,王 斌
(1.中國科學院長春光學精密機械與物理研究所, 長春 130033; 2.中國科學院大學, 北京 100049)
點云是一種重要的三維數據結構,它是具有相同空間參考的一組物體表面特征點集合。點云數據語義分割作為三維場景理解的關鍵性技術,在無人駕駛、數字城市、高精地圖、VR、AR等領域得到了廣泛的應用。傳統的點云分割流程包括前期數據采集與桌面端后期處理2個階段,其中常用的采集設備有激光雷達、TOF相機等,它們通常價格昂貴且有安裝結構要求,此外這種前后端分離的工作模式在實時性方面也表現較差。本文通過對深度圖獲取原理及點云分割方法的研究,提出了一種僅憑借智能手機等輕量級移動端設備就可以實現三維數據采集和準實時語義分割的技術方案,旨在進行前后端的無縫集成。
語義分割是計算機視覺的基本研究任務之一,是將輸入數據映射到現實世界中事物的可解釋類別的技術。近年來,隨著大數據的出現與計算機硬件性能的大幅提升,基于深度學習的點云分割方法已經成為當前的主流。根據對三維點云數據處理方式的不同,又可分為間接語義分割法和直接語義分割法。間接語義分割法主要借鑒了以往二維圖像分割的經驗,通過將點云數據轉換為多視圖或體素網格,很大程度上利用二維的網絡模型間接達到分割的目的。在多視圖的方法中,Su等[1]提出了MVCNN(multi-view convolutional neural network),將三維目標投影為多個不同視角下的二維圖像,對每個視圖進行特征提取并經過特征聚合得到最終的分割結果;Feng等[2]在MVCNN的基礎上提出了GVCNN(group-view convolutional neural network),對不同視圖提取的特征進行分組,提高了網絡性能;Zeng等[3]基于FCN(fully convolutional networks)[4]并結合HHA投影技術實現了對RGB-D數據的語義分割;Wu等[5]借鑒SqueezeNet[6]的設計思路提出了SqueezeSeg網絡,使用球面投影的方法將三維點云轉換為二維圖像輸入到SqueezeSeg中進行分割。不同于多視圖方法對數據進行降維的操作,體素化方法致力于構建三維語義分割網絡,Maturana等[7]將卷積運算推廣到三維空間,最早提出了基于體素數據的VoxNet模型;針對體素網格分辨率低的限制,Tchapmi等[8]提出了SegCloud網絡;為了更加合理地利用點云數據的特點并減少計算量,Riegler等[9]基于八叉樹結構提出了OctNet,Klokov等[10]基于Kd-tree結構提出了Kd-Net。在點云直接語義分割方法中,Qi等[11]在CVPR2017上開創性的提出了PointNet網絡,它不需要對輸入數據做任何變換,可以直接通過端到端訓練的方式實現點云分割,為三維場景理解指明了新的發展方向;由于對空間鄰域信息感知較少,Qi等[12]又提出了PointNet的改進版本PointNet++,通過對數據進行采樣、分組的方式提取局部特征,并使用MSG(multi-scale grouping)、MRG(multi-resolution grouping)等策略自適應處理密度不均勻的點云數據。
深度圖可以等效為三維密集點云,針對移動端深度圖像獲取的任務,谷歌的Valentin等[13]提出了depth-from-motion算法,它可以從運動中恢復深度信息;商湯科技的Yang等[14]基于多視圖關鍵幀的深度估計方法,提出了一個手機端實時單目三維重建系統Mobile3Drecon。移動端設備由于資源和算力等受限, 因此在對深度學習模型進行部署時,通常需要經過網絡壓縮處理,減少其參數量與運算量。在此方面,研究者們也提出了許多模型壓縮方法,如緊湊網絡、參數剪枝、低秩分解、知識蒸餾等。
同時,許多輕量化網絡也被證明具有相當好的效果,已經在移動端設備上進行了成功的應用,如SqueezeNet[6]、MobileNet[15]、ShuffleNet[16]、Xception[17]等。
本文利用移動端設備輕量、便捷的優勢,對安卓平臺的點云分割方法進行研究,主要貢獻如下:
1) 提出了一種僅使用移動端設備進行三維數據采集與處理的一體化解決方案,包括了深度圖像獲取、點云轉換、模型壓縮、移動端部署與加速整個處理流程,改變了以往前后端分離的應用模式。
2) 對點云語義分割網絡PointNet進行輕量化設計,使參數量減少為原來的1/5,同時在測試集上的平均分割精度達到了73%,在啟用GPU加速后,對單幅場景點云數據的推斷速度約為0.7 s。
系統整體架構如圖1所示。

圖1 系統整體架構
1) 無序性
點云是點數據的集合,這意味著其中的數據是沒有順序的,因此對于按照不同排列輸入的同一集合的數據,點云處理模型應該對于這種變化具有不變性。
2) 稀疏性
點云的本質是對空間中物體形狀的低分辨率重采樣,而且由于采集過程中存在的目標遮擋等情況,其獲得的幾何信息是片面、不完整的。
3) 密度不均勻性
不同方式獲取的點云數據,其點間距、密集程度等往往相差很大,即使同一批次采集的點云數據,也經常存在密集和稀疏的區域。
隨著深度學習技術的不斷成熟,其在點云語義分割領域也得到了越來越多的應用,取得了比傳統方法更優的效果。根據點云數據處理方式的不同,基于深度學習的點云語義分割方法可分為間接語義分割法和直接語義分割法[18]。
1.2.1間接語義分割法
間接語義分割法需要將點云數據轉換為其他的表示方式,通過這種數據結構的轉變間接實現點云數據語義分割,根據轉換類型的不同,分為二維多視圖法和三維體素化法兩類。
二維多視圖法的基本思路是對點云數據進行投影,得到多個視圖的二維圖像,再對這些二維圖像使用經典的語義分割模型如FCN[4]、U-Net[19]、Segnet[20]、DeepLab[21]等進行處理。多視圖法很好地克服了點云數據的非結構化特性,通過卷積神經網絡提取各個視圖的特征,并將多個特征的信息整合為更高級的語義特征,得到最終的分割結果。但是多視圖的方法在簡化點云數據處理的同時,也丟失了原始數據中包含的大量關鍵空間信息,影響了點云分割的精度。
體素(Voxel)是二維空間中像素概念的推廣,體素化的本質是將無序、非結構的點云數據規則化,這解決了點云數據的特征學習問題,但點云的稀疏性導致了體素網格數據冗余多、占用空間大、分割效率低。此外體素化方法相比二維圖像增加了一個維度,計算過程中的資源開銷更大,這也一定程度上限制了體素網格的分辨率。總的來說,體素化方法在現階段實用性相對較低。
1.2.2直接語義分割法
為了充分利用點云數據本身的特性并降低計算復雜度,人們開始研究直接對原始點云數據進行處理的網絡模型,其中具有開創性和代表性的是Qi等[12]提出的PointNet網絡。
PointNet網絡設計時充分考慮了點云的無序性、旋轉和平移不變性、空間相關性,并經過嚴格的推理證明提出了2個定理:一是證明了PointNet網絡能夠擬合任意的連續集合函數,二是其網絡結構對于有噪聲和數據缺失的點云同樣具有魯棒性。對于點云無序性,PointNet使用對稱函數來提取點云數據的特征;為了保證旋轉和平移不變性,PointNet網絡通過訓練一個小型網絡T-Net得到轉換矩陣,并用來對輸入的點云數據進行空間變換;為了有效利用點云之間的空間關系,PointNet網絡使用跳躍連接(skip connection)的方式將淺層特征與高層特征相結合。
雖然PointNet網絡在點云分割方法中取得了突破性的進展,但由于對各個點的操作過于獨立,以及未考慮點云的密度不一致性,因此仍有很大的改進和提升空間。后來研究者們在PointNet網絡的基礎上又提出了一系列的優化算法,這些方法主要有基于鄰域學習的方法、基于圖卷積神經網絡的方法、基于注意力機制的方法、基于循環神經網絡的方法等。
深度圖(Depth map)是一種特殊的二維灰度圖像,它的每個像素值反映的是場景中各個物點距離傳感器的實際距離,是物體可見表面幾何形狀的寫真。深度圖像通常是與彩色RGB圖像經過配準的,被合稱為RGB-D圖像,它們的像素點之間具有一一對應的關系。
深度圖的獲取有多種方法,根據傳感器工作原理的不同,分為主動式和被動式兩類。主動式方法主要有激光雷達成像法、結構光法、TOF相機、莫爾條紋法、坐標測量機法等,它們的共同特點是在獲取深度信息時需要激光等光源主動向物體發射信號并解析回波,這類方法也是目前在實用中被研究最深入、使用最廣泛的一類;此外還有被動式的單目、雙目、多目立體視覺的方法,這些都是基于多視圖幾何原理的通過對圖像的理解來恢復三維結構,其相對主動式的方法而言成本更低也更加便捷,因此近年來也受到了越來越多的關注。
本文通過對深度圖獲取方法的研究,探索了在移動端設備上創建深度圖的解決方案,結果表明depth-from-motion算法具有可行性,其實質是屬于單目深度估計算法的一種,可以從運動中恢復深度信息。
depth-from-motion算法由谷歌的Valentin等[13]研究者于2018年提出,是一種專門針對智能手機設備獲取深度圖任務設計的算法,使得在大多數智能手機上僅通過標準的彩色攝像頭就可以在單核CPU上創建30 Hz頻率的密集、低延遲的深度圖。
如圖2所示,展示了depth-from-motion算法的基本處理流程。算法的第一步是從過去的圖像幀中選擇適合與當前幀進行立體匹配的關鍵幀,接著使用關鍵幀和當前幀之間的相對6 DoF(自由度)位姿進行極性圖像校正,再根據視差就可以得到估計的稀疏深度圖。將稀疏深度圖送到快速雙邊求解器(fast bilateral solver)中進行求解,生成與之相應的雙邊深度網格(bilateralgrid of depth),雙邊深度網格可以根據需要轉換為經過時空平滑的密集深度圖。為了保證生成的深度圖與RGB圖像對齊,在生成雙邊深度網格后,還需要使用最新的圖像幀對其進行切片,再經過后期渲染就能得到密集的平滑深度圖。

圖2 depth-from-motion算法流程
谷歌現已開源了集成有depth-from-motion算法的增強現實開發平臺ARCore,并支持iPhone、iPad、華為、三星、小米等制造商的多個型號的設備。本文使用Android Studio 4.0開發環境,并借助ARCore SDK進行了華為nova3智能手機設備上的深度圖獲取實驗,圖3中展示了谷歌給出的官方效果圖(a)與自己創建的深度圖(b)對比:

圖3 深度圖獲取實驗
深度圖像中包含有被攝場景的三維空間信息,通過對相機成像模型的研究,可以從深度圖中解算出每個像素點所對應的三維坐標,生成點云數據。深度圖到點云的轉換利用的是多視圖幾何的原理,其實質是圖像坐標系到相機坐標系的變換,如圖4所示。

圖4 相機模型
轉換過程中需要已知相機的內標定參數cx、cy、f,其中cx、cy表示的是相機成像時光心在像素平面坐標系下的坐標,f是相機焦距。另外記焦距f與單個像素在x、y方向實際距離dx、dy的比值為fx、fy,由此可以得到相機的內參數矩陣:
(1)
記像素平面坐標系中像素點的坐標為u、v,相機坐標系中空間點的坐標為X、Y、Z,如圖4所示,根據相似三角形原理可知:
(2)
式(2)實際上已經給出了像素平面坐標與相機空間坐標的轉換公式,為了表示方便,將其寫為矩陣的形式:
(3)
式(3)給出的變換就是我們需要的轉換公式,它表示了從深度圖像上讀取像素坐標u、v以及深度值Z,利用相機內參數矩陣,就可以解算出對應的三維空間坐標X、Y、Z。
深度學習在計算機視覺、自然語言處理等領域取得顯著效果的同時,模型的結構也變得越來越復雜。對于移動設備來說,其內存空間有限、運算能力有限、續航時間短、散熱條件不利,這都將導致深度學習模型在移動端設備上進行實際部署時,將會遇到很大的限制。因此使用一定的方法對模型進行精簡,使之更加輕量且具有相當的準確率是非常必要的,對于深度學習模型的移動端部署具有重要的意義。
目前主要的模型壓縮方法有緊湊網絡、參數剪枝、參數量化、知識蒸餾等,根據壓縮策略的不同又可分為壓縮結構與壓縮參數兩類[22]。兩類模型壓縮方法的技術描述如表1所示。

表1 深度學習模型壓縮算法
在對深度學習模型進行壓縮的實踐過程中,出現了幾種具有代表性的輕量級網絡,它們在減少網絡參數量的同時保持了網絡的性能,使移動終端、嵌入式設備運行神經網絡模型成為可能,對其后的輕量級網絡設計具有重要的啟發與借鑒意義,表2對幾種經典的輕量級網絡進行了對比總結。

表2 幾種輕量級網絡對比
目前隨著深度卷積神經網絡在三維點云分割中的廣泛應用,許多研究機構推出了一系列公開且可靠的三維數據集,如S3DIS、Semantic3D、SUNRGB-D、KITTI、Apollo等。在綜合考慮使用場景與數據集規模后,本文選擇SUN RGB-D數據集進行模型訓練與測試。
SUN RGB-D是普林斯頓大學Vision & Robotics 實驗室開發的用于室內場景理解的數據集,該數據集共包含10 335張經過密集標注的RGB-D圖像,分別由Intel RealSense、Asus Xtion、Kinect v1、Kinect v2 4種不同的3D傳感器采集圖像和深度信息,共有146 617個2D多邊形和58 657個3D邊界框,包含了場景分類、語義分割、物體檢測、物體朝向預測、房間布局預測等標注[23]。
針對本文的語義分割任務,使用SUN RGB-D數據集的子集NYUdata作為實驗數據。NYUdata是由Kinect v1的RGB攝像機和深度攝像機同步拍攝的室內場景的視頻連續幀中提取出來的,包含了1 449組具有像素級標注的彩色和深度圖像對,每張圖像的寬度為561像素、高度為427像素。
由式(3)可知,在確定了相機的內參數后,即可將二維像素坐標轉換為三維空間坐標。查找資料可知,Kinect相機的固有內參數如下:
fx= 525.0,fy= 525.0
cx= 319.5,cy= 239.5
另外,Kinect在保存像素值時進行了比例縮放,比例因子factor為5 000,因此實際的Z坐標等于讀取的深度值除以5 000。由于深度圖像與彩色圖像的對應關系,可以結合XYZ空間坐標與RGB顏色信息,得到每一組圖像對所對應的RGB點云數據,其在三維處理軟件MeshLab中的可視化效果如圖5(c)所示:
原始數據中的標簽類別為894類,為便于模型訓練與結果可視化,可以利用元數據中.mat格式的類別映射文件將標簽類別轉換為40類或13類,這里選擇將894類映射到13類。RGB圖像(a)與映射后的標簽圖像(b)如圖6所示:

圖5 點云轉換結果

圖6 標簽類別映射
4.2.1改進策略
為了使PointNet點云分割網絡能夠以較快速度、較高精度運行在移動端設備上,本文結合緊湊網絡和參數剪枝2種模型壓縮方法對PointNet進行改進。
緊湊網絡當前比較成熟的做法是卷積核級別的重新設計,通常是用多個小的卷積核替代大的卷積核。本文借鑒MobileNet[15]等輕量級網絡的設計思路,將PointNet中的全連接層替換為深度可分離卷積(depth-wise separable convolution),在有效減少模型參數量的同時保持了推理的精度。深度可分離卷積的實質是分組卷積(Group Convolution)和1×1卷積的結合,最大程度上實現了通道間的解耦。此外還使用減少網絡寬度、深度的方式對PointNet進行了結構化的通道剪枝和層間剪枝。改進后的PointNet網絡結構及參數設置如圖7所示。

圖7 改進的PointNet網絡
4.2.2網絡結構分析
改進后的PointNet網絡共有12層,整體可分為3個部分。第一部分是前5層Conv1~ Conv5,主要作用是逐級提取淺層特征,層名稱后面的參數如1×1、1×9等表示的是卷積核尺寸,最后一個參數表示輸出通道數,卷積層中的其他細節還包括高和寬2個方向上的滑動步長為[1,1],填充方式使用的是“valid”類型,激活函數為修正線性單元ReLU,這些參數設置對于其他部分的卷積操作也是一致的;第二部分是中間3層,主要作用是篩選全局特征和增加網絡表達能力,該部分對于Conv5的輸出先作一個最大池化,池化時的卷積核尺寸為n×1,相當于每個輸出通道保留一個特征,共得到256個全局特征,接著經過2個替代了全連接層的可分離卷積操作對全局特征進行非線性變換,輸出128個特征值;第三部分是最后4層,作用是對前兩部分提取的淺層和全局特征進行跳躍連接并輸出最終分割結果,得到每一個點屬于13個類別中各個類別的概率。
4.3.1評價指標
語義分割算法的性能評價標準主要分為以下幾個方面:精確度、空間復雜度和執行時間。其中精確度的評價指標主要有總體精度(overall accuracy,OA)、平均精度(average accuracy,AA)、平均交并比(mean Intersection-over-Union,mIoU)、Kappa系數等。本文中使用OA和AA作為評價指標,其定義分別如下:
(4)
假設共有k+1個語義類別(包括一個背景類),pij表示本屬于i類實際預測結果為j類的點云數量,則pii表示預測正確的點云數量。OA指標反映了每一個隨機樣本的語義分割結果與真實標注類型的總體概率一致性。
(5)
AA指標中pii、pij的定義與OA中相同,它是總體精度的一種簡單提升,反映了每個類別預測準確率的平均值,即平均類別精度。
4.3.2訓練過程
在Windows 10平臺,編程環境選擇PyCharm,顯卡設備是NVIDIA-1080Ti,使用深度學習框架TensorFlow進行模型訓練。網絡超參數設置為批量數batch_size=24,初始學習率learning_rate=0.001,使用指數衰減法進行學習率調整,decay_step= 300 000、decay_rate=0.7,迭代次數max_epoch= 200。損失函數為softmax交叉熵,優化器選擇Adam算法,訓練集、驗證集、測試集的比例分別為60%、20%、20%。訓練集(train)、驗證集(val)上的總體精度分別為0.77、0.74,驗證集上的平均精度為0.69,訓練過程如圖8所示。

圖8 模型訓練過程
TensorFlow Lite是專為Android和iOS等移動平臺設計的深度學習解決方案,提供了轉換 TensorFlow 模型并在移動端、嵌入式和物聯網(IoT)設備上運行 TensorFlow 模型所需的所有工具。整個模型轉換過程分為2個階段,首先是對保存的checkpoint模型文件進行持久化操作,將其中的變量值固定,凍結為pb格式;再使用TensorFlow Lite 轉換器將pb文件轉換生成最終的tflite文件。模型轉換流程如圖9所示。

圖9 模型轉換流程
模型部署的最后一步是使用tflite文件在安卓設備上進行推理。本文基于Android Studio 4.0搭建運行環境,使用Kotlin作為開發語言,在工程的build.gradle配置文件中添加tensorflow-lite相關依賴后就可以調用TFLite解釋器運行輸入數據并獲得預測結果。
實測時使用的是華為nova 3 智能手機, CPU為海思麒麟 970,GPU為Mali G72 MP12,運行內存6 GB,存儲空間128 GB,運行過程中發熱情況一般,未啟用GPU加速時推斷一幅圖像約需1.8 s。將配置文件中的相關依賴替換為GPU版本后即可實現運行加速,啟用GPU代理后的推理速度約為0.7 s。
如圖10所示,展示了4個不同場景下的點云分割結果,每行代表一個場景。使用本文改進的PointNet網絡對深度圖轉換的點云進行分割,取得了不錯的效果,總體精度為73.3%,對于場景中的主要類別,均能得到較好的分割結果。PointNet網絡與本文改進后的模型在參數量、精確度、推理速度方面的定量性能對比如表3中所示。

圖10 點云分割結果

表3 實驗結果對比
從模型壓縮的角度看,參數量減少了約80%,總體精度僅降低了2.7%,網絡輕量化的同時也保持了較高的分割精度,模型訓練和推斷的速度進一步加快,證明了本文提出的改進算法的有效性;另外,從移動端部署的情況來看,將checkpoint模型文件大小從13.4 MB減少到了2.9 MB,經過參數量化并轉為移動端的tflite文件后僅有268 kB;在啟用GPU加速后,模型在華為智能手機上能夠以準實時級速度進行推斷,可以滿足一般的即時查看需求。
通過對深度圖獲取原理及點云分割方法的研究,提出了一種僅憑借移動端設備實現三維數據采集和準實時語義分割的技術方案。利用谷歌AR Core SDK,可以在Android、iOS等設備上很方便地獲取16位深度圖像,在相機內參已知的情況下可以轉換生成密集點云數據。考慮到移動端設備的性能受限情況,對PointNet網絡進行改進,將模型參數量壓縮為原來的1/5,再利用TensorFlow Lite將checkpoint模型轉換為可以運行在安卓手機上的tflite模型。實驗結果表明,在啟用GPU加速的情況下,部署的模型能以較高的精度和速度進行點云分割,證明了本文方法的可行性。