paper: Learning Lightweight Lane Detection CNNs by Self Attention Distillation
code: https://github.com/cardwing/Codes-for-Lane-Detection
Abstract
-
本論文的思路比較清晰,想通過知識蒸餾的方式,用高層的信息來反哺優化低層學習到更准確的信息,而低層學習到的更准確的特征表達又能進一步幫助提升高層的特征表達;
-
同時,作者們將SAD(Self Attention Distillation)設計成一個module,能夠很容易嵌入到CNN網絡中;
-
將SAD嵌入到自己的網絡中,只需要在訓練階段加入即可,因此不會給inference過程增加多余的參數
-
其中SAD的特征圖如下
Details
-
SAD模塊
-
添加SAD模塊
- 在ENet中添加SAD模塊的一個實例展示如下:
- 可見,這一加入,對原始網絡結構不需要改動,只需要更新loss即可
- Loss
- 整體的loss極為各部分的組合;由於主任務是車道線檢測,loss中引入了一個二分類的交叉熵loss,同時也增加了一個IoUloss,該loss能幫助增加預測結果和gt之間的重疊度,也即是能夠將預測的寬度和實際寬度更相近,如下:
- attention generator的loss如下:
- 整體的loss極為各部分的組合;由於主任務是車道線檢測,loss中引入了一個二分類的交叉熵loss,同時也增加了一個IoUloss,該loss能幫助增加預測結果和gt之間的重疊度,也即是能夠將預測的寬度和實際寬度更相近,如下:
- 何時添加SAD模塊
- 作者對比了在不同的訓練階段增加SAD模塊的影響:訓練早期加入的話,由於網絡本身還沒學習到足夠好的特征表示,因此會產生不夠好的Attention Map,而在訓練的后期加入,會明顯提升特征表示,如下圖;
- 作者對比了在不同的訓練階段增加SAD模塊的影響:訓練早期加入的話,由於網絡本身還沒學習到足夠好的特征表示,因此會產生不夠好的Attention Map,而在訓練的后期加入,會明顯提升特征表示,如下圖;
- 在ENet中添加SAD模塊的一個實例展示如下:
-
實驗
- 作者在三個公開數據集上進行實驗,TuSimple,CULane,BDD100K,其具體的評判標准分別為:
- TuSimple: 官方像素級別的accuracy,accuracy = Np / Ngt,即預測的像素點的所有值除以總的像素點數。同時,作者提供了FP和FN
- CULane: 將線寬設為30像素,計算其和gt之間的IoU,IoU大於0.5的認為是TP,最終根據F1准則來評估。F1 = 2*Precision*Recal / (Precision+Recal)
- BDD100K:用像素級的accuracy和IoU作為評估准則
- trick
- 將背景像素的cross-entropy loss的權重設置為0.4
- 數據擴充中,使用來random rotation,random cropping,horizontal flipping(個人理解,后一個擴充方式的話,需要把label也同步更改了)
- 作者在三個公開數據集上進行實驗,TuSimple,CULane,BDD100K,其具體的評判標准分別為: