在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            博客專欄

            EEPW首頁 > 博客 > YOLOP 多任務(wù)算法詳解

            YOLOP 多任務(wù)算法詳解

            發(fā)布人:地平線開發(fā)者 時(shí)間:2024-11-22 來源:工程師 發(fā)布文章

            YOLOP 是華中科技大學(xué)研究團(tuán)隊(duì)在 2021 年開源的研究成果,其將目標(biāo)檢測/可行駛區(qū)域分割和車道線檢測三大視覺任務(wù)同時(shí)放在一起處理,并且在 Jetson TX2 開發(fā)板子上能夠達(dá)到 23FPS。


            論文標(biāo)題:YOLOP You Only Look Once for Panoptic Driving Perception

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

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



            01 網(wǎng)絡(luò)結(jié)構(gòu)


            YOLOP 的核心亮點(diǎn)就是多任務(wù)學(xué)習(xí),而各部分都是拿其它領(lǐng)域的成果進(jìn)行縫合,其網(wǎng)絡(luò)結(jié)構(gòu)如下圖所示:


            圖片


            三個(gè)子任務(wù)共用一個(gè)Backbone和Neck,然后分出來三個(gè)頭來執(zhí)行不同的任務(wù)。



            1.1 Encoder


            根據(jù)論文所述,整個(gè)網(wǎng)絡(luò)可以分成一個(gè) Encoder 和 3 個(gè) Decoder。


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



            1.2 Decoders


            Decoders 即三個(gè)任務(wù)頭:

            1. Detect Head

              目標(biāo)檢測頭使用了 Path Aggregation Network (PAN)結(jié)構(gòu),這個(gè)結(jié)構(gòu)可以將多個(gè)尺度特征圖的特征圖進(jìn)行融合,其實(shí)還是 YOLOv4 那一套。

            2. Drivable Area Segment Head & Lane Line Segment Head

              可行駛區(qū)域分割頭和車道線檢測頭都屬于語義分割任務(wù),因此 YOLOP 使用了相同的網(wǎng)絡(luò)結(jié)構(gòu),經(jīng)過三次上采樣,將輸出特征圖恢復(fù)為(W, H, 2)的大小,再進(jìn)行具體任務(wù)的處理。


            1.3 Loss Function


            損失函數(shù)包括三部分,即三個(gè)任務(wù)的損失。


            1. 目標(biāo)檢測損失

              目標(biāo)檢測是直接照搬 YOLOv4 的,因此和 YOLOv4 采用的損失一樣,經(jīng)典的邊界框損失、目標(biāo)損失和類別損失,各自加了個(gè)權(quán)重。

            2. 語義分割損失

              圖片另外兩個(gè)語義分割損失采用的均是交叉熵?fù)p失。

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

            圖片



            02 代碼結(jié)構(gòu)


            圖片



            03 訓(xùn)練--tools/train.py


            3.1 設(shè)置 DDP 參數(shù)


            圖片


            pytorch 中 DDP 使用:

            (1)參數(shù)加載;

            (2)模型轉(zhuǎn)換成 DDP 模型;

            (3)訓(xùn)練數(shù)據(jù) sampler,來使得各個(gè)進(jìn)程上的數(shù)據(jù)各不相同;

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



            3.2 讀取網(wǎng)絡(luò)結(jié)構(gòu)


            models/YOLOP.py

            圖片



            3.3 定義損失函數(shù)及優(yōu)化器


            core/loss.py    utils/utils.py

            圖片



            3.4 網(wǎng)絡(luò)結(jié)構(gòu)劃分


            用于單任務(wù)訓(xùn)練固定其他網(wǎng)絡(luò)部分層。


            圖片



            3.5 初始化學(xué)習(xí)率


            后續(xù)在 train()中 warmup 會調(diào)整學(xué)習(xí)率。


            圖片


            首先定義一個(gè)優(yōu)化器,定義好優(yōu)化器以后,就可以給這個(gè)優(yōu)化器綁定一個(gè)指數(shù)衰減學(xué)習(xí)率控制器。

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

            參數(shù):

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



            04 dataset/bdd.py 文件


            4.1 數(shù)據(jù)讀取


            1.該文件繼承 AutoDriveDataset.py。


            圖片


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

            3、數(shù)據(jù)增強(qiáng)操作


            4.2 數(shù)據(jù)增強(qiáng)


            utils/utils.py 文件:

            • random_perspective()放射變換增強(qiáng)

            • augment_hsv()顏色 HSV 通道增強(qiáng)

            • cutout()



            05 models/YOLOP.py 文件


            圖片


            YOLOP 包括三個(gè)檢測任務(wù),目標(biāo)檢測+可行駛區(qū)域檢測+車道線檢測。



            06 損失函數(shù)


            loss.py postprocess.py


            build_targets 思想:


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


            每個(gè) gt 按照正樣本選取策略,生成相應(yīng)的 5 個(gè)框,再根據(jù)與默認(rèn) anchor 匹配,計(jì)算寬高的比例值,根據(jù)閾值過濾不相符的框,得到最終正樣本。

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


            6.1 目標(biāo)檢測損失


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


            targets[0] 目標(biāo)檢測標(biāo)簽 [32,6],格式為[batch_num,class,x1,y1,x2,y2]。根據(jù) build_targets 在每個(gè)檢測層生成 相 應(yīng)的正樣本 tbox[]。


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


            計(jì)算每個(gè)檢測層預(yù)測與正樣本之間的 ciou 坐標(biāo)損失。

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


            obj 損失:

            圖片


            cls 類別損失:

            圖片

            6.2 可行駛區(qū)域損失

            圖片


            6.3 車道線損失


            圖片



            07 網(wǎng)絡(luò)模型輸出格式形式


            7.1 網(wǎng)絡(luò)模型檢測輸出格式


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


            圖片


            7.2 網(wǎng)絡(luò)模型車道線輸出格式


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


            圖片


            7.3 網(wǎng)絡(luò)模型可行駛區(qū)域輸出格式


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


            圖片



            08 前視停車場數(shù)據(jù)集檢測效果圖


            圖片




            *博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請聯(lián)系工作人員刪除。



            關(guān)鍵詞: 算法 自動駕駛

            相關(guān)推薦

            技術(shù)專區(qū)

            關(guān)閉