博客專欄

        EEPW首頁 > 博客 > YOLOP 多任務算法詳解

        YOLOP 多任務算法詳解

        發布人:地平線開發者 時間:2024-11-22 來源:工程師 發布文章

        YOLOP 是華中科技大學研究團隊在 2021 年開源的研究成果,其將目標檢測/可行駛區域分割和車道線檢測三大視覺任務同時放在一起處理,并且在 Jetson TX2 開發板子上能夠達到 23FPS。


        論文標題:YOLOP You Only Look Once for Panoptic Driving Perception

        論文地址:https://arxiv.org/abs/2108.11250

        官方代碼:https://github.com/hustvl/YOLOP



        01 網絡結構


        YOLOP 的核心亮點就是多任務學習,而各部分都是拿其它領域的成果進行縫合,其網絡結構如下圖所示:


        圖片


        三個子任務共用一個Backbone和Neck,然后分出來三個頭來執行不同的任務。



        1.1 Encoder


        根據論文所述,整個網絡可以分成一個 Encoder 和 3 個 Decoder。


        Encoder 包含 Backbone 和 Neck,Backbone 照搬了 YOLOv4 所采用的 CSPDarknet,Neck 也和 YOLOv4 類似,使用了空間金字塔(SPP)模塊和特征金字塔網絡(FPN)模塊。



        1.2 Decoders


        Decoders 即三個任務頭:

        1. Detect Head

          目標檢測頭使用了 Path Aggregation Network (PAN)結構,這個結構可以將多個尺度特征圖的特征圖進行融合,其實還是 YOLOv4 那一套。

        2. Drivable Area Segment Head & Lane Line Segment Head

          可行駛區域分割頭和車道線檢測頭都屬于語義分割任務,因此 YOLOP 使用了相同的網絡結構,經過三次上采樣,將輸出特征圖恢復為(W, H, 2)的大小,再進行具體任務的處理。


        1.3 Loss Function


        損失函數包括三部分,即三個任務的損失。


        1. 目標檢測損失

          目標檢測是直接照搬 YOLOv4 的,因此和 YOLOv4 采用的損失一樣,經典的邊界框損失、目標損失和類別損失,各自加了個權重。

        2. 語義分割損失

          圖片另外兩個語義分割損失采用的均是交叉熵損失。

        3. 總體損失,總體損失為三部分損失之和:

        圖片



        02 代碼結構


        圖片



        03 訓練--tools/train.py


        3.1 設置 DDP 參數


        圖片


        pytorch 中 DDP 使用:

        (1)參數加載;

        (2)模型轉換成 DDP 模型;

        (3)訓練數據 sampler,來使得各個進程上的數據各不相同;

        (4)分布式模型的保存。



        3.2 讀取網絡結構


        models/YOLOP.py

        圖片



        3.3 定義損失函數及優化器


        core/loss.py    utils/utils.py

        圖片



        3.4 網絡結構劃分


        用于單任務訓練固定其他網絡部分層。


        圖片



        3.5 初始化學習率


        后續在 train()中 warmup 會調整學習率。


        圖片


        首先定義一個優化器,定義好優化器以后,就可以給這個優化器綁定一個指數衰減學習率控制器。

        (1) torch.optim.lr_scheduler.LambdaLR  
        語法:class torch.optim.lr_scheduler.LambdaLR(optimizer, lr_lambda, last_epoch=-1)

        參數:

              optimizer (Optimizer):要更改學習率的優化器,sgd或adam;
             lr_lambda(function or list):根據epoch計算λ \lambdaλ的函數;或者是一個list的這樣的   function,分別計算各個parameter groups的學習率更新用到的λ \lambdaλ;
             last_epoch (int):最后一個epoch的index,如果是訓練了很多個epoch后中斷了,繼續訓練,這個值就等于加載的模型的epoch。默認為-1表示從頭開始訓練,即從epoch=1開始。



        04 dataset/bdd.py 文件


        4.1 數據讀取


        1.該文件繼承 AutoDriveDataset.py。


        圖片


        2、按比例縮放操作:letterbox()圖像增加灰邊

        3、數據增強操作


        4.2 數據增強


        utils/utils.py 文件:

        • random_perspective()放射變換增強

        • augment_hsv()顏色 HSV 通道增強

        • cutout()



        05 models/YOLOP.py 文件


        圖片


        YOLOP 包括三個檢測任務,目標檢測+可行駛區域檢測+車道線檢測。



        06 損失函數


        loss.py postprocess.py


        build_targets 思想:


        build_targets 主要為了拿到所有 targets(擴充了周圍 grids)對應的類別,框,batch 中圖片數索引和 anchor 索引,以及具體的 anchors。


        每個 gt 按照正樣本選取策略,生成相應的 5 個框,再根據與默認 anchor 匹配,計算寬高的比例值,根據閾值過濾不相符的框,得到最終正樣本。

        #[b, a, gj, gi]為shape=54的向量,pi為[4,3,48,80,6]維矩陣,從pi中按照b, a, gj, gi的索引挑出想要的目標,最終為[54,6]維ps = pi[b, a, gj, gi]  # prediction subset corresponding to targets 。b, a, gj, gi為索引值,在pi中挑


        6.1 目標檢測損失


        predictions[0] 目標檢測分支[[4,3,48,80,6],[4,3,24,40,6],[4,3,12,20,6]]。


        targets[0] 目標檢測標簽 [32,6],格式為[batch_num,class,x1,y1,x2,y2]。根據 build_targets 在每個檢測層生成 相 應的正樣本 tbox[]。


        將每層的預測結果 tensor pi 根據正樣本格式得到 ps = pi[b, a, gj, gi]。


        計算每個檢測層預測與正樣本之間的 ciou 坐標損失。

        iou = bbox_iou(pbox.T, tbox[i], x1y1x2y2=False, CIoU=True)  # iou(prediction, target)
        lbox += (1.0 - iou).mean()  # iou loss 坐標損失


        obj 損失:

        圖片


        cls 類別損失:

        圖片

        6.2 可行駛區域損失

        圖片


        6.3 車道線損失


        圖片



        07 網絡模型輸出格式形式


        7.1 網絡模型檢測輸出格式


        det_out:障礙物檢測輸出格式:[25200,6] 其中 6 表示[x1,y1,x2,y2,conf,cls],25200 :(80x80+40x40+20x20)x3。


        圖片


        7.2 網絡模型車道線輸出格式


        lane_line_seg : 車道線分割輸出格式:1,2,640,640。


        圖片


        7.3 網絡模型可行駛區域輸出格式


        drive_area_seg : 可行駛區域分割輸出格式:1,2,640,640。


        圖片



        08 前視停車場數據集檢測效果圖


        圖片




        *博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。



        關鍵詞: 算法 自動駕駛

        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 沾化县| 进贤县| 化隆| 盐源县| 南开区| 余姚市| 色达县| 新乐市| 龙游县| 汉寿县| 小金县| 曲靖市| 西畴县| 镇安县| 铜川市| 聂拉木县| 财经| 香港| 独山县| 山东| 台中市| 舟曲县| 贵州省| 阳东县| 万载县| 通道| 广东省| 凉城县| 城固县| 宜兴市| 延安市| 闽侯县| 仲巴县| 开原市| 南漳县| 精河县| 天镇县| 遂川县| 济宁市| 尼玛县| 亚东县|