最新的 YOLOP 網絡模型出來了,同時支持目標檢測,可行駛區域分割和車道線分割三大任務,cver們趕緊卷起來,而且還是個real time + sort 的模型。
1、網絡結構
如下圖:
由一個encoder和三個特定任務的decoder組成
encoder包含: 主干網絡( CSPDarknet ),和neck結構(SPP+FPN)
decoders分為:一個檢測頭和兩個分割頭,
檢測頭和yolov4的檢測頭一樣,不做多說。
兩個分割頭都是使用FPN的最底層特征圖(W/8,H/8,256)作為輸入,進行三次最近鄰上采樣,最終輸出(W,H,2)的特征圖。在可行駛區域分割頭中,行駛區域為前景,其他為背景;在車道線分割頭,車道線為前景,其他為背景。
2、損失函數
損失函數分為Ldet,Lda−seg和 Lll−seg 三部分
其中Ldet為檢測任務的loss,公式如下:
Ldet = α1 * Lclass + α2 * Lobj + α3 * Lbox
Lclass和Lobj都是focal loss,分別用於分類和置信度計算;Lbox為LCIoU損失函數
Lda−seg為可行駛區域分割任務的loss,公式如下
Lda−seg = Lce
就是正常的交叉熵損失函數
Lll−seg為車道線分割任務的loss,公式如下:
Lll−seg = Lce + LIoU
由交叉熵損失函數和iou損失函數組成,其中
LIoU = TN /(TN + FP + FN),為什么損失函數是這樣的,希望有懂的大佬可以解答下,分割任務接觸的少,不要笑我。
因為車道線的像素比較稀疏,所以需要額外添加一個LIoU 損失
整體損失函數如下:
Lall = γ1 * Ldet + γ2 * Lda−seg + γ3 * Lll−seg,其中
包含6個超參數,α1,α2,α3,γ1,γ2,γ3;該怎么設置呢,終於到了調參俠的用武之地了。
3、實驗部分
3.1 訓練參數設置
- 使用 kmeans 聚類獲取錨點框
- 使用 Adam 優化器, 初始化 learning rate, β1、β2 分別設置為 0.001, 0.937, 0.999。使用 Warm-up 和 cosine 衰減策略調整 learning rate
3.2 數據增強策略
- Photometric distortions:adjust the hue, saturation and value of images
- geometric distortions:random rotating, scaling, translating, shearing,and left-right flipping
3.3 消融實驗
- 數據集: BDD100K,總共100k張圖片,其中訓練集70K,驗證集10K,測試集20K,測試集沒有標簽,所以實驗結果為驗證集上的推理結果
- 模型輸入大小:640×384×3
檢測任務結果
可行駛區域分割任務結果
車道線分割任務結果
端到端訓練策略和分階段訓練策略結果對比
E, D, S and W refer to Encoder, Detect head, two Segment heads and whole network
例如 ED-S-W 表示先固定S,訓練ED;然后固定ED,訓練S;最后整個網絡一起訓練
多任務訓練和單任務訓練結果對比
實驗硬件環境
- 訓練環境:NVIDIA GTX TITAN XP
- 嵌入式環境:Jetson TX2(23 FPS),使用了 TensorRT 加速部署
4、總結
新的東西不多,但效果很好,估計大道至簡吧。