張志剛,游安清
(中國工程物理研究院應(yīng)用電子學研究所,四川 綿陽 621900)
智慧交通[1]和自動駕駛成為了近年來的研究熱點,有著良好的應(yīng)用前景。其面臨的一個挑戰(zhàn)是獲得道路上車輛的三維屬性,即得到車輛的三維姿態(tài)和形狀。目前領(lǐng)先的3D對象理解技術(shù)很少依賴常規(guī)的相機,而是采用高精度的激光雷達傳感器[2],但因自身較高的成本,阻礙了其進一步的推廣。因此通過普通攝像頭進行車輛的3D理解仍是一種常規(guī)且可行的方法,吸引了計算機視覺領(lǐng)域的大量研究[3-4]。
通過普通相機獲得物體的3D姿態(tài),一般采用PnP[5](Perspective-n-Point)算法求解,即在已知多個3D點和2D像素點對的映射關(guān)系時求解物體和相機之間的姿態(tài)。因此通過普通攝像頭獲取車輛的3D姿態(tài)需要檢測圖像中車輛上的關(guān)鍵點坐標。同時獲取到的車輛關(guān)鍵點還可用于自動標定道路監(jiān)控相機[6]、計算車輛姿態(tài)、對車輛表面分塊獲得語義分割信息等。
常見的關(guān)鍵點檢測任務(wù)有人體姿態(tài)估計、人臉Landmark、手勢識別等,這些關(guān)鍵點通常是人為設(shè)計的一些具有語義信息的特征點。若使用傳統(tǒng)的視覺算法識別這類高語義信息的點將面臨巨大挑戰(zhàn),而近年來隨著深度學習、CNN[7]算法的進步,能夠很好地識別這些關(guān)鍵點。關(guān)鍵點檢測使用VGG[8]、GoogLeNet[9]、ResNet[10]等常見的分類網(wǎng)絡(luò)作為特征提取器,并在網(wǎng)絡(luò)的頭部去回歸關(guān)鍵點的數(shù)值坐標。人臉可視為剛體,圖像比較簡單,因此人臉關(guān)鍵點檢測通常采用全連接層直接回歸坐標點[11-12]。人體為非剛體,姿態(tài)變化多樣,通常利用預(yù)測高斯熱圖方式檢測人體關(guān)鍵點,認為預(yù)測高斯熱圖上響應(yīng)值越大的地方,存在關(guān)鍵點的概率也越大,因此找出高斯熱圖上峰值對應(yīng)的索引即為關(guān)鍵點坐標。Hourglasses[13]、OpenPose[14]、CPN[15]、MSPN[16],這些工作通過研究堆疊單個或多個U形結(jié)構(gòu)[17]多級監(jiān)督來預(yù)測高斯熱圖。而文獻[18-19]這些工作熱衷于研究高斯熱圖和關(guān)鍵點坐標之間更為精確的編解碼方式。
然而針對車輛關(guān)鍵點檢測已公開的研究工作很少,因此借鑒人體姿態(tài)估計的神經(jīng)網(wǎng)絡(luò)算法,本文設(shè)計一種基于CPN[15]網(wǎng)絡(luò)的車輛關(guān)鍵點檢測模型,記為VKPNet(Vehicle Key Points Network)。VKPNet采用自上而下的方式,首先在完整的圖像中使用車輛檢測模型(如Faster R-CNN[20])得到車輛的包圍框,然后將檢測到的車輛小圖輸入車輛關(guān)鍵點檢測模型并輸出關(guān)鍵點的坐標。
不同于人體姿態(tài)估計和人臉關(guān)鍵點檢測,在車輛關(guān)鍵點檢測任務(wù)中車輛為一個明顯的立體物,不能近似為一個平面看待,其單張照片中車輛背部的關(guān)鍵點不可見。因此需要模型在預(yù)測點坐標的同時預(yù)測出每個點的可見性。VKPNet基于CPN[15]網(wǎng)絡(luò)實現(xiàn)一個預(yù)測車輛關(guān)鍵點坐標和點可見性2個任務(wù)的網(wǎng)絡(luò),網(wǎng)絡(luò)結(jié)構(gòu)見圖1。CPN[15]網(wǎng)絡(luò)通過回歸熱力圖的方式預(yù)測關(guān)鍵點坐標,由GlobalNet和RefineNet這2個部分組成,VKPNet考慮模型速度因素,未利用CPN中的RefineNet部分。VKPNet有2個分支,分別預(yù)測車輛關(guān)鍵點的坐標和可見性,分別對應(yīng)圖1中右側(cè)上下2個部分的輸出。網(wǎng)絡(luò)以ResNet[10]為主干網(wǎng)絡(luò),經(jīng)過4個階段,將輸入的車輛圖片下采樣32倍,分別記每個階段最后一層卷積對應(yīng)的特征圖為C2、C3、C4、C5。網(wǎng)絡(luò)的深層特征(C4、C5)擁有很強的全局語義信息,缺乏空間紋理信息,而淺層特征(C1、C2)具有強空間分辨率信息,缺少全局的語義信息。車輛關(guān)鍵點主要定義為具有很強局部紋理信息的點,如多選擇車輛上的角點定義(車燈的4個角點、擋風玻璃4個角點等),關(guān)鍵點的定位除了需要空間紋理信息,為區(qū)分每個點的屬性(左右車燈、車牌等),還需要具備很強的全局語義信息。因此預(yù)測關(guān)鍵點坐標的分支需融合深層的全局語義信息和淺層的紋理信息。車輛上每個點的可見性取決于車輛和拍攝相機之間的姿態(tài)關(guān)系,與車輛的整體朝向有關(guān),這是一個對車輛圖片全局理解的信息,因此車輛關(guān)鍵點可見性分支依賴全局的語義信息的獲取,設(shè)計從ResNet[10]最底層的特征圖(C5)通過全局平均池化(Global Average Pooling, GAP)獲得一維特征向量,在后面緊跟一個全連接層對每個關(guān)鍵點做二分類預(yù)測,預(yù)測點的可見性。
圖1 車輛關(guān)鍵點檢測模型結(jié)構(gòu)
VKPNet使用FPN[21](特征金字塔)的形式構(gòu)建一個U型結(jié)構(gòu)融合深層語義信息和淺層空間分辨率信息。將深層低分辨率特征圖上采樣2倍保持和上一層特征圖相同大小,再同上一層的特征圖逐像素相加生成新的特征圖,緊接一層1×1卷積和一層3×3卷積生成該層對應(yīng)的熱力圖。從C5往C2依次上采樣最終生成熱力圖金字塔(見圖1)。熱力圖的監(jiān)督信號為以關(guān)鍵點坐標為中心的高斯概率分布圖,且從低分辨率到高分辨率的熱力圖由粗及細,高斯概率的方差由大變小,因為越靠近金子塔頂層的熱力圖具備越多的空間分辨率信息,有能力學到更精確的關(guān)鍵點坐標。金字塔最頂層的熱力圖學到了最精確的關(guān)鍵點坐標信息,從這一層得到關(guān)鍵點坐標。CPN中通過后處理尋找熱力圖響應(yīng)最大值的坐標作為關(guān)鍵點坐標,VKPNet借鑒DSNT[22]的做法使用SoftArgmax端到端地對最頂層熱力圖(C2對應(yīng)的熱力圖)的坐標按照概率密度積分求期望,求得期望即為對應(yīng)的關(guān)鍵點坐標,再乘上對應(yīng)尺度系數(shù)和偏移量輸出輸入圖下的關(guān)鍵點坐標,對坐標進行L2 Loss的監(jiān)督。端到端的形式避免了后處理,同時簡化流程,使得網(wǎng)絡(luò)學習目標更加直接,學到更精確的點坐標,在DSNT中實驗已證明SoftArgmax的優(yōu)點??紤]熱力圖學習的是一種概率分布,對剩余的C3、C4、C5對應(yīng)的熱力圖不使用L2損失監(jiān)督而是用JS散度損失監(jiān)督。見式(1),其中P、Q為2個概率分布,xi為第i個變量,KL(P‖Q)為概率分布P、Q之間的KL散度,JS(P1‖P2)為概率分布P1、P2之間的JS散度。
(1)
如圖1所示網(wǎng)絡(luò)的學習目標有3個部分,即關(guān)鍵點可見性預(yù)測Fvisible(N×1的特征向量)、關(guān)鍵點坐標預(yù)測Fcoord(N×2的特征向量)、關(guān)鍵點坐標的熱力圖Fheatmap(C3、C4、C5對應(yīng)的熱力圖,大小為N×m×m),其中N為車輛上關(guān)鍵點的個數(shù),m表示熱力圖分辨率大小。Labelvisible、Labelcoord、Labelheatmap分別為對應(yīng)的監(jiān)督信號。Fheatmap的學習目的是加入多層監(jiān)督,由粗及細使最終C2對應(yīng)的熱力圖學習到一個更精確的高斯分布。車輛關(guān)鍵點可見性的損失記為Lvisible(見式(2)),可見性為二分類預(yù)測,為處理數(shù)據(jù)均衡問題選擇Focal Loss[21]進行監(jiān)督。關(guān)鍵點的坐標用L2損失函數(shù)監(jiān)督,記為Lcoord(見式(3))。熱力圖的損失用JS散度(見式(1))損失函數(shù)監(jiān)督,記為Lheatmap(見式(4))。對點坐標和熱力圖用ohem[15]進行難例挖掘。總的損失函數(shù)見式(5),其中α、β、γ為3個部分損失的權(quán)重。
Lvisible=focal_loss(Fvisible,Labelvisible)
(2)
Lcoord=ohem(L2(Fcoord,Labelcoord))
(3)
Lheatmap=ohem(JS(Fheatmap,Labelheatmap))
(4)
Loss=αLvisible+βLcoord+γLheatmap
(5)
按照Apollo3D[23]的方式選擇轎車和SUV車型,共定義了78個車輛關(guān)鍵點(可參考圖5)。訓(xùn)練關(guān)鍵點模型的數(shù)據(jù)共20萬張,包括Apollo3D開源的5萬張圖像和使用眾智平臺標注的15萬張數(shù)據(jù),標注的數(shù)據(jù)取自北京、武漢、重慶市的城市道路。
分析車輛圖片的長寬信息(見圖2)可知車輛圖片多為正方形形狀,以及權(quán)衡模型的推理速度與精度設(shè)置關(guān)鍵點檢測模型的輸入為256×256大小的RGB圖片。車輛原始圖片大小不一,在保持圖片原始長寬比的前提下,進行縮放使得長邊變?yōu)?56,短邊方向?qū)ΨQ填充零也變?yōu)?56大小。
圖2 車輛圖片的形狀統(tǒng)計
車輛關(guān)鍵點檢測模型由深度學習框架PyTorch構(gòu)建,在6塊顯存為16 GB的2080Ti的GPU上經(jīng)20萬張的訓(xùn)練數(shù)據(jù)集訓(xùn)練600個周期得到。采用批訓(xùn)練大小為24進行訓(xùn)練,選用了Adam優(yōu)化方法,初始學習率為0.002(記為LRinit),初始階段利用WarmUp[24]的策略學習率逐步線性上升到0.002,后續(xù)對學習率按余弦函數(shù)的形式下降(見式(6),其中LRinit為初始學習率,epoch為周期數(shù),總的訓(xùn)練周期數(shù)epochtotal=600,初始階段WarmUp的周期數(shù)epochwarmup=1),使大學習率維持較長時間,讓網(wǎng)絡(luò)收斂到一個較好結(jié)果。1.2節(jié)中3個部分損失的權(quán)重設(shè)置為α=32,β=1.5,γ=1。訓(xùn)練過程中的損失和學習率變化見圖3。1.1節(jié)中對C5、C4、C3對應(yīng)的熱力圖由粗及細的監(jiān)督的高斯分布方差分別設(shè)置為7、9、11。訓(xùn)練過程中對圖像進行隨機縮放、裁剪、平移、透視變換,并加上隨機的高斯噪聲、運動模糊、灰度變換等數(shù)據(jù)增強手段,提高模型的泛化能力。
圖3 訓(xùn)練過程中的損失和學習率變化
(6)
為了評價車輛關(guān)鍵點檢測模型的精度,構(gòu)建了一個包含1萬張圖片的測試集。測試集的構(gòu)建考慮和訓(xùn)練集同分布,包含了車輛關(guān)鍵點檢測場景下的各種車型數(shù)據(jù),各車型數(shù)據(jù)分布均衡,同時考慮涵蓋豐富的道路場景和由于相機與車輛的遠近與天氣變化造成的車輛圖片大小外觀的變化。
車輛關(guān)鍵點檢測模型包含預(yù)測關(guān)鍵點的坐標和可見性2個任務(wù)??梢娦灶A(yù)測是一個二分類問題,對該分類任務(wù)用在召回率(Recall)為0.95時的精確度(Precision)進行評價,記為P@R_0.95,由于車輛圖片大小不一,對關(guān)鍵點坐標采用歸一化的像素誤差評價,記為NME(Normalized Mean Error),歸一化像素誤差指將圖片按前面所述方法縮放到256×256大小下計算預(yù)測坐標的平均像素誤差。車輛原圖下的預(yù)測坐標像素誤差記為ME(Mean Error)。模型最終達到精度為關(guān)鍵點坐標NME=1.57,可見性P@R_0.95=0.9660。模型最終達到了1%以內(nèi)的像素誤差,精度較高。訓(xùn)練過程中不同周期的模型精度變化見圖4。車輛關(guān)鍵點檢測的效果可視化見圖5,可以看到在訓(xùn)練到400個周期后網(wǎng)絡(luò)逐漸收斂,模型檢測車輛關(guān)鍵點坐標較為精確。
圖4 不同訓(xùn)練周期模型的精度變化
圖5 車輛關(guān)鍵點坐標預(yù)測可視化
除了最終的模型結(jié)果(實驗1),本文還對比了其他可能的模型設(shè)計方式,對比結(jié)果見表1。2.1節(jié)中討論了車輛關(guān)鍵點檢測任務(wù)還需輸出每個點的可見性,實驗只學習關(guān)鍵點坐標(實驗2),發(fā)現(xiàn)無可見性分支后關(guān)鍵點坐標精度明顯下降(1.57 vs 1.62),證實可見性分支幫助網(wǎng)絡(luò)學到更多的全局信息,多任務(wù)學習對關(guān)鍵點坐標檢測有幫助。對Fheatmap最終的模型采用JS散度以概率的形式進行監(jiān)督學習,實驗3采用L2 Loss去監(jiān)督Fheatmap,發(fā)現(xiàn)采用的JS散度相比L2 Loss漲點明顯(1.67 vs 1.57),驗證了以概率形式對高斯熱力圖監(jiān)督能夠?qū)W到一個更精確的結(jié)果。實驗4對比實驗1選擇采用后處理Argmax的方式從學習到的熱力圖中解碼關(guān)鍵點坐標,這是文獻[13-16]這些常見的關(guān)鍵點檢測任務(wù)中的解碼方法,相比之下采用的SoftArgmax(實驗1)的做法明顯漲點(1.78 vs 1.57),分析其原因認為SoftArgmax端到端地學習關(guān)鍵點坐標,無需后處理,學習目標很明確,同時讓網(wǎng)絡(luò)學習到從下采樣4倍的熱力圖到輸入圖坐標之間的量化誤差,避免使用手動調(diào)參補償量化誤差的方式。
表1 不同設(shè)計下的模型試驗結(jié)果
除了基于CPN網(wǎng)絡(luò)設(shè)計車輛關(guān)鍵點檢測模型,本文橫向?qū)Ρ攘嘶谄渌餍械纳疃葘W習網(wǎng)絡(luò)的模型結(jié)構(gòu)設(shè)計,結(jié)果見表1中的實驗5~實驗7。實驗5用MSPN[16]作為車輛關(guān)鍵點坐標檢測的分支,區(qū)別于CPN網(wǎng)絡(luò)MSPN堆疊4個U型結(jié)構(gòu),加入多級監(jiān)督學習使語義信息和空間分辨率信息得到更充分的融合。實驗5對比實驗1僅在NME上有較小提升,但MSPN堆疊了4個U型結(jié)構(gòu),網(wǎng)絡(luò)復(fù)雜,計算復(fù)雜度高。實驗6采用當下流行的HRNet[25]網(wǎng)絡(luò),在HRNet網(wǎng)絡(luò)的頭部同時回歸關(guān)鍵點坐標的高斯熱力圖和點坐標的二分類,點坐標和可見性的損失函數(shù)保持和實驗1一致。實驗6在點坐標和可見性預(yù)測上均明顯差于實驗1,分析原因有可能為HRNet原本是個單任務(wù)網(wǎng)絡(luò),只回歸分類任務(wù)或者關(guān)鍵點坐標任務(wù),而在網(wǎng)絡(luò)的頭部按照HRNet處理單獨任務(wù)的方式同時接上關(guān)鍵點可見性分類和坐標檢測任務(wù),使得2個子任務(wù)在網(wǎng)絡(luò)上距離太近,網(wǎng)絡(luò)提取的語義信息和空間分辨率信息發(fā)生沖突,導(dǎo)致學到的結(jié)果不理想。實驗7采用流行的語義分割網(wǎng)絡(luò)BiSeNet[26]去回歸關(guān)鍵點坐標的熱力圖,相較實驗1,點坐標和可見性預(yù)測都不理想,猜測原因為BiSeNet語義分割中的語義信息的提取和空間分辨率信息在車輛關(guān)鍵點檢測任務(wù)上不協(xié)調(diào),兩者的融合方式不一致。因此綜合考慮計算復(fù)雜度和模型精度,VKPNet均優(yōu)于橫向?qū)Ρ鹊钠渌餍芯W(wǎng)絡(luò)設(shè)計。
VKPNet在20萬張訓(xùn)練數(shù)據(jù)上訓(xùn)練得到的模型在2080Ti的GPU上,輸入圖片大小為256×256,批大小為128時達到600 fps的運行速度。而在智慧交通系統(tǒng)中還有車輛檢測、車輛細分類、車輛重識別、車輛跟蹤等多個任務(wù)需要同時運行,智慧交通系統(tǒng)的整體運行速度需達到30 fps以上。600 fps(批大小為128)的車輛關(guān)鍵點檢測模型速度達不到實際落地的需求。因此需對當前車輛關(guān)鍵點檢測模型進行提速。
分析車輛關(guān)鍵點檢測模型運行時每一個操作符的時間消耗,考慮對車輛關(guān)鍵點檢測模型進行剪枝和量化來提速。采取如下措施對網(wǎng)絡(luò)進行剪枝操作:1)使用更小的主干網(wǎng)絡(luò)(ResNet50改為ResNet18-half);2)縮小輸入大小(256×256改為192×192);3)縮小ResNet第一層卷積核的大小(7×7改為3×3);4)將CPN的U型結(jié)構(gòu)卷積層的通道數(shù)減少一半。
對剪枝后的關(guān)鍵點檢測網(wǎng)絡(luò)重新訓(xùn)練得到新的模型,繼續(xù)對新模型使用英偉達公司的TensorRT進行量化,將模型中的float32浮點運算變?yōu)閕nt8整形運算得到最終提速后的小模型。經(jīng)測試提速后小模型達到7543 fps的速度,提速12倍,達到智慧交通中實時性檢測的需要。同時小模型精度為NME=1.79,P@R_0.95=0.9490,對比表1中實驗1精度下降,但精度仍較高,滿足實際應(yīng)用需求。
對測試集中每張圖片的NME進行倒序排序,挑選出像素誤差較大的圖片,觀察到精度差的這些圖片中很大一部分情況是同一張圖片中會出現(xiàn)多個車輛,如圖6中多個車輛互相遮擋。這是由于VKPNet關(guān)鍵點檢測算法是自上而下,首先車輛目標檢測器檢測到車輛的包圍框,在車輛擁擠的場景下,一個檢測框內(nèi)會有多個車輛出現(xiàn),而車輛關(guān)鍵點檢測模型的輸入是假設(shè)只有單個車輛的小圖,此時觀察圖7模型預(yù)測的熱力圖,發(fā)現(xiàn)對于有多個車輛的輸入圖片,模型預(yù)測的熱力圖在多個車輛的相同關(guān)鍵點位置上都有響應(yīng),出現(xiàn)多峰現(xiàn)象,模型無法將注意力集中到單個車輛上,即無法區(qū)分主體車,因此在每個車輛上都有了響應(yīng),造成關(guān)鍵點檢測精度下降。
圖6 單張車輛檢測框中有多個車輛
圖7 車輛遮擋時的熱力圖響應(yīng)
遮擋場景下關(guān)鍵點檢測模型無法區(qū)分主體車輛的情況后續(xù)可以考慮從以下方法探索解決:
1)數(shù)據(jù)增廣。訓(xùn)練時加大這種單車輛中多個車輛的數(shù)據(jù)比例,比如對正常車輛圖片進行貼圖,讓小車遮擋主體車,讓網(wǎng)絡(luò)學習把注意力集中在單個主體車輛上,能夠區(qū)分主體車。
2)引入注意力機制。對熱力圖上主體車輛對應(yīng)的區(qū)域Loss進行加強,注意力可以考慮采用主體車輛的分割mask來獲得。
本文基于CPN網(wǎng)絡(luò)提出了一個簡單通用的車輛關(guān)鍵點檢測網(wǎng)絡(luò),在20萬張的訓(xùn)練集上訓(xùn)練得到的模型實現(xiàn)關(guān)鍵點坐標歸一化像素誤差在1%以內(nèi),可見性預(yù)測召回率和精確率均達到0.95的水平,模型精度較高。同時驗證了對熱力圖采用JS散度約束比L2 Loss能夠?qū)W到更精確的高斯熱力圖,SoftArgmax端到端的方式解碼關(guān)鍵點坐標要明顯優(yōu)于Argmax方式。橫向?qū)Ρ绕渌餍械纳疃葘W習網(wǎng)絡(luò)驗證了提出的模型的高精度。并對實際落地的車輛關(guān)鍵點檢測模型進行剪枝、量化提速達到了實際應(yīng)用時的實時性需要。最后分析這種自上而下的車輛關(guān)鍵點檢測網(wǎng)絡(luò)對于車輛遮擋的情況難以處理,原因為在一個檢測框內(nèi)有多個車輛時,模型無法區(qū)分主體車輛,檢測關(guān)鍵點的高斯熱力圖會出現(xiàn)多峰的情況,探討了以后解決該問題可能的方案。