<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Yolo發(fā)展史(v4/v5的創(chuàng)新點(diǎn)匯總!)

          共 12313字,需瀏覽 25分鐘

           ·

          2021-06-26 23:00

          大家好,接上面一篇文章:網(wǎng)易面試原題|簡(jiǎn)述Yolo系列網(wǎng)絡(luò)的發(fā)展史

          原問(wèn)題系列網(wǎng)絡(luò)的發(fā)展。這篇文章,我們主要看下的創(chuàng)新點(diǎn)。

          看文章之前,別忘了關(guān)注我哈~ 向你呀!

          YOLOv4

          YOLOv4的三大貢獻(xiàn):

          1. 設(shè)計(jì)了強(qiáng)大而高效的檢測(cè)模型,任何人都可以用 1080Ti 和 2080Ti訓(xùn)練這個(gè)超快而精準(zhǔn)的模型。
          2. 驗(yàn)證了很多近幾年 SOTA 的深度學(xué)習(xí)目標(biāo)檢測(cè)訓(xùn)練技巧。
          3. 修改了很多 SOTA 的方法, 讓它們對(duì)單GPU訓(xùn)練更加高效,例如 CmBN,PAN,SAM等。

          作者總結(jié)了近幾年的單階段和雙階段的目標(biāo)檢測(cè)算法以及技巧,并用一個(gè)圖概括了單階段和雙階段目標(biāo)檢測(cè)網(wǎng)絡(luò)的差別,two-stage的檢測(cè)網(wǎng)絡(luò),相當(dāng)于在one-stage的密集檢測(cè)上增加了一個(gè)稀疏的預(yù)測(cè)器

          作者也對(duì)多種方法進(jìn)行實(shí)驗(yàn),做了詳盡的測(cè)試,作者將那些增加模型性能,只在訓(xùn)練階段耗時(shí)增多,但不影響推理耗時(shí)的技巧稱為 —— bag of freebies;而那些微微提高了推理耗時(shí),卻顯著提升性能的,叫做 —— bag of specials。

          bag of freebies

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

          • 光度變換
            • 調(diào)整亮度,對(duì)比度,色相,飽和度和噪點(diǎn)
          • 幾何變換
            • 隨機(jī)縮放,裁剪,翻轉(zhuǎn)和旋轉(zhuǎn)
          • 模擬目標(biāo)遮擋
            • random erase
            • CutOut
            • Hide and Seek
            • grid Mask
          • 圖像融合
            • MixUp
            • CutMix
            • Mosaic

          常見(jiàn)的正則化方法:

          • DropOut
          • DropConnect
          • DropBlock

          處理數(shù)據(jù)不平衡

          • two-stage網(wǎng)絡(luò)使用的難例挖掘,但是這種方式不適合one-stage檢測(cè)
          • Focal Loss

          標(biāo)簽平滑(Label Smoothing)

          邊界框回歸的損失函數(shù)

          • IOU Loss
          • GIOU Loss
          • DIOU Loss
          • CIOU Loss

          Bag of specials

          增強(qiáng)感受野

          • SPP
          • ASPP
          • RFB

          注意力模塊

          • 通道注意力(channel-wise)
            • SE
          • 空間注意力(point-wise)
            • SAM

          特征融合

          • 跳層連接
          • FPN
          • SFAM
          • ASFF
          • BiFPN(EfficientNet中提出)

          激活函數(shù)

          • LReLU(解決當(dāng)輸入小于0時(shí)ReLU梯度為0的情況)
          • PReLU(解決當(dāng)輸入小于0時(shí)ReLU梯度為0的情況)
          • ReLU6(專門為量化網(wǎng)絡(luò)設(shè)計(jì))
          • hard-swish(專門為量化網(wǎng)絡(luò)設(shè)計(jì))
          • SELU(對(duì)神經(jīng)網(wǎng)絡(luò)進(jìn)行自歸一化)
          • Swish(連續(xù)可微激活函數(shù))
          • Mish(連續(xù)可微激活函數(shù))

          后處理方式

          • NMS
          • soft NMS
          • DIOU NMS(在soft NMS的基礎(chǔ)上將重心距離的信息添加到刪選BBOx的過(guò)程中)

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

          圖片引自:江大白

          YOLOv4整個(gè)網(wǎng)絡(luò)架構(gòu)組成

          • Backbone: CSPDarknet53
          • Neck: SPP, PAN
          • Head: YOLOv3

          YOLOv4 各部分使用到的Bags:

          Bag of Freebies (BoF) for backbone:

          • CutMix、Mosaic data augmentation
          • DropBlock regularization
          • Class label smoothing

          Bag of Specials (BoS) for backbone:

          • Mish activation
          • Cross-stage partial connections (CSP)
          • Multiinput weighted residual connections (MiWRC)

          Bag of Freebies (BoF) for detector:

          • CIoU-loss
          • CmBN
          • DropBlock regularization
          • Mosaic data augmentation
          • Self-Adversarial Training
          • Eliminate grid sensitivity
          • Using multiple anchors for a single ground truth
          • Cosine annealing scheduler
          • Optimal hyperparameters
          • Random training shapes

          Bag of Specials (BoS) for detector:

          • Mish activation
          • SPP-block
          • SAM-block
          • PAN path-aggregation block
          • DIoU-NMS

          BackBone

          CSPDarknet53是在Yolov3主干網(wǎng)絡(luò)Darknet53的基礎(chǔ)上,借鑒2019年CSPNet的經(jīng)驗(yàn),產(chǎn)生的Backbone結(jié)構(gòu),其中包含了5個(gè)CSP模塊。作者在實(shí)驗(yàn)中得到結(jié)論,CSPResNeX50分類精度比CSPDarknet,但是檢測(cè)性能卻不如后者。

          每個(gè)CSP模塊第一個(gè)卷積核的大小都是 ,stride=2,因此可以起到下采樣的作用。因?yàn)锽ackbone有5個(gè)CSP模塊,輸入圖像是,所以特征圖變化的規(guī)律是:。

          YOLOv4 和 YOLOv5 都使用 CSPDarknet作為BackBone,從輸入圖像中提取豐富的特征信息。CSPNet叫做Cross Stage Partial Network,跨階段局部網(wǎng)絡(luò)。其解決了其他大型卷積網(wǎng)絡(luò)結(jié)構(gòu)中的重復(fù)梯度問(wèn)題,減少模型參數(shù)和FLOPS。這對(duì) YOLO 有重要的意義,即保證了推理速度和準(zhǔn)確率,又減小了模型尺寸。

          CSPNet的作者認(rèn)為推理計(jì)算過(guò)高的問(wèn)題是由于網(wǎng)絡(luò)優(yōu)化中的梯度信息重復(fù)導(dǎo)致的。CSPNet基于Densnet的思想,復(fù)制基礎(chǔ)層的特征映射圖,通過(guò)dense block 傳遞到下一個(gè)階段進(jìn)行合并,從而將基礎(chǔ)層的特征映射圖分離出來(lái)。這樣可以實(shí)現(xiàn)更豐富的梯度組合,同時(shí)減少計(jì)算量。

          Cross Stage Partial DenseNet

          因此Yolov4在主干網(wǎng)絡(luò)Backbone采用CSPDarknet53網(wǎng)絡(luò)結(jié)構(gòu),主要有三個(gè)方面的優(yōu)點(diǎn):

          • 優(yōu)點(diǎn)一:增強(qiáng)CNN的學(xué)習(xí)能力,使得在輕量化的同時(shí)保持準(zhǔn)確性。
          • 優(yōu)點(diǎn)二:降低計(jì)算瓶頸
          • 優(yōu)點(diǎn)三:降低內(nèi)存成本

          詳細(xì)了解CSPNet,https://zhuanlan.zhihu.com/p/124838243

          而且作者只在Backbone中采用了Mish激活函數(shù),網(wǎng)絡(luò)后面仍然采用Leaky_relu激活函數(shù)。Yolov4作者實(shí)驗(yàn)測(cè)試時(shí),使用CSPDarknet53網(wǎng)絡(luò)在ImageNet數(shù)據(jù)集上做圖像分類任務(wù),發(fā)現(xiàn)使用了Mish激活函數(shù)的TOP-1和TOP-5的精度比沒(méi)有使用時(shí)精度要高一些。因此在設(shè)計(jì)Yolov4目標(biāo)檢測(cè)任務(wù)時(shí),主干網(wǎng)絡(luò)Backbone還是使用Mish激活函數(shù)。

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

          YOLOv4用到的數(shù)據(jù)增強(qiáng)方法

          Mosaic是一種新的混合4幅訓(xùn)練圖像的數(shù)據(jù)增強(qiáng)方法,使四個(gè)不同的上下文信息被混合,豐富了圖像的上下文信息,這使得網(wǎng)絡(luò)能夠檢測(cè)正常圖像之外的對(duì)象,增強(qiáng)模型的魯棒性。此外,批處理規(guī)范化BN層從每一層上的4個(gè)不同圖像計(jì)算激活統(tǒng)計(jì)信息。這大大減少了對(duì)large mini-batch-size的需求。Mosaic,就是把四張圖片拼接為一張圖片,這等于變相的增大了一次訓(xùn)練的圖片數(shù)量,可以讓最小批數(shù)量進(jìn)一步降低,讓在單GPU上訓(xùn)練更為輕松。

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

          在YOLOv4中,通過(guò)引入CutMix和Mosaic數(shù)據(jù)增強(qiáng)、類標(biāo)簽平滑和Mish激活等功能,分類精度得到了提高。因此,本文用于分類訓(xùn)練的BoF骨干(免費(fèi)包)包括以下內(nèi)容:CutMix和Mosaic數(shù)據(jù)增強(qiáng)和類標(biāo)簽平滑。此外,本文使用Mish激活作為補(bǔ)充選項(xiàng),

          DropBlock

          Yolov4中使用的Dropblock,其實(shí)和常見(jiàn)網(wǎng)絡(luò)中的Dropout功能類似,也是緩解過(guò)擬合的一種正則化方式。傳統(tǒng)的Dropout很簡(jiǎn)單,一句話就可以說(shuō)的清:隨機(jī)刪除減少神經(jīng)元的數(shù)量,使網(wǎng)絡(luò)變得更簡(jiǎn)單。而Dropblock和Dropout相似,比如下圖:上圖中,中間Dropout的方式會(huì)隨機(jī)的刪減丟棄一些信息,但Dropblock的研究者認(rèn)為,卷積層對(duì)于這種隨機(jī)丟棄并不敏感,因?yàn)榫矸e層通常是三層連用:卷積+激活+池化層,池化層本身就是對(duì)相鄰單元起作用。而且即使隨機(jī)丟棄,卷積層仍然可以從相鄰的激活單元學(xué)習(xí)到相同的信息。因此,在全連接層上效果很好的Dropout在卷積層上效果并不好。所以右圖Dropblock的研究者則干脆整個(gè)局部區(qū)域進(jìn)行刪減丟棄。

          這種方式其實(shí)是借鑒2017年的cutout數(shù)據(jù)增強(qiáng)的方式,cutout是將輸入圖像的部分區(qū)域清零,而Dropblock則是將Cutout應(yīng)用到每一個(gè)特征圖。而且并不是用固定的歸零比率,而是在訓(xùn)練時(shí)以一個(gè)小的比率開(kāi)始,隨著訓(xùn)練過(guò)程線性的增加這個(gè)比率。

          Dropblock的研究者與Cutout進(jìn)行對(duì)比驗(yàn)證時(shí),發(fā)現(xiàn)有幾個(gè)特點(diǎn):

          • Dropblock的效果優(yōu)于Cutout
          • Cutout只能作用于輸入層,而Dropblock則是將Cutout應(yīng)用到網(wǎng)絡(luò)中的每一個(gè)特征圖上
          • Dropblock可以定制各種組合,在訓(xùn)練的不同階段可以修改刪減的概率,從空間層面和時(shí)間層面,和Cutout相比都有更精細(xì)的改進(jìn)。

          Yolov4中直接采用了更優(yōu)的Dropblock,對(duì)網(wǎng)絡(luò)進(jìn)行正則化。

          Neck創(chuàng)新

          Yolov4的Neck結(jié)構(gòu)主要采用了SPP模塊、FPN+PAN的方式。

          SPP

          作者在SPP模塊中,使用的最大池化的方式,再將不同尺度的特征圖進(jìn)行Concat操作。最大池化采用padding操作,移動(dòng)的步長(zhǎng)為1,比如的輸入特征圖,使用大小的池化核池化,,因此池化后的特征圖仍然是大小。

          和Yolov4作者的研究相同,采用SPP模塊的方式,比單純的使用最大池化的方式,更有效的增加BackBone感受野。Yolov4的作者在使用大小的圖像進(jìn)行測(cè)試時(shí)發(fā)現(xiàn),在COCO目標(biāo)檢測(cè)任務(wù)中,以0.5%的額外計(jì)算代價(jià)將AP50增加了2.7%,因此Yolov4中也采用了SPP模塊。

          FPN+PAN

          Yolov4在FPN層的后面還添加了一個(gè)自底向上的特征金字塔。這樣結(jié)合操作,F(xiàn)PN層自頂向下傳達(dá)強(qiáng)語(yǔ)義特征,而特征金字塔則自底向上傳達(dá)強(qiáng)定位特征,兩兩聯(lián)手,從不同的主干層對(duì)不同的檢測(cè)層進(jìn)行參數(shù)聚合。

          FPN+PAN借鑒的是18年CVPR的PANet,當(dāng)時(shí)主要應(yīng)用于圖像分割領(lǐng)域,但Alexey將其拆分應(yīng)用到Y(jié)olov4中,進(jìn)一步提高特征提取的能力。

          原本的PANet網(wǎng)絡(luò)的PAN結(jié)構(gòu)中,兩個(gè)特征圖結(jié)合是采用shortcut操作,而Yolov4中則采用concat(route)操作,特征圖融合后的尺寸發(fā)生了變化。

          Head頭

          CmBN

          CmBN 為 CBN 的改進(jìn)版本,定義為交叉小批量歸一化 (CmBN)。這僅在單個(gè)批次內(nèi)的小批次之間收集統(tǒng)計(jì)信息(收集一個(gè)batch內(nèi)多個(gè)mini-batch內(nèi)的統(tǒng)計(jì)數(shù)據(jù))。

          Bounding Box Regeression Loss

          目標(biāo)檢測(cè)任務(wù)的損失函數(shù)一般由Classificition Loss(分類損失函數(shù))和Bounding Box Regeression Loss(回歸損失函數(shù))兩部分構(gòu)成。

          Bounding Box Regeression的Loss近些年的發(fā)展過(guò)程是:

          Smooth L1 Loss-> IoU Loss(2016)-> GIoU Loss(2019)-> DIoU Loss(2020)->CIoU Loss(2020)

          我們從最常用的IOU_Loss開(kāi)始,進(jìn)行對(duì)比拆解分析,看下Yolov4為啥要選擇CIOU_Loss。

          IOU LOSS

          IOU Loss主要考慮檢測(cè)框和目標(biāo)框的重疊面積,公式如下:

          IOU Loss存在兩個(gè)問(wèn)題:

          • 問(wèn)題一:當(dāng)預(yù)測(cè)框和目標(biāo)框不相交時(shí),也就是當(dāng)IOU=0時(shí),無(wú)法反映兩個(gè)框距離的遠(yuǎn)近,此時(shí)損失函數(shù)不可導(dǎo)。所以IOU Loss無(wú)法優(yōu)化兩個(gè)框不相交的情況
          • 問(wèn)題二:當(dāng)兩個(gè)預(yù)測(cè)框和同一個(gè)目標(biāo)框相重疊,且兩者IOU相同,這時(shí)IOU Loss對(duì)兩個(gè)預(yù)測(cè)框的懲罰相同,無(wú)法區(qū)分兩個(gè)預(yù)測(cè)框與GT目標(biāo)框的相交情況

          GIOU Loss

          由于IOU Loss的不足,2019年提出了GIOU Loss,我們先定義一下符號(hào):

          定義為預(yù)測(cè)框,為目標(biāo)框,為目標(biāo)框和預(yù)測(cè)框的最小外接矩形,公式如下:

          可以看到,相比于IOU Loss,GIOU Loss衡量了目標(biāo)框和預(yù)測(cè)框的相交程度,緩解了IOU Loss的問(wèn)題。

          但是當(dāng)預(yù)測(cè)框在目標(biāo)框內(nèi)部,且預(yù)測(cè)框大小一致時(shí),這時(shí)候預(yù)測(cè)框和目標(biāo)框的差集相等,這是GIOU Loss會(huì)退化成IOU Loss,無(wú)法區(qū)分各個(gè)預(yù)測(cè)框的位置關(guān)系。

          DIOU Loss 和 CIOU Loss

          好的目標(biāo)框回歸函數(shù)應(yīng)該考慮三個(gè)重要幾何因素:重疊面積、中心點(diǎn)距離,長(zhǎng)寬比。

          針對(duì)IOU Loss和GIOU Loss存在的問(wèn)題,DIOU Loss考慮重疊面積、中心點(diǎn)距離,公式如下:

          設(shè):為預(yù)測(cè)框和目標(biāo)框的最小外接矩形,表示最小外接矩形的對(duì)角線距離,表示預(yù)測(cè)框的中心點(diǎn)到目標(biāo)框中心點(diǎn)的歐式距離

          由上述公式可以看出,當(dāng)遇到GIOU Loss 無(wú)法解決的問(wèn)題時(shí),DIOU即考慮了重疊面積,也考慮了目標(biāo)框和預(yù)測(cè)框的中心點(diǎn)的距離,就可以衡量?jī)烧咧g的位置關(guān)系。所以當(dāng)目標(biāo)框包裹預(yù)測(cè)框的時(shí)候,DIOU可以衡量?jī)烧咧g的距離。

          但是DIOU Loss沒(méi)有考慮長(zhǎng)寬比,當(dāng)預(yù)測(cè)框在目標(biāo)框內(nèi)部時(shí),且多個(gè)預(yù)測(cè)框的中心點(diǎn)的位置都一樣時(shí),這時(shí)候DIOU Loss無(wú)法區(qū)分這幾個(gè)預(yù)測(cè)框的位置。所以提出了CIOU Loss,其在DIOU Loss的基礎(chǔ)上增加了一個(gè)影響因子,將預(yù)測(cè)框和目標(biāo)框的長(zhǎng)寬比都考慮進(jìn)去,公式如下:

          其中,是一個(gè)衡量長(zhǎng)寬比一致性的參數(shù),我們可以定義為:

          代表目標(biāo)框,代表預(yù)測(cè)框。

          至此,CIOU Loss包含了一個(gè)好的預(yù)測(cè)框回歸函數(shù)的三個(gè)重要的幾何因素:重疊面積、中心點(diǎn)距離、長(zhǎng)寬比。

          NMS

          NMS主要用于預(yù)選框的篩選,常用于目標(biāo)檢測(cè)算法中,一般采用普通的nms的方式,Yolov4則借鑒上面D/CIOU loss的論文:https://arxiv.org/pdf/1911.08287.pdf

          因?yàn)镈IOU在計(jì)算loss的時(shí)候,需要考慮邊界框中心點(diǎn)的位置信息,所以一些重疊物體也可以回歸出來(lái)。因此在重疊目標(biāo)的檢測(cè)中,DIOU_nms的效果優(yōu)于傳統(tǒng)的nms。

          CIOU Loss的性能要比DIOU Loss好,那為什么不用CIOU_nms,而用DIOU_nms?

          因?yàn)镃IOU_loss,是在DIOU_loss的基礎(chǔ)上,添加了一個(gè)的影響因子,包含groundtruth標(biāo)注框的信息,在訓(xùn)練時(shí)用于回歸。但是NMS在推理過(guò)程中,并不需要groundtruth的信息,所以CIOU NMS不可使用。

          CIOU Loss 代碼

          def box_ciou(b1, b2):
              """
              輸入為:
              ----------
              b1: tensor, shape=(batch, feat_w, feat_h, anchor_num, 4), xywh
              b2: tensor, shape=(batch, feat_w, feat_h, anchor_num, 4), xywh

              返回為:
              -------
              ciou: tensor, shape=(batch, feat_w, feat_h, anchor_num, 1)
              """

              # 求出預(yù)測(cè)框左上角右下角
              b1_xy = b1[..., :2]
              b1_wh = b1[..., 2:4]
              b1_wh_half = b1_wh/2.
              b1_mins = b1_xy - b1_wh_half
              b1_maxes = b1_xy + b1_wh_half
              # 求出真實(shí)框左上角右下角
              b2_xy = b2[..., :2]
              b2_wh = b2[..., 2:4]
              b2_wh_half = b2_wh/2.
              b2_mins = b2_xy - b2_wh_half
              b2_maxes = b2_xy + b2_wh_half

              # 求真實(shí)框和預(yù)測(cè)框所有的iou
              intersect_mins = torch.max(b1_mins, b2_mins)
              intersect_maxes = torch.min(b1_maxes, b2_maxes)
              intersect_wh = torch.max(intersect_maxes - intersect_mins, torch.zeros_like(intersect_maxes))
              intersect_area = intersect_wh[..., 0] * intersect_wh[..., 1]
              b1_area = b1_wh[..., 0] * b1_wh[..., 1]
              b2_area = b2_wh[..., 0] * b2_wh[..., 1]
              union_area = b1_area + b2_area - intersect_area
              iou = intersect_area / torch.clamp(union_area,min = 1e-6)

              # 計(jì)算中心的差距
              center_distance = torch.sum(torch.pow((b1_xy - b2_xy), 2), axis=-1)
              
              # 找到包裹兩個(gè)框的最小框的左上角和右下角
              enclose_mins = torch.min(b1_mins, b2_mins)
              enclose_maxes = torch.max(b1_maxes, b2_maxes)
              enclose_wh = torch.max(enclose_maxes - enclose_mins, torch.zeros_like(intersect_maxes))
              # 計(jì)算對(duì)角線距離
              enclose_diagonal = torch.sum(torch.pow(enclose_wh,2), axis=-1)
              ciou = iou - 1.0 * (center_distance) / torch.clamp(enclose_diagonal,min = 1e-6)
              
              v = (4 / (math.pi ** 2)) * torch.pow((torch.atan(b1_wh[..., 0]/torch.clamp(b1_wh[..., 1],min = 1e-6)) - torch.atan(b2_wh[..., 0]/torch.clamp(b2_wh[..., 1],min = 1e-6))), 2)
              alpha = v / torch.clamp((1.0 - iou + v),min=1e-6)
              ciou = ciou - alpha * v
              return ciou
            
          def clip_by_tensor(t,t_min,t_max):
              t=t.float()
              result = (t >= t_min).float() * t + (t < t_min).float() * t_min
              result = (result <= t_max).float() * result + (result > t_max).float() * t_max
              return result

          YOLOv5

          yolov5沒(méi)有發(fā)布論文,所以更加精細(xì)的內(nèi)容,只能研究其代碼,該代碼倉(cāng)庫(kù)仍然保持高頻率更新:https://github.com/ultralytics/yolov5

          YOLOv5 ?? 是一系列在 COCO 數(shù)據(jù)集上預(yù)訓(xùn)練的對(duì)象檢測(cè)架構(gòu)和模型,代表 Ultralytics 對(duì)未來(lái)視覺(jué) AI 方法的開(kāi)源研究,結(jié)合了在數(shù)千小時(shí)的研究和開(kāi)發(fā)中獲得的經(jīng)驗(yàn)教訓(xùn)和最佳實(shí)踐。

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

          YOLOv5給出了四種版本的目標(biāo)檢測(cè)網(wǎng)絡(luò),分別是Yolov5s、Yolov5m、Yolov5l、Yolov5x四個(gè)模型。YOLOv5s是深度最淺,特征圖的寬度最窄的網(wǎng)絡(luò),后面三種在此基礎(chǔ)上不斷加深,加寬。YOLOv5s的網(wǎng)絡(luò)結(jié)構(gòu)圖如下所示:

          YOLOv5s網(wǎng)絡(luò)架構(gòu)圖

          YOLOv5各部分改進(jìn)

          • 輸入端:Mosaic數(shù)據(jù)增強(qiáng)、自適應(yīng)錨框計(jì)算
          • Backbone:Focus結(jié)構(gòu),CSP結(jié)構(gòu)
          • Neck:FPN+PAN結(jié)構(gòu)
          • Prediction:GIOU_Loss

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

          YOLOV5會(huì)進(jìn)行三種數(shù)據(jù)增強(qiáng):縮放,色彩空間調(diào)整和馬賽克增強(qiáng)。其中馬賽克增強(qiáng)是通過(guò)將四張圖像進(jìn)行隨機(jī)縮放、隨機(jī)裁剪、隨機(jī)分布方式進(jìn)行拼接,小目標(biāo)的檢測(cè)效果得到提升。

          自適應(yīng)錨框計(jì)算

          YOLO系列中,可以針對(duì)數(shù)據(jù)集設(shè)置初始的Anchor。在網(wǎng)絡(luò)訓(xùn)練中,網(wǎng)絡(luò)在Anchor的基礎(chǔ)上輸出預(yù)測(cè)框,進(jìn)而和GT框進(jìn)行比較,計(jì)算loss,在反向更新,迭代網(wǎng)絡(luò)參數(shù)。在YOLOv3、4版本中,設(shè)置初始Anchor的大小都是通過(guò)單獨(dú)的程序使用K-means算法得到,但是在YOLOv5中,將此功能嵌入到代碼中,每次訓(xùn)練數(shù)據(jù)集之前,都會(huì)自動(dòng)計(jì)算該數(shù)據(jù)集最合適的Anchor尺寸,該功能可以在代碼中設(shè)置超參數(shù)進(jìn)行關(guān)閉。

          train.py中上面一行代碼,設(shè)置成False,每次訓(xùn)練時(shí),不會(huì)自動(dòng)計(jì)算。

          CSP BackBone-跨階段局部網(wǎng)絡(luò)

          YOLOv4 和 YOLOv5 都使用 CSPDarknet作為BackBone,從輸入圖像中提取豐富的特征信息。CSPNet叫做Cross Stage Partial Network,跨階段局部網(wǎng)絡(luò)。其解決了其他大型卷積網(wǎng)絡(luò)結(jié)構(gòu)中的重復(fù)梯度問(wèn)題,減少模型參數(shù)和FLOPS。這對(duì) YOLO 有重要的意義,即保證了推理速度和準(zhǔn)確率,又減小了模型尺寸。

          YOLOv4只有主干網(wǎng)絡(luò)中使用了CSP結(jié)構(gòu),而YOLOv5中設(shè)計(jì)了兩種CSP結(jié)構(gòu),CSP1_X應(yīng)用于BackBone主干網(wǎng)絡(luò),另一種CSP_2X結(jié)構(gòu)則應(yīng)用于Neck中。

          Focus結(jié)構(gòu)

          Focus結(jié)構(gòu),在Yolov3&Yolov4中并沒(méi)有這個(gè)結(jié)構(gòu),其中比較關(guān)鍵是切片操作。

          比如上圖的切片示意圖,的圖像切片后變成的特征圖。

          以Yolov5s的結(jié)構(gòu)為例,原始的圖像輸入Focus結(jié)構(gòu),采用切片操作,先變成的特征圖,再經(jīng)過(guò)一次32個(gè)卷積核的卷積操作,最終變成的特征圖。

          需要注意的是:Yolov5s的Focus結(jié)構(gòu)最后使用了32個(gè)卷積核,而其他三種結(jié)構(gòu),使用的卷積核數(shù)量有所增加。

          作者原話:Focus() module is designed for FLOPS reduction and speed increase, not mAP increase.

          作用:減少FLOPs,提高速度,對(duì)于模型的精度mAP沒(méi)有提升。

          Neck

          Yolov5現(xiàn)在的Neck和Yolov4中一樣,都采用FPN+PAN的結(jié)構(gòu),但在Yolov5剛出來(lái)時(shí),只使用了FPN結(jié)構(gòu),后面才增加了PAN結(jié)構(gòu),此外網(wǎng)絡(luò)中其他部分也進(jìn)行了調(diào)整。

          但如上面CSPNet結(jié)構(gòu)中講到,Yolov5和Yolov4的不同點(diǎn)在于,

          Yolov4的Neck結(jié)構(gòu)中,采用的都是普通的卷積操作。而Yolov5的Neck結(jié)構(gòu)中,采用借鑒CSPnet設(shè)計(jì)的CSP2_X結(jié)構(gòu),加強(qiáng)網(wǎng)絡(luò)特征融合的能力。

          Bounding Box的損失函數(shù)

          Yolov5中采用其中的GIOU_Loss做Bounding box的損失函數(shù)。而Yolov4中采用CIOU_Loss作為目標(biāo)Bounding box的損失。

          nms非極大值抑制

          在目標(biāo)檢測(cè)的后處理過(guò)程中,針對(duì)很多目標(biāo)框的篩選,通常需要nms操作。

          因?yàn)镃IOU_Loss中包含影響因子v,涉及groudtruth的信息,而測(cè)試推理時(shí),是沒(méi)有g(shù)roundtruth的。

          所以Yolov4在DIOU_Loss的基礎(chǔ)上采用DIOU_nms的方式,而Yolov5中采用加權(quán)nms的方式。

          采用DIOU_nms,對(duì)于遮擋問(wèn)題,檢出效果有所提升。

          在回歸框的損失函數(shù)和使用NMS刪除冗余預(yù)選框上,YOLOv4使用的方法要比v5的方法更有優(yōu)勢(shì)。

          參考鏈接

          1. https://www.yuque.com/darrenzhang/cv/tg215h
          2. http://arxiv.org/abs/2004.10934
          3. https://blog.csdn.net/nan355655600/article/details/106246625
          4. https://zhuanlan.zhihu.com/p/172121380
          5. https://www.zhihu.com/question/399884529

          百面計(jì)算機(jī)視覺(jué)匯總

          《百面計(jì)算機(jī)視覺(jué)匯總地址》

          點(diǎn)擊文末閱讀原文,跳轉(zhuǎn)到《百面第三版》Github地址,歡迎STAR!


          往期干貨文章

          面試必問(wèn)!| 1. ResNet手推及其相關(guān)變形~


          一文深入淺出cv中的Attention機(jī)制


          沒(méi)文章,沒(méi)背景,想做CV?那就按這個(gè)干!


          我丟!算法崗必問(wèn)!建議收藏!


          面試真題:Backbone不變,顯存有限,如何增大訓(xùn)練時(shí)的batchsize?

          - END -


          瀏覽 122
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日韩欧美午夜 | 欧美黄在线 | 麻豆久久| 人人草人| 苍井空一区二区三区无码 |