《LaneAF:Robust Multi-Lane Detection with Affinity Fields》论文笔记
參考代碼:LaneAF
1. 概述
導讀:這篇文章提出了通過語義分割(2分類)檢測車道線的算法,不過在其中添加了affinity fields用于區分不同的車道線(從語義分割演變實現“實例分割”)。文中對每條車道線預測兩個affinity fields,分別是水平方向和垂直方向。其中水平方向的affinity fields用于歸納當前車道線行的中心點,垂直的affinity fileds用于推斷當前車道線下一行預測集合的位置,也就是在圖像的行維度上使用水平和垂直的affinity fields進行耦合,從而將不同的車道線區分開來。因而文章的算法后處理相對來講會復雜一些,經過測試其平均耗時為15~20ms(CPU)。
文章方法新穎點在分割的基礎上引入affinity fields用以在語義分割基礎上實現“實例分割”的效果。其主要流程見下圖所示:
左邊的部分就是傳統的語義分割的編解碼單元,只是在輸出的時候同時輸出語義分割結果和兩個方向上的affinity fields,之后通過后處理得到最后的結果。
2. Affinity Fileds和Loss
2.1 Affinity Fileds
預測標簽的生成:
對于水平方向的affinity fileds是用于完成當前行所在車道線中心點的預測,那么當前行所在車道線上的點指向中心的向量就可以表示為:
H?gt(xil,y)=(xˉyl?xil∣xˉyl?xil∣,y?y∣∣y?y)T=(xˉyl?xil∣xˉyl?xil∣,0)T\vec{H}_{gt}(x_i^l,y)=(\frac{\bar{x}_y^l-x_i^l}{|\bar{x}_y^l-x_i^l|},\frac{y-y}{||y-y})^T=(\frac{\bar{x}_y^l-x_i^l}{|\bar{x}_y^l-x_i^l|},0)^THgt?(xil?,y)=(∣xˉyl??xil?∣xˉyl??xil??,∣∣y?yy?y?)T=(∣xˉyl??xil?∣xˉyl??xil??,0)T
其中,xˉyl\bar{x}_y^lxˉyl?代表當前車道線所在行的中心點,yyy代表當前所在的圖片行,lll代表當前所在的車道線,xilx_i^lxil?代表當前所在車道線行上的像素點。形象的描述見下圖所示:
對于垂直方向的affinity fileds的計算就需要2個行(y?1y-1y?1和yyy),其計算的過程可以描述為:
V?gt(xil,y)=(xˉy?1l?xil∣xˉy?1l?xil∣,(y?1)?y∣(y?1)?y∣)T=(xˉy?1l?xil∣xˉy?1l?xil∣,?1)T\vec{V}_{gt}(x_i^l,y)=(\frac{\bar{x}_{y-1}^l-x_i^l}{|\bar{x}_{y-1}^l-x_i^l|}, \frac{(y-1)-y}{|(y-1)-y|})^T=(\frac{\bar{x}_{y-1}^l-x_i^l}{|\bar{x}_{y-1}^l-x_i^l|}, -1)^TVgt?(xil?,y)=(∣xˉy?1l??xil?∣xˉy?1l??xil??,∣(y?1)?y∣(y?1)?y?)T=(∣xˉy?1l??xil?∣xˉy?1l??xil??,?1)T
上面一些參數與水平計算中的類似,其中需要注意的是計算垂直方向的時候是與上一行的中心點xˉy?1l\bar{x}_{y-1}^lxˉy?1l?進行計算,形象的描述表示為:
那么對于一整幅圖像其中的多個車道線的水平和垂直方向的affinity fileds標注計算過程可以描述為下面算法中的形式(文章中所有的處理過程都是自底向上的):
水平和垂直affinity fileds的后處理:
在后處理階段對于不同的車道線實例使用CkC^kCk進行表示(初始的情況下是在(y?1)(y-1)(y?1)行開始處理),則所在行的車道線實例的判別條件為:
H?pred(xi?1fg,y?1)0≤0andH?pred(xifg,y?1)0>0\vec{H}_{pred}(x_{i-1}^{fg},y-1)_0\le0\ and\ \vec{H}_{pred}(x_i^{fg},y-1)_0\gt0Hpred?(xi?1fg?,y?1)0?≤0?and?Hpred?(xifg?,y?1)0?>0
也就是通過夾逼準則進行中心點確定,其示意圖見下圖所示:
在確定了當前行的的中心點之后,下一行的車道線點集合怎么和當前中心點關聯上呢?文章提出的方式就是使用距離度量,也就是求與當前中心點最近的下一行車道線點集合的距離最小化,從而實現聚類,可以描述為:
cvaf?(l)=arg?min?CkdCk(l)c_{vaf}^*(l)=\argmin_{C^k}d^{C^k}(l)cvaf??(l)=Ckargmin?dCk(l)
也就是去判斷與當前中心點距離最近的車道線點集合(表示為xilx_i^lxil?),這里使用的度量描述為:
dCk(l)=1Ck∑i=0∣Ck∣?1∥(xˉCk,y?1)T?(xil,y)T?V?pred(xil,y)?∣∣(x?Ck,y?1)T?(xil,y)T∣∣∥d^{C^k}(l)=\frac{1}{C^k}\sum_{i=0}^{|C^k|-1}\Vert(\bar{x}^{C^k},y-1)^T-(x_i^l,y)^T-\vec{V}_{pred}(x_i^l,y)\cdot||(\vec{x}^{C^k},y-1)^T-(x_i^l,y)^T||\ \VertdCk(l)=Ck1?i=0∑∣Ck∣?1?∥(xˉCk,y?1)T?(xil?,y)T?Vpred?(xil?,y)?∣∣(xCk,y?1)T?(xil?,y)T∣∣?∥
具體計算距離的過程可以描述為下圖的形式:
這里的完整后處理算法描述為:
2.2 損失函數
這里的損失函數主要包含分割損失函數和affinity fileds的損失函數。
分割部分的損失函數:
加權的較差熵損失
LBCE=?1N∑i[w?ti?log(oi)+(1=ti)log(1?oi)]L_{BCE}=-\frac{1}{N}\sum_i[w\cdot t_i\cdot log(o_i)+(1=t_i)log(1-o_i)]LBCE?=?N1?i∑?[w?ti??log(oi?)+(1=ti?)log(1?oi?)]
IoU損失
LIoU=1N∑i[1?ti?oiti+oi?ti?oi]L_{IoU}=\frac{1}{N}\sum_i[1-\frac{t_i\cdot o_i}{t_i+o_i-t_i\cdot o_i}]LIoU?=N1?i∑?[1?ti?+oi??ti??oi?ti??oi??]
affinity fileds部分損失:
直接采用L1監督的形式
LAF=1Nfg∑i[∣tihaf?oihaf∣+∣tivaf?oivaf∣]L_{AF}=\frac{1}{N_{fg}}\sum_i[|t_i^{haf}-o_i^{haf}|+|t_i^{vaf}-o_i^{vaf}|]LAF?=Nfg?1?i∑?[∣tihaf??oihaf?∣+∣tivaf??oivaf?∣]
則整體損失函數被描述為:
L=LBCE+LIoU+LAFL=L_{BCE}+L_{IoU}+L_{AF}L=LBCE?+LIoU?+LAF?
3. 實驗結果
總結
以上是生活随笔為你收集整理的《LaneAF:Robust Multi-Lane Detection with Affinity Fields》论文笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 3.7 广域网(ppp协议、HDLC协议
- 下一篇: python中的内置高阶函数