国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)

這篇具有很好參考價值的文章主要介紹了目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

目標(biāo)檢測概述

目標(biāo)檢測概述


什么是目標(biāo)檢測?
目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)


滑動窗口(Sliding Window)
目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)
目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)


滑動窗口的效率問題和改進(jìn)
滑動窗口的效率問題:計算成本很大

  • 改進(jìn)思路 1:使用啟發(fā)式算法替換暴力遍歷
    例如 R-CNN,F(xiàn)ast R-CNN 中使用 Selective Search 產(chǎn)生提議框 (區(qū)域提議
    依賴外部算法,系統(tǒng)實(shí)現(xiàn)復(fù)雜,難以聯(lián)合優(yōu)化性能
    目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)

  • 改進(jìn)思路 2:減少冗余計算,使用卷積網(wǎng)絡(luò)實(shí)現(xiàn)密集預(yù)測目前普遍采用的方式
    目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)
    改進(jìn)思路:用卷積一次性計算所有特征,再取出對應(yīng)位置的特征完成分類
    目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)
    原圖滑窗 ?? 重疊區(qū)域重復(fù)計算卷積 ?
    特征圖滑窗 ?? 重疊區(qū)域只計算一次卷積特征,與窗的個數(shù)無關(guān) ?


在特征圖上進(jìn)行密集預(yù)測
目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)


目標(biāo)檢測的基本范式
目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)

  • One Stage: YOLO系列
    輸出檢測框的左上角和右下角坐標(biāo) (x1,y1),(x2,y2)
    一個CNN網(wǎng)絡(luò)回歸預(yù)測即可
    目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)

  • Two Stage: Faster-rcnn Mask-Rcnn系列
    與one-stage 相比,多了一步提取候選框(預(yù)選)。
    目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)


目標(biāo)檢測技術(shù)的演進(jìn)
目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)

基礎(chǔ)知識和術(shù)語


框、邊界框(Bounding Box)

框泛指圖像上的矩形框,邊界橫平豎直
描述一個框需要 4 個像素值:
? 方式1:左上右下邊界坐標(biāo) ??,??, ??, ??
? 方式2:中心坐標(biāo)和框的長寬 ??, ??, ??, ?
邊界框通常指緊密包圍感興趣物體的框
檢測任務(wù)要求為圖中出現(xiàn)的每個物體預(yù)測一個邊界框
目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)
以下這些概念都指某種框,用在不同的上下文中:

  1. 區(qū)域(Region):框的同義詞
  2. 區(qū)域提議(Region Proposal,Proposal)
    指算法預(yù)測的可能包含物體的框,某種識別能力不強(qiáng)的算法的初步預(yù)測結(jié)果
  3. 感興趣區(qū)域(Region of Interest,RoI)
    當(dāng)我們談?wù)撔枰M(jìn)一步檢測這個框中是否有物體時,通常稱框?yàn)楦信d趣區(qū)域
  4. 錨框(Anchor Box,Anchor)
    圖中預(yù)設(shè)的一系列基準(zhǔn)框,類似滑窗,一些檢測算法會基于錨框預(yù)測邊界框

交并比 ( Intersection Over Union,IOU)
交并比(IoU)定義為兩矩形框交集面積與并集面積之比,是矩形框重合程度的衡量指標(biāo)
目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)


置信度(Confidence Score)
置信度(Confidence Score):模型認(rèn)可自身預(yù)測結(jié)果的程度,通常需要為每個框預(yù)測一個置信度
大部分算法取分類模型預(yù)測物體屬于特定類別的概率
部分算法讓模型獨(dú)立于分類單獨(dú)預(yù)測一個置信度
我們傾向認(rèn)可置信度高的預(yù)測結(jié)果
目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)


非極大值抑制(Non-Maximum Suppression,NMS)
滑窗類算法通常會在物體周圍給出多個相近的檢測框
這些框?qū)嶋H指向同一物體,只需要保留其中置信度最高的。
目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)

通過非極大值抑制(NMS)算法實(shí)現(xiàn):
目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)


邊界框回歸 (Bounding Box Regression)
問題:滑窗(或其他方式產(chǎn)生的基準(zhǔn)框)與物體精準(zhǔn)邊界通常有偏差。
目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)

處理方法:讓模型在預(yù)測物體類別同時預(yù)測邊界框相對于滑窗的偏移量。
目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)


邊界框編碼(Bbox Coding)
邊界框的絕對偏移量在數(shù)值上通常較大,不利于神經(jīng)網(wǎng)絡(luò)訓(xùn)練,通常需要對偏移量進(jìn)行編碼,作為回歸
模型的預(yù)測目標(biāo)
目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)


感受野
是特征圖上的點(diǎn)能看到原始圖像多大區(qū)域
目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)
感受野越大,越能感受全局的物體。
堆疊兩個 3 ? 3 3*3 3?3的卷積層,感受野是 5 ? 5 5*5 5?5。
堆疊三個 3 ? 3 3*3 3?3的卷積層,感受野是 7 ? 7 7*7 7?7。
目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)

為什么采用小卷積核的堆疊而不是直接采用一個大的卷積核來擴(kuò)大感受野呢?

目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)


準(zhǔn)確度和召回率
目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)
TP: 被正確(true)的判為正樣本(positive)的數(shù)目 (原來是正樣本)
FP: 被錯誤(false)的判為正樣本(positive)的數(shù)目(原來是負(fù)樣本)
FN: 被錯誤(true)的判為負(fù)樣本(negative)的數(shù)目 (原來是正樣本)
TN: 被正確(true)的判為負(fù)樣本(negative)的數(shù)目 (原來是負(fù)樣本)

Precision: 描述的是找對的概率
Recall: 描述的是找全的概率

一個比方:
假設(shè)在做一個多選題,一共6個選項分別是A~F,正確答案是ABCDE, 你選ABF。 答案中只有AB是對的,準(zhǔn)確率是2/3。但還有CDE沒有選,找全的比例是2/5.


AP 和mAP

一般來說,準(zhǔn)確率和找回率不能同時兼顧,一個高另一個就相對變低。
改變閾值(IOU大于一定的閾值,就被判為正樣本),可以得到不同的precision和recall, 然后做出presion - recall 的圖(一般叫做PR圖)
目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)
去上限求出與x軸圍成的陰影的面積就是AP的值。如上圖就是長方形A1,A2,A3,A4的面積之和。
對每個類別都計算出AP,求均值得到mAP


單階段和雙階段算法

  • 單階段算法
    目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)

  • 雙階段算法
    目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)

YOLOv1

論文:《You Only Look Once: Unified, Real-Time Object Detection》


概述

  • 經(jīng)典的one-stage方法
  • You Only Look Once,檢測速度很快
  • YOLO 的核心思想就是把目標(biāo)檢測轉(zhuǎn)變成一個回歸問題,利用整張圖作為網(wǎng)絡(luò)的輸入,僅僅經(jīng)過一個神經(jīng)網(wǎng)絡(luò),得到bounding box(邊界框) 的位置及其所屬的類別。

處理流程

  • 輸入數(shù)據(jù) 一張圖片
  • 然后把圖片分割成7*7的網(wǎng)格
  • 然后每個格子對應(yīng)兩個候選框(長寬是根據(jù)經(jīng)驗(yàn)得到
  • 真實(shí)值與候選框得到IOU
  • 選擇IOU大的那個候選框
  • 對選出來的候選框的長寬進(jìn)行微調(diào)
  • 預(yù)測的框的中心點(diǎn)坐標(biāo)(x,y),長寬w, h, 還有置信度(是物體的概率)
    目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)

網(wǎng)絡(luò)架構(gòu)
主干網(wǎng)絡(luò)(GoogleLeNet):輸入圖像resize到 448 ? 448 ? 3 448*448*3 448?448?3,經(jīng)過多次卷積得到 7 ? 7 ? 1024 7*7*1024 7?7?1024的特征圖。
檢測頭:然后全連接展開,第一個全連接得到4096個特征,第二個全連接得到1470個特征
再通過reshape 得到 7 ? 7 ? 30 7*7*30 7?7?30。(每張圖片的網(wǎng)格數(shù)是7*7的,每個格子對應(yīng)30個特征值,其中30個特征值的前10個是兩個候選框的值x,y,w,h,c,后面的20代表的是20個分類,即屬于每個類別的概率)

x,y,w,h表示的是歸一化后的值,是相對位置和大小

目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)
目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)


損失函數(shù):

目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)


優(yōu)缺點(diǎn)
(1)優(yōu)點(diǎn):

  1. YOLO檢測速度非???。標(biāo)準(zhǔn)版本的YOLO可以每秒處理 45 張圖像;YOLO的極速版本每秒可以處理150幀圖像。這就意味著 YOLO 可以以小于 25 毫秒延遲,實(shí)時地處理視頻。對于欠實(shí)時系統(tǒng),在準(zhǔn)確率保證的情況下,YOLO速度快于其他方法。
  2. YOLO 實(shí)時檢測的平均精度是其他實(shí)時監(jiān)測系統(tǒng)的兩倍。
  3. 遷移能力強(qiáng),能運(yùn)用到其他的新的領(lǐng)域(比如藝術(shù)品目標(biāo)檢測)。

(2)局限:

  1. YOLO對相互靠近的物體,以及很小的群體檢測效果不好,這是因?yàn)橐粋€網(wǎng)格只預(yù)測了2個框,并且都只屬于同一類。
  2. 由于損失函數(shù)的問題,定位誤差是影響檢測效果的主要原因,尤其是大小物體的處理上,還有待加強(qiáng)。(因?yàn)閷τ谛〉腷ounding boxes,small error影響更大)
    YOLO對不常見的角度的目標(biāo)泛化性能偏弱。

YOLOv2

論文:《YOLO9000: Better, Faster, Stronger》


概述
YOLOv2相對v1版本,在繼續(xù)保持處理速度的基礎(chǔ)上,從預(yù)測更準(zhǔn)確(Better),速度更快(Faster),識別對象更多(Stronger)這三個方面進(jìn)行了改進(jìn)。其中識別更多對象也就是擴(kuò)展到能夠檢測9000種不同對象,稱之為YOLO9000
文章提出了一種新的訓(xùn)練方法–聯(lián)合訓(xùn)練算法,這種算法可以把這兩種的數(shù)據(jù)集混合到一起。使用一種分層的觀點(diǎn)對物體進(jìn)行分類,用巨量的分類數(shù)據(jù)集數(shù)據(jù)來擴(kuò)充檢測數(shù)據(jù)集,從而把兩種不同的數(shù)據(jù)集混合起來。聯(lián)合訓(xùn)練算法的基本思路就是:同時在檢測數(shù)據(jù)集和分類數(shù)據(jù)集上訓(xùn)練物體檢測器(Object Detectors ),用檢測數(shù)據(jù)集的數(shù)據(jù)學(xué)習(xí)物體的準(zhǔn)確位置,用分類數(shù)據(jù)集的數(shù)據(jù)來增加分類的類別量、提升健壯性。
YOLO9000就是使用聯(lián)合訓(xùn)練算法訓(xùn)練出來的,他擁有9000類的分類信息,這些分類信息學(xué)習(xí)自ImageNet分類數(shù)據(jù)集,而物體位置檢測則學(xué)習(xí)自COCO檢測數(shù)據(jù)集。


改進(jìn)細(xì)節(jié)

  • 引入 Batch Normalizatioin
    批量歸一化有助于解決反向傳播過程中的梯度消失和梯度爆炸問題,降低對一些超參數(shù)(比如學(xué)習(xí)率、網(wǎng)絡(luò)參數(shù)的大小范圍、激活函數(shù)的選擇)的敏感性,并且每個batch分別進(jìn)行歸一化的時候,起到了一定的正則化效果(YOLOv2不再使用dropout),從而能夠獲得更好的收斂速度和收斂效果。
    使用Batch Normalization對網(wǎng)絡(luò)進(jìn)行優(yōu)化,讓網(wǎng)絡(luò)提高了收斂性,同時還消除了對其他形式的正則化(regularization)的依賴。通過對YOLOv2的每一個卷積層增加Batch Normalization,最終使得mAP提高了2%,同時還使model正則化。使用Batch Normalization可以從model中去掉Dropout,而不會產(chǎn)生過擬合。

  • 更大的分辨率
    用于圖像分類的訓(xùn)練樣本很多,而標(biāo)注了邊框的用于訓(xùn)練目標(biāo)檢測的樣本相比而言就少了很多,因?yàn)闃?biāo)注邊框的人工成本比較高。所以目標(biāo)檢測模型通常都先用圖像分類樣本訓(xùn)練卷積層,提取圖像特征,但這引出另一個問題,就是圖像分類樣本的分辨率不是很高。所以YOLOv1使用ImageNet的圖像分類樣本采用 224 ? 224 224*224 224?224 作為輸入,來訓(xùn)練CNN卷積層。然后在訓(xùn)練目標(biāo)檢測時,檢測用的圖像樣本采用更高分辨率的 448 ? 448 448*448 448?448 像素圖像作為輸入,但這樣不一致的輸入分辨率肯定會對模型性能有一定影響。
    所以YOLOv2在采用 224 ? 224 224*224 224?224 圖像進(jìn)行分類模型預(yù)訓(xùn)練后,再采用 448 ? 448 448*448 448?448 高分辨率樣本對分類模型進(jìn)行微調(diào)(10個epoch),使網(wǎng)絡(luò)特征逐漸適應(yīng) 448 ? 448 448*448 448?448 的分辨率。然后再使用 448 ? 448 448*448 448?448 的檢測樣本進(jìn)行訓(xùn)練,緩解了分辨率突然切換造成的影響,最終通過使用高分辨率,mAP提升了4%。

  • 采用先驗(yàn)框
    YOLOv1包含有全連接層,從而能直接預(yù)測Bounding Boxes的坐標(biāo)值。Faster R-CNN算法只用卷積層與Region Proposal Network來預(yù)測Anchor Box的偏移值與置信度,而不是直接預(yù)測坐標(biāo)值,YOLOv2作者發(fā)現(xiàn)通過預(yù)測偏移量而不是坐標(biāo)值能夠簡化問題,讓神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)起來更容易。
    借鑒Faster RCNN的做法,YOLOv2也嘗試采用先驗(yàn)框(anchor)。在每個grid預(yù)先設(shè)定一組不同大小和寬高比的邊框,來覆蓋整個圖像的不同位置和多種尺度,這些先驗(yàn)框作為預(yù)定義的候選區(qū)在神經(jīng)網(wǎng)絡(luò)中將檢測其中是否存在對象,以及微調(diào)邊框的位置。
    之前YOLOv1并沒有采用先驗(yàn)框,并且每個grid只預(yù)測兩個bounding box,也就是整個圖像只有98個bounding box。YOLOv2如果每個grid采用9個先驗(yàn)框,總共有13139=1521個先驗(yàn)框。所以最終YOLOv2去掉了全連接層,使用Anchor Boxes來預(yù)測 Bounding Boxes。作者去掉了網(wǎng)絡(luò)中一個Pooling層,這讓卷積層的輸出能有更高的分辨率,同時對網(wǎng)絡(luò)結(jié)構(gòu)進(jìn)行收縮讓其運(yùn)行在 416 ? 416 416*416 416?416而不是 448 ? 448 448*448 448?448。
    由于圖片中的物體都傾向于出現(xiàn)在圖片的中心位置,特別是那種比較大的物體,所以有一個單獨(dú)位于物體中心的位置用于預(yù)測這些物體。YOLOv2的卷積層采用32這個值來下采樣圖片,所以通過選擇 416 ? 416 416*416 416?416用作輸入尺寸最終能輸出一個 13 ? 13 13*13 13?13的Feature Map。使用Anchor Box會讓精確度稍微下降,但用了它能讓YOLOv2能預(yù)測出大于一千個框,同時recall達(dá)到88%,mAP達(dá)到69.2%。

  • Dimension clusters
    之前Anchor Box的尺寸是手動選擇的,所以尺寸還有優(yōu)化的余地。YOLOv2嘗試統(tǒng)計出更符合樣本中對象尺寸的先驗(yàn)框,這樣就可以減少網(wǎng)絡(luò)微調(diào)先驗(yàn)框到實(shí)際位置的難度。YOLOv2的做法是對訓(xùn)練集中標(biāo)注的邊框進(jìn)行K-means聚類分析,以尋找盡可能匹配樣本的邊框尺寸。如果我們用標(biāo)準(zhǔn)的歐式距離的k-means,尺寸大的框比小框產(chǎn)生更多的錯誤。因?yàn)槲覀兊哪康氖翘岣逫OU分?jǐn)?shù),這依賴于Box的大小,所以距離度量的使用:
    目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)
    其中,centroid是聚類時被選作中心的邊框,box就是其它邊框,d就是兩者間的“距離”,IOU越大,“距離”越近。YOLOv2給出的聚類分析結(jié)果如下圖所示,通過分析實(shí)驗(yàn)結(jié)果(Figure 2),在model復(fù)雜性與high recall之間權(quán)衡之后,選擇聚類分類數(shù)K=5。
    目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)

  • Direct location prediction
    用Anchor Box的方法,會讓model變得不穩(wěn)定,尤其是在最開始幾次迭代的時候。大多數(shù)不穩(wěn)定因素產(chǎn)生自預(yù)測Box的(x,y)位置的時候。按照之前YOLOv1的方法,網(wǎng)絡(luò)不會預(yù)測偏移量,而是根據(jù)YOLOv1中的網(wǎng)格單元的位置來直接預(yù)測坐標(biāo),這就讓Ground Truth的值介于0到1之間。而為了讓網(wǎng)絡(luò)的結(jié)果能落在這一范圍內(nèi),網(wǎng)絡(luò)使用一個 Logistic Activation來對于網(wǎng)絡(luò)預(yù)測結(jié)果進(jìn)行限制,讓結(jié)果介于0到1之間。 Yolov2網(wǎng)絡(luò)在每一個網(wǎng)格單元中預(yù)測出5個Bounding Boxes,每個Bounding Boxes有五個坐標(biāo)值tx,ty,tw,th,t0,他們的關(guān)系見下圖。假設(shè)一個網(wǎng)格單元對于圖片左上角的偏移量是cx,cy,Bounding Boxes Prior的寬度和高度是pw,ph,那么預(yù)測的結(jié)果見下圖右面的公式:
    目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)

  • Fine-Grained Features
    目標(biāo)檢測面臨的一個問題是圖像中的需要檢測的目標(biāo)會有大有小,輸入圖像經(jīng)過多層網(wǎng)絡(luò)提取特征,最后輸出的特征圖中(比如YOLOv2中輸入416416經(jīng)過卷積網(wǎng)絡(luò)下采樣最后輸出是1313),較小的對象可能特征已經(jīng)不明顯甚至被忽略掉了。為了更好的檢測出一些比較小的對象,最后輸出的特征圖需要保留一些更細(xì)節(jié)的信息。于是YOLOv2引入一種稱為passthrough層的方法在特征圖中保留一些細(xì)節(jié)信息。具體來說,就是在最后一個pooling之前,特征圖的大小是2626512,將其1拆4,直接傳遞(passthrough)到pooling后(并且又經(jīng)過一組卷積)的特征圖,兩者疊加到一起作為輸出的特征圖。
    目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)

具體怎樣將1個特征圖拆成4個特征圖,見下圖,圖中示例的是1個 4 ? 4 4*4 4?4拆成4個 2 ? 2 2*2 2?2,因?yàn)樯疃炔蛔?br>目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)

  • 多尺度訓(xùn)練
    作者希望YOLOv2能健壯的運(yùn)行于不同尺寸的圖片之上,所以把這一想法用于訓(xùn)練model中。區(qū)別于之前的補(bǔ)全圖片的尺寸的方法,YOLOv2每迭代幾次都會改變網(wǎng)絡(luò)參數(shù)。每10個Batch,網(wǎng)絡(luò)會隨機(jī)地選擇一個新的圖片尺寸,由于使用了下采樣參數(shù)是32,所以不同的尺寸大小也選擇為32的倍數(shù){320,352……608},最小320320,最大608608,網(wǎng)絡(luò)會自動改變尺寸,并繼續(xù)訓(xùn)練的過程。這一政策讓網(wǎng)絡(luò)在不同的輸入尺寸上都能達(dá)到一個很好的預(yù)測效果,同一網(wǎng)絡(luò)能在不同分辨率上進(jìn)行檢測。當(dāng)輸入圖片尺寸比較小的時候跑的比較快,輸入圖片尺寸比較大的時候精度高,所以你可以在YOLOv2的速度和精度上進(jìn)行權(quán)衡。

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

  • 主干網(wǎng)絡(luò)采用的是DarkNet19,實(shí)際輸入為 416 ? 416 416*416 416?416
  • 沒有FC層,5次降采樣(MaxPool),19個卷積層
  • 使用Batch Normilazation來讓訓(xùn)練更穩(wěn)定,加速收斂,使model規(guī)范化。
  • 使用Global Average Pooling

目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)


訓(xùn)練策略

  • 分類的訓(xùn)練策略
    網(wǎng)絡(luò)訓(xùn)練在 ImageNet 1000類分類數(shù)據(jù)集上訓(xùn)練了160epochs,使用隨機(jī)梯度下降,初始學(xué)習(xí)率為0.1, polynomial rate decay with a power of 4, weight decay of 0.0005 and momentum of 0.9 。訓(xùn)練期間使用標(biāo)準(zhǔn)的數(shù)據(jù)擴(kuò)大方法:隨機(jī)裁剪、旋轉(zhuǎn)、變換顏色(hue)、變換飽和度(saturation), 變換曝光度(exposure shifts)。在訓(xùn)練時,把整個網(wǎng)絡(luò)在更大的448*448分辨率上Fine Turnning 10個 epoches,初始學(xué)習(xí)率設(shè)置為0.001,這種網(wǎng)絡(luò)達(dá)到達(dá)到76.5%top-1精確度,93.3%top-5精確度。
  • 檢測的訓(xùn)練策略
    網(wǎng)絡(luò)去掉了最后一個卷積層,而加上了三個 3 ? 3 3*3 3?3卷積層,每個卷積層有1024個Filters,每個卷積層緊接著一個 1 ? 1 1*1 1?1卷積層。對于VOC數(shù)據(jù),網(wǎng)絡(luò)預(yù)測出每個網(wǎng)格單元預(yù)測五個Bounding Boxes,每個Bounding Boxes預(yù)測5個坐標(biāo)和20類,所以一共125個Filters,增加了Passthough層來獲取前面層的細(xì)粒度信息,網(wǎng)絡(luò)訓(xùn)練了160epoches,初始學(xué)習(xí)率0.001,數(shù)據(jù)擴(kuò)大方法相同,對COCO與VOC數(shù)據(jù)集的訓(xùn)練對策相同。

YOLOv3

論文:《YOLOv3: An Incremental Improvement》


簡介
V3最大的改進(jìn)就是網(wǎng)絡(luò)結(jié)構(gòu),使其更適合小目標(biāo)檢測
特征做的更細(xì)致,融入多持續(xù)特征圖信息來預(yù)測不同規(guī)格物體
先驗(yàn)框更豐富了,3種scale,每種3個規(guī)格,一共9種
softmax改進(jìn),預(yù)測多標(biāo)簽任務(wù)


改進(jìn)之處:

  • 多尺度預(yù)測
    為了能夠預(yù)測多尺度的目標(biāo),YOLOv3 選擇了三種不同shape的Anchors,同時每種Anchors具有三種不同的尺度,一共9種不同大小的Anchors。
    目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)
  • 特征金字塔網(wǎng)絡(luò)(feature parymid network,FPN)
    目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)
    如上圖,物體檢測算法可以分為三步:
    Backbone : 主干網(wǎng)絡(luò)提起特征
    基于常用預(yù)訓(xùn)練的Backbone,生成抽象的語義特征,再進(jìn)行特定任務(wù)微調(diào)。
    Backbone生成的特征,一般按stage劃分,分別記作C1、C2、C3、C4、C5、C6、C7等,其中的數(shù)字與stage的編號相同,代表的是分辨率減半的次數(shù),如C2代表stage2輸出的特征圖,分辨率為輸入圖片的1/4,C5代表,stage5輸出的特征圖,分辨率為輸入圖片的1/32。
    Neck : 頸部利用FPN進(jìn)行特征融合
    FPN一般將上一步生成的不同分辨率特征作為輸入,輸出經(jīng)過融合后的特征。輸出的特征一般以P作為編號標(biāo)記。如FPN的輸入是 C3、C4、C5、C6,經(jīng)過融合后,輸出為P3、P4、P5、P6。
    Head檢測頭利用融合的特征對物體進(jìn)行檢測。
    FPN輸出融合后的特征后,就可以輸入到檢測頭做具體的物體檢測。

如下,左圖是制作圖像金字塔,分別對于不同大小的圖片進(jìn)行預(yù)測。但速度較慢。
右圖是通過上采樣,不同大小的特征圖進(jìn)行融合。
目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)
借鑒特征金字塔網(wǎng)的思想,YOLOv3設(shè)計了3種不同尺度的網(wǎng)絡(luò)輸出Y1、Y2、Y3,目的是預(yù)測不同尺度的目標(biāo)。由于在每一個尺度網(wǎng)格都負(fù)責(zé)預(yù)測3個邊界框,且COCO數(shù)據(jù)集有80個類。所以網(wǎng)絡(luò)輸出的張量應(yīng)該是: N × N × [ 3 ? ( 4 + 1 + 80 ) ] N ×N ×[3?(4 + 1 + 80)] N×N×[3?(4+1+80)]。由下采樣次數(shù)不同,得到的N不同,最終Y1、Y2、Y3的shape分別為:[13, 13, 255]、[26, 26, 255]、[52, 52, 255]??梢妳⒁娫模?/p>

目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)

  • 殘差連接
    思想: 只用好的,不好的舍棄,不比原來差。

目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)

  • 先驗(yàn)框的設(shè)計
    也是通過聚類得到9個先驗(yàn)框。
    大的先驗(yàn)框交給1313, 中等交給2626,小的交給52*52。
    目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)
    目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)

  • 多標(biāo)簽分類
    YOLOv3在類別預(yù)測方面將YOLOv2的單標(biāo)簽分類改進(jìn)為多標(biāo)簽分類,在網(wǎng)絡(luò)結(jié)構(gòu)中將YOLOv2中用于分類的softmax層修改為邏輯分類器。在YOLOv2中,算法認(rèn)定一個目標(biāo)只從屬于一個類別,根據(jù)網(wǎng)絡(luò)輸出類別的得分最大值,將其歸為某一類。然而在一些復(fù)雜的場景中,單一目標(biāo)可能從屬于多個類別

比如在一個交通場景中,某目標(biāo)的種類既屬于汽車也屬于卡車,如果用softmax進(jìn)行分類,softmax會假設(shè)這個目標(biāo)只屬于一個類別,這個目標(biāo)只會被認(rèn)定為汽車或卡車,這種分類方法就稱為單標(biāo)簽分類。如果網(wǎng)絡(luò)輸出認(rèn)定這個目標(biāo)既是汽車也是卡車,這就被稱為多標(biāo)簽分類。

為實(shí)現(xiàn)多標(biāo)簽分類就需要用邏輯分類器來對每個類別都進(jìn)行二分類。邏輯分類器主要用到了sigmoid函數(shù),它可以把輸出約束在0到1,如果某一特征圖的輸出經(jīng)過該函數(shù)處理后的值大于設(shè)定閾值,那么就認(rèn)定該目標(biāo)框所對應(yīng)的目標(biāo)屬于該類。

目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)

  • 損失函數(shù)
    YOLOv3的損失函數(shù)表達(dá)式:
    目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)
    對比YOLOv1中的損失函數(shù)很容易知道:位置損失部分并沒有改變,仍然采用的是sum-square error的損失計算方法。但是置信度損失和類別預(yù)測均由原來的sum-square error改為了交叉熵的損失計算方法。對于類別以及置信度的預(yù)測,使用交叉熵的效果應(yīng)該更好

網(wǎng)絡(luò)結(jié)構(gòu)
借助殘差網(wǎng)絡(luò)的思想,YOLOv3 將原來的 darknet-19 改進(jìn)為darknet-53。
目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)
Darknet-53主要由1×1和3×3的卷積層組成,每個卷積層之后包含一個批量歸一化層和一個Leaky ReLU,加入這兩個部分的目的是為了防止過擬合。卷積層、批量歸一化層以及Leaky ReLU共同組成Darknet-53中的基本卷積單元DBL。因?yàn)樵贒arknet-53中共包含53個這樣的DBL,所以稱其為Darknet-53。

為了更加清晰地了解darknet-53的網(wǎng)絡(luò)結(jié)構(gòu),可以看下面這張圖:
目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)
圖上的組合單元的注釋如下:
DBL: 一個卷積層、一個批量歸一化層和一個Leaky ReLU組成的基本卷積單元。
res unit: 輸入通過兩個DBL后,再與原輸入進(jìn)行add;這是一種常規(guī)的殘差單元。殘差單元的目的是為了讓網(wǎng)絡(luò)可以提取到更深層的特征,同時避免出現(xiàn)梯度消失或爆炸。
resn: 其中的n表示n個res unit;所以 resn = Zero Padding + DBL + n × res unit 。
concat: 將darknet-53的中間層和后面的某一層的上采樣進(jìn)行張量拼接,達(dá)到多尺度特征融合的目的。這與殘差層的add操作是不一樣的,拼接會擴(kuò)充張量的維度,而add直接相加不會導(dǎo)致張量維度的改變。
Y1、Y2、Y3: 分別表示YOLOv3三種尺度的輸出。

Darknet53的主要改進(jìn)

  • 沒有采用最大池化層,轉(zhuǎn)而采用步長為2的卷積層進(jìn)行下采樣。
  • 去掉了全連接層
  • 為了防止過擬合,在每個卷積層之后加入了一個BN層和一個Leaky ReLU。
  • 引入了殘差網(wǎng)絡(luò)的思想,目的是為了讓網(wǎng)絡(luò)可以提取到更深層的特征,同時避免出現(xiàn)梯度消失或爆炸。
  • 將網(wǎng)絡(luò)的中間層和后面某一層的上采樣進(jìn)行張量拼接,達(dá)到多尺度特征融合的目的。
  • 網(wǎng)格大小有三種
    V1 中網(wǎng)格是 7 ? 7 7*7 7?7
    V2中網(wǎng)格是 13 ? 13 13*13 13?13
    V3中網(wǎng)格是 13 ? 13 13*13 13?13、 26 ? 26 26*26 26?26、 52 ? 52 52*52 52?52

YOLOv4


簡介

YOLOv4在傳統(tǒng)的YOLO基礎(chǔ)上,加入了這些實(shí)用的技巧,實(shí)現(xiàn)了檢測速度和精度的最佳權(quán)衡。實(shí)驗(yàn)表明,在Tesla V100上,對MS COCO數(shù)據(jù)集的實(shí)時檢測速度達(dá)到65 FPS,精度達(dá)到43.5%AP。

YOLOv4的獨(dú)到之處在于:

  • 是一個高效而強(qiáng)大的目標(biāo)檢測網(wǎng)咯。它使我們每個人都可以使用 GTX 1080Ti 或 2080Ti 的GPU來訓(xùn)練一個超快速和精確的目標(biāo)檢測器。
  • 在論文中,驗(yàn)證了大量先進(jìn)的技巧對目標(biāo)檢測性能的影響
  • 對當(dāng)前先進(jìn)的目標(biāo)檢測方法進(jìn)行了改進(jìn),使之更有效,并且更適合在單GPU上訓(xùn)練;這些改進(jìn)包括CBN、PAN、SAM等。

改進(jìn)方法

  • Mosaic 數(shù)據(jù)增強(qiáng)
    這是作者提出的一種新的數(shù)據(jù)增強(qiáng)方法,該方法借鑒了CutMix數(shù)據(jù)增強(qiáng)方式的思想。CutMix數(shù)據(jù)增強(qiáng)方式利用兩張圖片進(jìn)行拼接,但是Mosaic使利用四張圖片進(jìn)行拼接。如下圖所示:
    目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)
    Mosaic數(shù)據(jù)增強(qiáng)方法有一個優(yōu)點(diǎn):擁有豐富檢測目標(biāo)的背景,并且在BN計算的時候一次性會處理四張圖片。

  • SAT
    SAT是一種自對抗訓(xùn)練數(shù)據(jù)增強(qiáng)方法,這一種新的對抗性訓(xùn)練方式。在第一階段,神經(jīng)網(wǎng)絡(luò)改變原始圖像而不改變網(wǎng)絡(luò)權(quán)值。以這種方式,神經(jīng)網(wǎng)絡(luò)對自身進(jìn)行對抗性攻擊,改變原始圖像,以制造圖像上沒有所需對象的欺騙。在第二階段,用正常的方法訓(xùn)練神經(jīng)網(wǎng)絡(luò)去檢測目標(biāo)。

  • CmBN
    CmBN的全稱是Cross mini-Batch Normalization,定義為跨小批量標(biāo)準(zhǔn)化(CmBN)。CmBN 是 CBN 的改進(jìn)版本,它用來收集一個batch內(nèi)多個mini-batch內(nèi)的統(tǒng)計數(shù)據(jù)。BN、CBN和CmBN之間的區(qū)別具體如下圖所示:
    目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)

  • 修改過的SAM
    作者在原SAM(Spatial Attention Module)方法上進(jìn)行了修改,將SAM從空間注意修改為點(diǎn)注意。如下圖所示,對于常規(guī)的SAM,最大值池化層和平均池化層分別作用于輸入的feature map,得到兩組shape相同的feature map,再將結(jié)果輸入到一個卷積層,接著是一個 Sigmoid 函數(shù)來創(chuàng)建空間注意力。
    目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)
    在YOLOv4中,對原來的SAM方法進(jìn)行了修改。如下圖所示,修改后的SAM直接使用一個卷積層作用于輸入特征,得到輸出特征,然后再使用一個Sigmoid 函數(shù)來創(chuàng)建注意力。作者認(rèn)為,采用這種方式創(chuàng)建的是點(diǎn)注意力。
    目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)

  • 修改過的PAN
    作者對原PAN(Path Aggregation Network)方法進(jìn)行了修改, 使用**張量連接(concat)**代替了原來的快捷連接(shortcut connection)。如下圖所示:
    目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)


Tricks
作者將所有的Tricks可以分為兩類:
在不增加推理成本的前提下獲得更好的精度,而只改變訓(xùn)練策略或只增加訓(xùn)練成本的方法,作著稱之為 “免費(fèi)包”(Bag of freebies);
只增加少量推理成本但能顯著提高目標(biāo)檢測精度的插件模塊和后處理方法,稱之為特價包(Bag of specials)
下面分別對這兩類技巧進(jìn)行介紹。

  • 免費(fèi)包

    • 數(shù)據(jù)增強(qiáng)方法
      隨機(jī)縮放
      翻轉(zhuǎn)、旋轉(zhuǎn)
      圖像擾動、加噪聲、遮擋
      改變亮度、對比對、飽和度、色調(diào)
      隨機(jī)裁剪(random crop)
      隨機(jī)擦除(random erase)
      Cutout
      MixUp
      CutMix
      目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)

    • 正則化方法有:
      DropOut
      DropConnect
      DropBlock
      目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)

    • 回歸損失
      IOU 會存在梯度消失的問題
      目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)
      GIOU 引入閉包面積
      目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)
      DIOU引入中心點(diǎn)距離
      目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)
      CIOU引入長寬比
      目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)

  • 特價包

    • 增大感受野技巧:
      SPP
      ASPP
      RFB
    • 注意力機(jī)制:
      Squeeze-and-Excitation (SE)
      Spatial Attention Module (SAM)
    • 特征融合集成:
      FPN
      SFAM
      ASFF
      BiFPN (出自于大名鼎鼎的EfficientDet)
    • 更好的激活函數(shù):
      ReLU
      LReLU
      PReLU
      ReLU6
      SELU
      Swish
      hard-Swish
    • 后處理非極大值抑制算法:
      soft-NMS
      DIoU NMS
      目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)

網(wǎng)絡(luò)結(jié)構(gòu)
YOLOv4 = CSPDarknet53(主干) + SPP附加模塊(頸) + PANet路徑聚合(頸) + YOLOv3(頭部)
目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)

(1)CSPDarknet53

CSPNet來源于這篇論文:《CSPNET: A NEW BACKBONE THAT CAN ENHANCE LEARNING
CAPABILITY OF CNN》
CSPNet全稱是Cross Stage Partial Network,在2019年由Chien-Yao Wang等人提出,用來解決以往網(wǎng)絡(luò)結(jié)構(gòu)需要大量推理計算的問題。作者將問題歸結(jié)于網(wǎng)絡(luò)優(yōu)化中的重復(fù)梯度信息。CSPNet在ImageNet dataset和MS COCO數(shù)據(jù)集上有很好的測試效果,同時它易于實(shí)現(xiàn),在ResNet、ResNeXt和DenseNet網(wǎng)絡(luò)結(jié)構(gòu)上都能通用。

CSPNet的主要目的是能夠?qū)崿F(xiàn)更豐富的梯度組合,同時減少計算量。這個目標(biāo)是通過將基本層的特征圖分成兩部分,然后通過一個跨階段的層次結(jié)構(gòu)合并它們來實(shí)現(xiàn)的。
每一個block按照特征圖的channel維度拆分成兩部分 一份正常走網(wǎng)絡(luò),另一份直接concat到這個block的輸出
目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)

而在YOLOv4中,將原來的Darknet53結(jié)構(gòu)換為了CSPDarknet53,這在原來的基礎(chǔ)上主要進(jìn)行了兩項改變:

  • 將原來的Darknet53與CSPNet進(jìn)行結(jié)合。在前面的YOLOv3中,我們已經(jīng)了解了Darknet53的結(jié)構(gòu),它是由一系列殘差結(jié)構(gòu)組成。進(jìn)行結(jié)合后,CSPnet的主要工作就是將原來的殘差塊的堆疊進(jìn)行拆分,把它拆分成左右兩部分:主干部分繼續(xù)堆疊原來的殘差塊,支路部分則相當(dāng)于一個殘差邊,經(jīng)過少量處理直接連接到最后。

  • 使用MIsh激活函數(shù)代替了原來的Leaky ReLU。在YOLOv3中,每個卷積層之后包含一個批量歸一化層和一個Leaky ReLU。而在YOLOv4的主干網(wǎng)絡(luò)CSPDarknet53中,使用Mish代替了原來的Leaky ReLU。Leaky ReLU和Mish激活函數(shù)的公式與圖像如下:
    目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)

(2)SPP
SPP來源于這篇論文:《Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition》

SPP結(jié)構(gòu)又被稱為空間金字塔池化能將任意大小的特征圖轉(zhuǎn)換成固定大小的特征向量。
SPP主要解決兩個問題:
1)有效避免了對圖像區(qū)域裁剪、縮放操作導(dǎo)致的圖像失真等問題;
2)解決了卷積神經(jīng)網(wǎng)絡(luò)對圖相關(guān)重復(fù)特征提取的問題,大大提高了產(chǎn)生候選框的速度,且節(jié)省了計算成本。

輸入層:首先我們現(xiàn)在有一張任意大小的圖片,其大小為w * h。
輸出層:21個神經(jīng)元 ,即我們待會希望提取到21個特征。
分析如下圖所示:分別對1 * 1分塊,2 * 2分塊和4 * 4子圖里分別取每一個框內(nèi)的max值(即取藍(lán)框框內(nèi)的最大值),這一步就是作最大池化,這樣最后提取出來的特征值(即取出來的最大值)一共有1 * 1 + 2 * 2 + 4 * 4 = 21個。得出的特征再concat在一起。
目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)
目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)

在YOLOv4中,作者引入SPP,是因?yàn)樗@著地增加了感受野,分離出了最重要的上下文特征,并且?guī)缀醪粫档偷腨OLOv4運(yùn)行速度。
在YOLOv4中,具體的做法就是:分別利用四個不同尺度的最大池化對上層輸出的feature map進(jìn)行處理。最大池化的池化核大小分別為13x13、9x9、5x5、1x1,其中1x1就相當(dāng)于不處理。
(3)PANet
PANet源自論文:《Path Aggregation Network for Instance Segmentation》
目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)

下圖是PANet的示意圖,主要包含F(xiàn)PN、Bottom-up path augmentation、Adaptive feature pooling、Fully-connected fusion四個部分。

  • FPN發(fā)表于CVPR2017,主要是通過融合高低層特征提升目標(biāo)檢測的效果,尤其可以提高小尺寸目標(biāo)的檢測效果。
  • Bottom-up Path Augmentation的引入主要是考慮網(wǎng)絡(luò)淺層特征信息對于實(shí)例分割非常重要,因?yàn)闇\層特征一般是邊緣形狀等特征。
  • Adaptive Feature Pooling用來特征融合。也就是用每個ROI提取不同層的特征來做融合,這對于提升模型效果顯然是有利無害。
  • Fully-connected Fusion是針對原有的分割支路(FCN)引入一個前背景二分類的全連接支路,通過融合這兩條支路的輸出得到更加精確的分割結(jié)果。

在YOLOv4中,作者使用PANet代替YOLOv3中的FPN作為參數(shù)聚合的方法,針對不同的檢測器級別從不同的主干層進(jìn)行參數(shù)聚合。并且對原PANet方法進(jìn)行了修改, 使用張量連接(concat)代替了原來的捷徑連接(shortcut connection)。

(4) Yolov3 Head
在YOLOv4中,繼承了YOLOv3的Head進(jìn)行多尺度預(yù)測,提高了對不同size目標(biāo)的檢測性能。YOLOv3的完整結(jié)構(gòu)在上文已經(jīng)詳細(xì)介紹,下面我們截取了YOLOv3的Head進(jìn)行分析:
目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)
YOLOv4學(xué)習(xí)了YOLOv3的方式,采用三個不同層級的特征圖進(jìn)行融合,并且繼承了YOLOv3的Head。從上圖可以看出,在COCO數(shù)據(jù)集上訓(xùn)練時,YOLOv4的3個輸出張量的shape分別是:(19,19,225)、(38,38,255)、(76,76,225)。這是因?yàn)镃OCO有80個類別,并且每一個網(wǎng)格對應(yīng)3個Anchor boxes,而每個要預(yù)測的bounding box對應(yīng)的5個值, 所以有:3 x(80+5)=255 。

YOLOv5

yolov5源碼-github


簡介
YOLOv5是一種單階段目標(biāo)檢測算法,該算法在YOLOv4的基礎(chǔ)上添加了一些新的改進(jìn)思路,使其速度與精度都得到了極大的性能提升。主要的改進(jìn)思路如下所示:

  • 輸入端:在模型訓(xùn)練階段,提出了一些改進(jìn)思路,主要包括Mosaic數(shù)據(jù)增強(qiáng)、自適應(yīng)錨框計算、自適應(yīng)圖片縮放;
  • 基準(zhǔn)網(wǎng)絡(luò):融合其它檢測算法中的一些新思路,主要包括:Focus結(jié)構(gòu)與CSP結(jié)構(gòu);
  • Neck網(wǎng)絡(luò):目標(biāo)檢測網(wǎng)絡(luò)在BackBone與最后的Head輸出層之間往往會插入一些層,Yolov5中添加了FPN+PAN結(jié)構(gòu);
  • Head輸出層:輸出層的錨框機(jī)制與YOLOv4相同,主要改進(jìn)的是訓(xùn)練時的損失函數(shù)GIOU_Loss,以及預(yù)測框篩選的DIOU_nms。

網(wǎng)絡(luò)架構(gòu)
目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)
上圖展示了YOLOv5目標(biāo)檢測算法的整體框圖。對于一個目標(biāo)檢測算法而言,我們通??梢詫⑵鋭澐譃?個通用的模塊,具體包括:輸入端、基準(zhǔn)網(wǎng)絡(luò)、Neck網(wǎng)絡(luò)與Head輸出端,對應(yīng)于上圖中的4個紅色模塊。YOLOv5算法具有4個版本,具體包括:YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x四種,本文重點(diǎn)講解YOLOv5s,其它的版本都在該版本的基礎(chǔ)上對網(wǎng)絡(luò)進(jìn)行加深與加寬。

  • 輸入端-輸入端表示輸入的圖片。該網(wǎng)絡(luò)的輸入圖像大小為 608 ? 608 608*608 608?608,該階段通常包含一個圖像預(yù)處理階段,即將輸入圖像縮放到網(wǎng)絡(luò)的輸入大小,并進(jìn)行歸一化等操作。在網(wǎng)絡(luò)訓(xùn)練階段,YOLOv5使用Mosaic數(shù)據(jù)增強(qiáng)操作提升模型的訓(xùn)練速度和網(wǎng)絡(luò)的精度;并提出了一種自適應(yīng)錨框計算與自適應(yīng)圖片縮放方法。
  • Neck網(wǎng)絡(luò)-Neck網(wǎng)絡(luò)通常位于基準(zhǔn)網(wǎng)絡(luò)和頭網(wǎng)絡(luò)的中間位置,利用它可以進(jìn)一步提升特征的多樣性及魯棒性。雖然YOLOv5同樣用到了SPP模塊、FPN+PAN模塊,但是實(shí)現(xiàn)的細(xì)節(jié)有些不同。
  • Head輸出端-Head用來完成目標(biāo)檢測結(jié)果的輸出。針對不同的檢測算法,輸出端的分支個數(shù)不盡相同,通常包含一個分類分支和一個回歸分支。YOLOv5利用GIOU_Loss來代替Smooth L1 Loss函數(shù),從而進(jìn)一步提升算法的檢測精度。

YOLOv5的基礎(chǔ)組件

  • CBL-CBL模塊由Conv+BN+Leaky_relu激活函數(shù)組成,如上圖中的模塊1所示。
  • Res unit 借鑒ResNet網(wǎng)絡(luò)中的殘差結(jié)構(gòu),用來構(gòu)建深層網(wǎng)絡(luò),CBM是殘差模塊中的子模塊,如上圖中的模塊2所示。
  • CSP1_X借鑒CSPNet網(wǎng)絡(luò)結(jié)構(gòu),該模塊由CBL模塊、Res unint模塊以及卷積層、Concate組成而成,如上圖中的模塊3所示。
  • CSP2_X借鑒CSPNet網(wǎng)絡(luò)結(jié)構(gòu),該模塊由卷積層和X個Res unint模塊Concate組成而成,如上圖中的模塊4所示。
  • Focus如上圖中的模塊5所示,F(xiàn)ocus結(jié)構(gòu)首先將多個slice結(jié)果Concat起來,然后將其送入CBL模塊中。
    SPP-采用1×1、5×5、9×9和13×13的最大池化方式,進(jìn)行多尺度特征融合,如上圖中的模塊6所示。

輸入端細(xì)節(jié)詳解

  • Mosaic數(shù)據(jù)增強(qiáng) YOLOv5中在訓(xùn)練模型階段仍然使用了Mosaic數(shù)據(jù)增強(qiáng)方法,該算法是在CutMix數(shù)據(jù)增強(qiáng)方法的基礎(chǔ)上改進(jìn)而來的。CutMix僅僅利用了兩張圖片進(jìn)行拼接,而Mosaic數(shù)據(jù)增強(qiáng)方法則采用了4張圖片,并且按照隨機(jī)縮放、隨機(jī)裁剪和隨機(jī)排布的方式進(jìn)行拼接而成,具體的效果如下圖所示。這種增強(qiáng)方法可以將幾張圖片組合成一張,這樣不僅可以豐富數(shù)據(jù)集的同時極大的提升網(wǎng)絡(luò)的訓(xùn)練速度,而且可以降低模型的內(nèi)存需求。
    目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)
  • 自適應(yīng)錨框計算-在YOLOv5系列算法中,針對不同的數(shù)據(jù)集,都需要設(shè)定特定長寬的錨點(diǎn)框。在網(wǎng)絡(luò)訓(xùn)練階段,模型在初始錨點(diǎn)框的基礎(chǔ)上輸出對應(yīng)的預(yù)測框,計算其與GT框之間的差距,并執(zhí)行反向更新操作,從而更新整個網(wǎng)絡(luò)的參數(shù),因此設(shè)定初始錨點(diǎn)框也是比較關(guān)鍵的一環(huán)。在YOLOv3和YOLOv4檢測算法中,訓(xùn)練不同的數(shù)據(jù)集時,都是通過單獨(dú)的程序運(yùn)行來獲得初始錨點(diǎn)框。YOLOv5中將此功能嵌入到代碼中,每次訓(xùn)練時,根據(jù)數(shù)據(jù)集的名稱自適應(yīng)的計算出最佳的錨點(diǎn)框,用戶可以根據(jù)自己的需求將功能關(guān)閉或者打開,具體的指令為parser.add_argument(’–noautoanchor’, action=‘store_ true’, help=‘disable autoanchor check’),如果需要打開,只需要在訓(xùn)練代碼時增加–noautoanch or選項即可。
  • 自適應(yīng)圖片縮放-針對不同的目標(biāo)檢測算法而言,我們通常需要執(zhí)行圖片縮放操作,即將原始的輸入圖片縮放到一個固定的尺寸,再將其送入檢測網(wǎng)絡(luò)中。YOLO系列算法中常用的尺寸包括416*416,608 *608等尺寸。原始的縮放方法存在著一些問題,由于在實(shí)際的使用中的很多圖片的長寬比不同,因此縮放填充之后,兩端的黑邊大小都不相同,然而如果填充的過多,則會存在大量的信息冗余,從而影響整個算法的推理速度。為了進(jìn)一步提升YOLOv5算法的推理速度,該算法提出一種方法能夠自適應(yīng)的添加最少的黑邊到縮放之后的圖片中。
    為了應(yīng)對輸入圖片尺寸 不一的問題,通常做法是將原圖直接resize成統(tǒng)一大小,但是這樣會造成目標(biāo)變形,如下圖所示:
    目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)
    為了避免這種情況的發(fā)生,YOLOv5采用了灰度填充的方式統(tǒng)一輸入尺寸,避免了目標(biāo)變形的問題?;叶忍畛涞暮诵乃枷刖褪?strong>將原圖的長寬等比縮放對應(yīng)統(tǒng)一尺寸,然后對于空白部分用灰色填充。如下圖所示:
    目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)

基準(zhǔn)網(wǎng)絡(luò)詳解

  • Focus結(jié)構(gòu)-該結(jié)構(gòu)的主要思想是通過slice操作來對輸入圖片進(jìn)行裁剪。如下圖所示,原始輸入圖片大小為6086083,經(jīng)過Slice與Concat操作之后輸出一個30430412的特征映射;接著經(jīng)過一個通道個數(shù)為32的Conv層(該通道個數(shù)僅僅針對的是YOLOv5s結(jié)構(gòu),其它結(jié)構(gòu)會有相應(yīng)的變化),輸出一個30430432大小的特征映射。
    目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)
  • CSP結(jié)構(gòu)-YOLOv4網(wǎng)絡(luò)結(jié)構(gòu)中,借鑒了CSPNet的設(shè)計思路,僅僅在主干網(wǎng)絡(luò)中設(shè)計了CSP結(jié)構(gòu)。而YOLOv5中設(shè)計了兩種CSP結(jié)構(gòu),以YOLOv5s網(wǎng)絡(luò)為例,CSP1_X結(jié)構(gòu)應(yīng)用于Backbone主干網(wǎng)絡(luò)中,另一種CSP2_X結(jié)構(gòu)則應(yīng)用于Neck網(wǎng)絡(luò)中

Neck網(wǎng)絡(luò)細(xì)節(jié)詳解

FPN+PAN-YOLOv5的Neck網(wǎng)絡(luò)仍然使用了FPN+PAN結(jié)構(gòu),但是在它的基礎(chǔ)上做了一些改進(jìn)操作,YOLOv4的Neck結(jié)構(gòu)中,采用的都是普通的卷積操作。而YOLOv5的Neck網(wǎng)絡(luò)中,采用借鑒CSPnet設(shè)計的CSP2結(jié)構(gòu),從而加強(qiáng)網(wǎng)絡(luò)特征融合能力。下圖展示了YOLOv4與YOLOv5的Neck網(wǎng)絡(luò)的具體細(xì)節(jié),通過比較我們可以發(fā)現(xiàn):
(1)灰色區(qū)域表示第1個不同點(diǎn),YOLOv5不僅利用CSP2_1結(jié)構(gòu)代替部分CBL模塊,而且去掉了下方的CBL模塊;
(2)綠色區(qū)域表示第2個不同點(diǎn),YOLOv5不僅將Concat操作之后的CBL模塊更換為CSP2_1模塊,而且更換了另外一個CBL模塊的位置;
(3)藍(lán)色區(qū)域表示第3個不同點(diǎn),YOLOv5中將原始的CBL模塊更換為CSP2_1模塊。

目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)

YOLOx

論文:《YOLOX: Exceeding YOLO Series in 2021》
代碼:Megvii-BaseDetection/YOLOX


簡介
YOLOx是由曠視提出,主要有如下幾個改進(jìn)點(diǎn):

  • Decoupled Head:以前版本的Yolo所用的解耦頭是一起的,也就是分類和回歸在一個1X1卷積里實(shí)現(xiàn),YoloX認(rèn)為這給網(wǎng)絡(luò)的識別帶來了不利影響。在YoloX中,Yolo Head被分為了兩部分,分別實(shí)現(xiàn),最后預(yù)測的時候才整合在一起。
  • Anchor Free:不使用先驗(yàn)框。
  • SimOTA :為不同大小的目標(biāo)動態(tài)匹配正樣本。

YOLOx的網(wǎng)絡(luò)結(jié)構(gòu)
在設(shè)計算法時,為了對比改進(jìn)trick的好壞,常常需要選擇基準(zhǔn)的模型算法。在選擇Yolox的基準(zhǔn)模型時,作者考慮到:Yolov4和Yolov5系列,從基于錨框的算法角度來說,可能有一些過度優(yōu)化 ,因此最終選擇了Yolov3系列。
不過也并沒有直接選擇Yolov3系列中標(biāo)準(zhǔn)的Yolov3算法,而是選擇添加了spp組件,性能更優(yōu)的Yolov3_spp版本 。我們在前面知道,當(dāng)?shù)玫結(jié)olov3 baseline后,作者又添加了一系列的trick,最終改進(jìn)為Yolox-Darknet53網(wǎng)絡(luò)結(jié)構(gòu)。
目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)
為了便于分析改進(jìn)點(diǎn),我們對Yolox-Darknet53網(wǎng)絡(luò)結(jié)構(gòu)進(jìn)行拆分,變?yōu)樗膫€板塊:
① 輸入端 :Strong augmentation數(shù)據(jù)增強(qiáng)
② BackBone主干網(wǎng)絡(luò) :Darknet53。
③ Neck :Yolov3 baseline的Neck層還是FPN結(jié)構(gòu)。
④ Prediction :Decoupled Head、End-to-End YOLO、Anchor-free、Multi positives。


解耦頭(Decoupled Head)
目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)

  • 為什么采用解耦頭?
    論文作者在實(shí)驗(yàn)中發(fā)現(xiàn),不單單是精度上的提高,替換為Decoupled Head后,網(wǎng)絡(luò)的收斂速度也加快了 。
    因此可以得到一個非常關(guān)鍵的結(jié)論:目前Yolo系列使用的檢測頭,表達(dá)能力可能有所欠缺,沒有Decoupled Head的表達(dá)能力更好。
    但是需要注意的是:將檢測頭解耦,雖然可以加快模型的收斂速度,但同時會增加運(yùn)算的復(fù)雜度。
    因此作者經(jīng)過速度和性能上的權(quán)衡,最終使用 1個1x1 的卷積先進(jìn)行降維,并在后面兩個分支里,各使用了 2個3x3 卷積,最終調(diào)整到僅僅增加一點(diǎn)點(diǎn)的網(wǎng)絡(luò)參數(shù)。

  • 解耦頭的設(shè)計細(xì)節(jié)
    目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)
    我們將Yolox-Darknet53中,Decoupled Head①提取出來,經(jīng)過前面的Neck層,這里Decouple Head①輸入的長寬為20*20。
    從圖上可以看出,Concat前總共有三個分支 :
    (1)cls_output:主要對目標(biāo)框的類別,預(yù)測分?jǐn)?shù) 。因?yàn)镃OCO數(shù)據(jù)集總共有80個類別,且主要是N個二分類判斷,因此經(jīng)過Sigmoid激活函數(shù)處理后,變?yōu)?0*20*80大小。
    (2)obj_output:主要判斷目標(biāo)框是前景還是背景 ,因此經(jīng)過Sigmoid處理好,變?yōu)?0*20*1大小。
    (3)reg_output:主要對目標(biāo)框的坐標(biāo)信息(x,y,w,h)進(jìn)行預(yù)測 ,因此大小為20*20*4。
    最后三個output,經(jīng)過Concat融合到一起,得到20*20*85的特征信息。
    當(dāng)然,這只是Decoupled Head①的信息,再對Decoupled Head②和③進(jìn)行處理。


Anchor-Free
Yolox 將 Anchor free 的方式引入到Y(jié)olo系列中,使用anchor free方法有如下好處:
(1) 降低了計算量,不涉及IoU計算,另外產(chǎn)生的預(yù)測框數(shù)量也更少。
假設(shè) feature map的尺度為 80 × 80,anchor based 方法在Feature Map上,每個單元格一般設(shè)置三個不同尺寸大小的錨框,因此產(chǎn)生 3 × 80 × 80 = 19200 個預(yù)測框。而使用anchor free的方法,則僅產(chǎn)生 80 × 80 = 6400個預(yù)測框,降低了計算量。
(2) 緩解了正負(fù)樣本不平衡問題
anchor free方法的預(yù)測框只有anchor based方法的1/3,而預(yù)測框中大部分是負(fù)樣本,因此anchor free方法可以減少負(fù)樣本數(shù),進(jìn)一步緩解了正負(fù)樣本不平衡問題。
(3) 避免了anchor的調(diào)參
anchor based方法的anchor box的尺度是一個超參數(shù),不同的超參設(shè)置會影響模型性能,anchor free方法避免了這一點(diǎn)。


損失計算


正負(fù)樣本匹配策略SimOTA

YOLOv6


簡介
YOLOv6 是美團(tuán)視覺智能部研發(fā)的一款目標(biāo)檢測框架,致力于工業(yè)應(yīng)用。本框架同時專注于檢測的精度和推理效率,在工業(yè)界常用的尺寸模型中:YOLOv6-nano 在 COCO 上精度可達(dá) 35.0% AP,在 T4 上推理速度可達(dá) 1242 FPS;YOLOv6-s 在 COCO 上精度可達(dá) 43.1% AP,在 T4 上推理速度可達(dá) 520 FPS。在部署方面,YOLOv6 支持 GPU(TensorRT)、CPU(OPENVINO)、ARM(MNN、TNN、NCNN)等不同平臺的部署,極大地簡化工程部署時的適配工作。

YOLOv6 主要在 Backbone、Neck、Head 以及訓(xùn)練策略等方面進(jìn)行了諸多的改進(jìn):

  • 統(tǒng)一設(shè)計了更高效的 Backbone 和 Neck :受到硬件感知神經(jīng)網(wǎng)絡(luò)設(shè)計思想的啟發(fā),基于 RepVGG style設(shè)計了可重參數(shù)化、更高效的骨干網(wǎng)絡(luò) EfficientRep Backbone 和 Rep-PAN Neck。
  • 優(yōu)化設(shè)計了更簡潔有效的 Efficient Decoupled Head,在維持精度的同時,進(jìn)一步降低了一般解耦頭帶來的額外延時開銷。
  • 在訓(xùn)練策略上,我們采用Anchor-free 無錨范式,同時輔以 SimOTA標(biāo)簽分配策略以及 SIoU邊界框回歸損失來進(jìn)一步提高檢測精度。

Hardware-friendly 骨干網(wǎng)絡(luò)設(shè)計
YOLOv5/YOLOX 使用的 Backbone 和 Neck 都基于 CSPNet搭建,采用了多分支的方式和殘差結(jié)構(gòu)。對于 GPU 等硬件來說,這種結(jié)構(gòu)會一定程度上增加延時,同時減小內(nèi)存帶寬利用率。下圖為計算機(jī)體系結(jié)構(gòu)領(lǐng)域中的 Roofline Model介紹圖,顯示了硬件中計算能力和內(nèi)存帶寬之間的關(guān)聯(lián)關(guān)系。
目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)
于是,我們基于硬件感知神經(jīng)網(wǎng)絡(luò)設(shè)計的思想,對 Backbone 和 Neck 進(jìn)行了重新設(shè)計和優(yōu)化。該思想基于硬件的特性、推理框架/編譯框架的特點(diǎn),以硬件和編譯友好的結(jié)構(gòu)作為設(shè)計原則,在網(wǎng)絡(luò)構(gòu)建時,綜合考慮硬件計算能力、內(nèi)存帶寬、編譯優(yōu)化特性、網(wǎng)絡(luò)表征能力等,進(jìn)而獲得又快又好的網(wǎng)絡(luò)結(jié)構(gòu)。對上述重新設(shè)計的兩個檢測部件,我們在 YOLOv6 中分別稱為 EfficientRep BackboneRep-PAN Neck,其主要貢獻(xiàn)點(diǎn)在于:

  • 引入了 RepVGG style 結(jié)構(gòu)?;谟布兄枷胫匦略O(shè)計了 Backbone 和 Neck。
  • 基于硬件感知思想重新設(shè)計了 Backbone 和 Neck。

RepVGG Style 結(jié)構(gòu)是一種在訓(xùn)練時具有多分支拓?fù)?,而在?shí)際部署時可以等效融合為單個 3x3 卷積的一種可重參數(shù)化的結(jié)構(gòu)(融合過程如下圖所示)。通過融合成的 3x3 卷積結(jié)構(gòu),可以有效利用計算密集型硬件計算能力(比如 GPU),同時也可獲得 GPU/CPU 上已經(jīng)高度優(yōu)化的 NVIDIA cuDNN 和 Intel MKL 編譯框架的幫助。

實(shí)驗(yàn)表明,通過上述策略,YOLOv6 減少了在硬件上的延時,并顯著提升了算法的精度,讓檢測網(wǎng)絡(luò)更快更強(qiáng)。以 nano 尺寸模型為例,對比 YOLOv5-nano 采用的網(wǎng)絡(luò)結(jié)構(gòu),本方法在速度上提升了21%,同時精度提升 3.6% AP。

目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)

EfficientRep Backbone:在 Backbone 設(shè)計方面,我們基于以上 Rep 算子設(shè)計了一個高效的Backbone。相比于 YOLOv5 采用的 CSP-Backbone,該 Backbone 能夠高效利用硬件(如 GPU)算力的同時,還具有較強(qiáng)的表征能力。
下圖為 EfficientRep Backbone 具體設(shè)計結(jié)構(gòu)圖,我們將 Backbone 中 stride=2 的普通 Conv 層替換成了 stride=2 的 RepConv層。同時,將原始的 CSP-Block 都重新設(shè)計為 RepBlock,其中 RepBlock 的第一個 RepConv 會做 channel 維度的變換和對齊。另外,我們還將原始的 SPPF 優(yōu)化設(shè)計為更加高效的 SimSPPF。

目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)

Rep-PAN:在 Neck 設(shè)計方面,為了讓其在硬件上推理更加高效,以達(dá)到更好的精度與速度的平衡,我們基于硬件感知神經(jīng)網(wǎng)絡(luò)設(shè)計思想,為 YOLOv6 設(shè)計了一個更有效的特征融合網(wǎng)絡(luò)結(jié)構(gòu)。
Rep-PAN 基于 PAN拓?fù)浞绞?,?RepBlock 替換了 YOLOv5 中使用的 CSP-Block,同時對整體 Neck 中的算子進(jìn)行了調(diào)整,目的是在硬件上達(dá)到高效推理的同時,保持較好的多尺度特征融合能力(Rep-PAN 結(jié)構(gòu)圖如下圖所示)。
目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)


解耦檢測頭(Decoupled Head)
在 YOLOv6 中,我們采用了解耦檢測頭(Decoupled Head)結(jié)構(gòu),并對其進(jìn)行了精簡設(shè)計。原始 YOLOv5 的檢測頭是通過分類和回歸分支融合共享的方式來實(shí)現(xiàn)的,而 YOLOX 的檢測頭則是將分類和回歸分支進(jìn)行解耦,同時新增了兩個額外的 3x3 的卷積層,雖然提升了檢測精度,但一定程度上增加了網(wǎng)絡(luò)延時。
因此,我們對解耦頭進(jìn)行了精簡設(shè)計,同時綜合考慮到相關(guān)算子表征能力和硬件上計算開銷這兩者的平衡,采用 Hybrid Channels 策略重新設(shè)計了一個更高效的解耦頭結(jié)構(gòu),在維持精度的同時降低了延時,緩解了解耦頭中 3x3 卷積帶來的額外延時開銷。通過在 nano 尺寸模型上進(jìn)行消融實(shí)驗(yàn),對比相同通道數(shù)的解耦頭結(jié)構(gòu),精度提升 0.2% AP 的同時,速度提升6.8%。

目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)


訓(xùn)練策略
為了進(jìn)一步提升檢測精度,我們吸收借鑒了學(xué)術(shù)界和業(yè)界其他檢測框架的先進(jìn)研究進(jìn)展:Anchor-free 無錨范式 、SimOTA 標(biāo)簽分配策略以及 SIoU 邊界框回歸損失。

  • Anchor-free 無錨范式
    YOLOv6 采用了更簡潔的 Anchor-free 檢測方法。由于 Anchor-based檢測器需要在訓(xùn)練之前進(jìn)行聚類分析以確定最佳 Anchor 集合,這會一定程度提高檢測器的復(fù)雜度;同時,在一些邊緣端的應(yīng)用中,需要在硬件之間搬運(yùn)大量檢測結(jié)果的步驟,也會帶來額外的延時。而 Anchor-free 無錨范式因其泛化能力強(qiáng),解碼邏輯更簡單,在近幾年中應(yīng)用比較廣泛。經(jīng)過對 Anchor-free 的實(shí)驗(yàn)調(diào)研,我們發(fā)現(xiàn),相較于Anchor-based 檢測器的復(fù)雜度而帶來的額外延時,Anchor-free 檢測器在速度上有51%的提升。

  • SimOTA 標(biāo)簽分配策略
    為了獲得更多高質(zhì)量的正樣本,YOLOv6 引入了 SimOTA算法動態(tài)分配正樣本,進(jìn)一步提高檢測精度。YOLOv5 的標(biāo)簽分配策略是基于 Shape 匹配,并通過跨網(wǎng)格匹配策略增加正樣本數(shù)量,從而使得網(wǎng)絡(luò)快速收斂,但是該方法屬于靜態(tài)分配方法,并不會隨著網(wǎng)絡(luò)訓(xùn)練的過程而調(diào)整。
    近年來,也出現(xiàn)不少基于動態(tài)標(biāo)簽分配的方法,此類方法會根據(jù)訓(xùn)練過程中的網(wǎng)絡(luò)輸出來分配正樣本,從而可以產(chǎn)生更多高質(zhì)量的正樣本,繼而又促進(jìn)網(wǎng)絡(luò)的正向優(yōu)化。例如,OTA通過將樣本匹配建模成最佳傳輸問題,求得全局信息下的最佳樣本匹配策略以提升精度,但 OTA 由于使用了Sinkhorn-Knopp 算法導(dǎo)致訓(xùn)練時間加長,而 SimOTA算法使用 Top-K 近似策略來得到樣本最佳匹配,大大加快了訓(xùn)練速度。故 YOLOv6 采用了SimOTA 動態(tài)分配策略,并結(jié)合無錨范式,在 nano 尺寸模型上平均檢測精度提升 1.3% AP。

  • SIoU 邊界框回歸損失
    為了進(jìn)一步提升回歸精度,YOLOv6 采用了 SIoU邊界框回歸損失函數(shù)來監(jiān)督網(wǎng)絡(luò)的學(xué)習(xí)。目標(biāo)檢測網(wǎng)絡(luò)的訓(xùn)練一般需要至少定義兩個損失函數(shù):分類損失和邊界框回歸損失,而損失函數(shù)的定義往往對檢測精度以及訓(xùn)練速度產(chǎn)生較大的影響。
    近年來,常用的邊界框回歸損失包括IoU、GIoU、CIoU、DIoU loss等等,這些損失函數(shù)通過考慮預(yù)測框與目標(biāo)框之前的重疊程度、中心點(diǎn)距離、縱橫比等因素來衡量兩者之間的差距,從而指導(dǎo)網(wǎng)絡(luò)最小化損失以提升回歸精度,但是這些方法都沒有考慮到預(yù)測框與目標(biāo)框之間方向的匹配性。SIoU 損失函數(shù)通過引入了所需回歸之間的向量角度,重新定義了距離損失,有效降低了回歸的自由度,加快網(wǎng)絡(luò)收斂,進(jìn)一步提升了回歸精度。通過在 YOLOv6s 上采用 SIoU loss 進(jìn)行實(shí)驗(yàn),對比 CIoU loss,平均檢測精度提升 0.3% AP。

YOLOv7


簡介
我們先整體來看下 YOLOV7,首先對輸入的圖片 resize 為 640x640 大小,輸入到 backbone 網(wǎng)絡(luò)中,然后經(jīng) head 層網(wǎng)絡(luò)輸出三層不同 size 大小的 feature map,經(jīng)過 Rep 和 conv輸出預(yù)測結(jié)果,這里以 coco 為例子,輸出為 80 個類別,然后每個輸出(x ,y, w, h, o) 即坐標(biāo)位置和前后背景,3 是指的 anchor 數(shù)量,因此每一層的輸出為 (80+5)x3 = 255再乘上 feature map 的大小就是最終的輸出了。
目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)


主干網(wǎng)絡(luò)
YOLOV7 的 backbone 如下圖所示,總共有50層。
目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)
首先是經(jīng)過 4 層卷積層,如下圖,CBS 主要是 Conv + BN + SiLU 構(gòu)成,我在圖中用不同的顏色表示不同的 size 和 stride, 如 (3, 2) 表示卷積核大小為 3 ,步長為 2。 在 config 中的配置如圖。
目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)
經(jīng)過 4個 CBS 后,特征圖變?yōu)?span id="n5n3t3z" class="katex--inline"> 160 ? 160 ? 128 160 * 160 * 128 160?160?128 大小。隨后會經(jīng)過論文中提出的 ELAN 模塊,ELAN 由多個 CBS 構(gòu)成,其輸入輸出特征大小保持不變,通道數(shù)在開始的兩個 CBS 會有變化, 后面的幾個輸入通道都是和輸出通道保持一致的,經(jīng)過最后一個 CBS 輸出為需要的通道。
目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)
MP 層 主要是分為 Maxpool 和 CBS , 其中 MP1 和 MP2 主要是通道數(shù)的比變化。
目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)
backbone的基本組件就介紹完了,我們整體來看下 backbone,經(jīng)過 4 個 CBS 后,接入例如一個 ELAN ,然后后面就是三個 MP + ELAN 的輸出,對應(yīng)的就是 C3/C4/C5 的輸出,大小分別為 80 * 80 * 512 , 40 * 40 * 1024, 20 * 20 * 1024。 每一個 MP 由 5 層, ELAN 有 8 層, 所以整個 backbone 的層數(shù)為 4 + 8 + 13 * 3 = 51 層, 從 0 開始的話,最后一層就是第 50 層。


檢測頭
目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)
YOLOV7 head 其實(shí)就是一個 PaFPN 的結(jié)構(gòu),和之前的YOLOV4,YOLOV5 一樣。首先,對于 backbone 最后輸出的 32 倍降采樣特征圖 C5,然后經(jīng)過 SPPCSP,通道數(shù)從1024變?yōu)?12。先按照 top down 和 C4、C3融合,得到 P3、P4 和 P5;再按 bottom-up 去和 P4、P5 做融合。這里基本和 YOLOV5 是一樣的,區(qū)別在于將 YOLOV5 中的 CSP 模塊換成了 ELAN-H 模塊, 同時下采樣變?yōu)榱?MP2 層。
ELAN-H模塊和 backbone 中的 ELAN 稍微有點(diǎn)區(qū)別就是 cat 的數(shù)量不同。

目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)
對于 pafpn 輸出的 P3、P4 和 P5 , 經(jīng)過 RepConv 調(diào)整通道數(shù),最后使用 1x1 卷積去預(yù)測 objectness、class 和 bbox 三部分。

RepConv 在訓(xùn)練和推理是有一定的區(qū)別。訓(xùn)練時有三個分支的相加輸出,部署時會將分支的參數(shù)重參數(shù)化到主分支上

目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)


Loss Function

主要分帶和不帶輔助訓(xùn)練頭兩種,對應(yīng)的訓(xùn)練腳本是train.py 和 train_aux.py。
不帶輔助訓(xùn)練頭(分損失函數(shù)和匹配策略兩部分討論)。
損失函數(shù)
整體和YOLOV5 保持一致,分為坐標(biāo)損失、目標(biāo)置信度損失(GT就是訓(xùn)練階段的普通iou)和分類損失三部分。其中目標(biāo)置信度損失和分類損失采用BCEWithLogitsLoss(帶log的二值交叉熵?fù)p失),坐標(biāo)損失采用CIoU損失。詳細(xì)參見utils/loss.py 里面的 ComputeLossOTA 函數(shù) 配合 配置文件里的各部分的權(quán)重設(shè)置。

  • 匹配策略
    主要是參考了YOLOV5 和YOLOV6使用的當(dāng)下比較火的simOTA.
    S1.訓(xùn)練前,會基于訓(xùn)練集中g(shù)t框,通過k-means聚類算法,先驗(yàn)獲得9個從小到大排列的anchor框。(可選)
    S2.將每個gt與9個anchor匹配:Yolov5為分別計算它與9種anchor的寬與寬的比值(較大的寬除以較小的寬,比值大于1,下面的高同樣操作)、高與高的比值,在寬比值、高比值這2個比值中,取最大的一個比值,若這個比值小于設(shè)定的比值閾值,這個anchor的預(yù)測框就被稱為正樣本。一個gt可能與幾個anchor均能匹配上(此時最大9個)。所以一個gt可能在不同的網(wǎng)絡(luò)層上做預(yù)測訓(xùn)練,大大增加了正樣本的數(shù)量,當(dāng)然也會出現(xiàn)gt與所有anchor都匹配不上的情況,這樣gt就會被當(dāng)成背景,不參與訓(xùn)練,說明anchor框尺寸設(shè)計的不好。
    S3.擴(kuò)充正樣本。根據(jù)gt框的中心位置,將最近的2個鄰域網(wǎng)格也作為預(yù)測網(wǎng)格,也即一個groundtruth框可以由3個網(wǎng)格來預(yù)測;可以發(fā)現(xiàn)粗略估計正樣本數(shù)相比前yolo系列,增加了三倍(此時最大27個匹配)。圖下圖淺黃色區(qū)域,其中實(shí)線是YOLO的真實(shí)網(wǎng)格,虛線是將一個網(wǎng)格四等分,如這個例子中,GT的中心在右下虛線網(wǎng)格,則擴(kuò)充右和下真實(shí)網(wǎng)格也作為正樣本。
    S4.獲取與當(dāng)前gt有top10最大iou的prediction結(jié)果。將這top10 (5-15之間均可,并不敏感)iou進(jìn)行sum,就為當(dāng)前gt的k。k最小取1。
    S5.根據(jù)損失函數(shù)計算每個GT和候選anchor損失(前期會加大分類損失權(quán)重,后面減低分類損失權(quán)重,如1:5->1:3),并保留損失最小的前K個。
    S6.去掉同一個anchor被分配到多個GT的情況。
    目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)
  • 帶輔助訓(xùn)練頭(分損失函數(shù)和匹配策略兩部分討論)
    將負(fù)責(zé)最終輸出的Head為lead Head,將用于輔助訓(xùn)練的Head稱為auxiliary Head。
    目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)

一些細(xì)節(jié):其loss函數(shù)和不帶輔助頭相同,加權(quán)系數(shù)不能過大(aux head loss 和lead head loss 按照0.25:1的比例),否則會導(dǎo)致lead head出來的結(jié)果精度變低。匹配策略和上面的不帶輔助頭(只有l(wèi)ead head)只有很少不同,其中輔助頭:
*lead head中每個網(wǎng)格與gt如果匹配上,附加周邊兩個網(wǎng)格,而aux head附加4個網(wǎng)格(如上面導(dǎo)數(shù)第二幅圖,匹配到淺黃+橘黃共5個網(wǎng)格)。
*lead head中將top10個樣本iou求和取整,而aux head中取top20。
aux head更關(guān)注于recall,而lead head從aux head中精準(zhǔn)篩選出樣本。
需要注意依照yolov5中的中心點(diǎn)回歸方式,僅能將圖中紅色特征grid,預(yù)測在圖中紅色+藍(lán)色區(qū)域(實(shí)線組成的網(wǎng)格代表著特征圖grid,虛線代表著一個grid分成了4個象限),是根本無法將中心點(diǎn)預(yù)測到gt處(藍(lán)色點(diǎn))!而該紅色特征grid在訓(xùn)練時是會作為正樣本的。在aux head中,模型也并沒有針對這種情況對回歸方式作出更改。所以其實(shí)在aux head中,即使被分配為正樣本的區(qū)域,經(jīng)過不斷的學(xué)習(xí),可能仍然無法完全擬合至效果特別好。

目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)

YOLOv8

YOLOv8詳解 【網(wǎng)絡(luò)結(jié)構(gòu)+代碼+實(shí)操】

對比

目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)文章來源地址http://www.zghlxwxcb.cn/news/detail-488385.html

到了這里,關(guān)于目標(biāo)檢測——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【目標(biāo)檢測——YOLO系列】YOLOv1 —《You Only Look Once: Unified, Real-Time Object Detection》

    【目標(biāo)檢測——YOLO系列】YOLOv1 —《You Only Look Once: Unified, Real-Time Object Detection》

    論文地址:1506.02640] You Only Look Once: Unified, Real-Time Object Detection (arxiv.org) 代碼地址:pjreddie/darknet: Convolutional Neural Networks (github.com) YOLOv1是一種end to end目標(biāo)檢測算法,由Joseph Redmon等人于2015年提出。它是一種基于單個神經(jīng)網(wǎng)絡(luò)的實(shí)時目標(biāo)檢測算法。 YOLOv1的中文名稱是\\\"你只看一

    2024年02月08日
    瀏覽(18)
  • 目標(biāo)檢測YOLO算法,先從yolov1開始

    目標(biāo)檢測YOLO算法,先從yolov1開始

    有一套配套的學(xué)習(xí)資料,才能讓我們的學(xué)習(xí)事半功倍。 yolov1論文原址:You Only Look Once: Unified, Real-Time Object Detection 代碼地址:darknet: Convolutional Neural Networks (github.com) one-stage(單階段):YOLO系列 最核心的優(yōu)勢:速度非???,適合做實(shí)時檢測任務(wù)! 但是缺點(diǎn)也是有的,效果通常

    2024年02月09日
    瀏覽(49)
  • 【目標(biāo)檢測系列】YOLOV1解讀

    【目標(biāo)檢測系列】YOLOV1解讀

    從R-CNN到Fast-RCNN,之前的目標(biāo)檢測工作都是分成兩階段,先提供位置信息在進(jìn)行目標(biāo)分類,精度很高但無法滿足實(shí)時檢測的要求。 而YoLo將目標(biāo)檢測看作回歸問題,輸入為一張圖片,輸出為S*S*(5*B+C)的三維向量。該向量結(jié)果既包含位置信息,又包含類別信息。可通過損失函數(shù),

    2024年02月13日
    瀏覽(20)
  • 深度學(xué)習(xí)||YOLO(You Only Look Once)深度學(xué)習(xí)的實(shí)時目標(biāo)檢測算法(YOLOv1~YOLOv5)

    目錄 YOLOv1: YOLOv2: YOLOv3: YOLOv4: YOLOv5: 總結(jié): YOLO(You Only Look Once)是一系列基于深度學(xué)習(xí)的實(shí)時目標(biāo)檢測算法。 自從2015年首次被提出以來,YOLO系列不斷發(fā)展,推出了多個版本,包括YOLOv1, YOLOv2, YOLOv3, YOLOv4, 和YOLOv5等。下面是對YOLO系列的詳解: 提出時間 : 2015年。 主要貢獻(xiàn) :

    2024年02月20日
    瀏覽(14)
  • YOLO系列目標(biāo)檢測算法-YOLOv6

    YOLO系列目標(biāo)檢測算法-YOLOv6

    YOLO系列目標(biāo)檢測算法目錄 - 文章鏈接 YOLO系列目標(biāo)檢測算法總結(jié)對比- 文章鏈接 YOLOv1- 文章鏈接 YOLOv2- 文章鏈接 YOLOv3- 文章鏈接 YOLOv4- 文章鏈接 Scaled-YOLOv4- 文章鏈接 YOLOv5- 文章鏈接 YOLOv6 - 文章鏈接 YOLOv7- 文章鏈接 PP-YOLO- 文章鏈接 PP-YOLOv2- 文章鏈接 YOLOR- 文章鏈接 YOLOS- 文章鏈

    2023年04月08日
    瀏覽(45)
  • YOLO物體檢測-系列教程1:YOLOV1整體解讀(預(yù)選框/置信度/分類任/回歸任務(wù)/損失函數(shù)/公式解析/置信度/非極大值抑制)

    YOLO物體檢測-系列教程1:YOLOV1整體解讀(預(yù)選框/置信度/分類任/回歸任務(wù)/損失函數(shù)/公式解析/置信度/非極大值抑制)

    YOLOV1整體解讀 YOLOV2整體解讀 YOLOV1提出論文:You Only Look Once: Unified, Real-Time Object Detection two-stage(兩階段):Faster-rcnn Mask-Rcnn系列 one-stage(單階段):YOLO系列 最核心的優(yōu)勢:速度非???,適合做實(shí)時檢測任務(wù)! 但是缺點(diǎn)也是有的,效果通常情況下不會太好! 機(jī)器學(xué)習(xí) 分類任

    2024年02月09日
    瀏覽(22)
  • YOLO系列概述(yolov1至yolov7)

    YOLO系列概述(yolov1至yolov7)

    參考: 睿智的目標(biāo)檢測53——Pytorch搭建YoloX目標(biāo)檢測平臺 YoloV7 首先我們來看一下yolo系列的發(fā)展歷史,yolo v1和yolox是anchor free的方法,yolov2,yolov3,一直到y(tǒng)olov7是anchor base的方法。首選我們來回顧下每個版本的yolo都做了些什么 yolo v1是將 416 ? 416 416*416 4 1 6 ? 4 1 6 的圖片,分

    2024年02月05日
    瀏覽(29)
  • YOLOv5目標(biāo)檢測學(xué)習(xí)(1):yolo系列算法的基礎(chǔ)概念

    YOLOv5目標(biāo)檢測學(xué)習(xí)(1):yolo系列算法的基礎(chǔ)概念

    提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 關(guān)于深度學(xué)習(xí)目標(biāo)檢測,有許多概念性的東西需要先了解一下。這里主要以基于深度學(xué)習(xí)的目標(biāo)檢測算法的部署實(shí)現(xiàn)來學(xué)習(xí)。 以yolov5為例: 使用YOLOv5進(jìn)行車輛和行人的目標(biāo)檢測通常涉及以下步驟: 數(shù)據(jù)

    2024年04月09日
    瀏覽(24)
  • 【YOLO系列】YOLOv1論文超詳細(xì)解讀(翻譯 +學(xué)習(xí)筆記)

    【YOLO系列】YOLOv1論文超詳細(xì)解讀(翻譯 +學(xué)習(xí)筆記)

    從這篇開始,我們將進(jìn)入YOLO的學(xué)習(xí)。YOLO是目前比較流行的目標(biāo)檢測算法,速度快且結(jié)構(gòu)簡單,其他的目標(biāo)檢測算法如RCNN系列,以后有時間的話再介紹。 本文主要介紹的是YOLOV1,這是由以Joseph Redmon為首的大佬們于2015年提出的一種新的目標(biāo)檢測算法。它與之前的目標(biāo)檢測算法

    2024年02月04日
    瀏覽(47)
  • YOLO系列算法全家桶——YOLOv1-YOLOv9詳細(xì)介紹 !!

    YOLO系列算法全家桶——YOLOv1-YOLOv9詳細(xì)介紹 ??!

    文章目錄 前言 一、YOLO算法的核心思想 1. YOLO系列算法的步驟 2. Backbone、Neck和Head 二、YOLO系列的算法 1. YOLOv1(2016) 1.1 模型介紹 1.2 網(wǎng)絡(luò)結(jié)構(gòu) 1.3 實(shí)現(xiàn)細(xì)節(jié) 1.4 性能表現(xiàn) 2. YOLOv2(2016) 2.1 改進(jìn)部分 2.2 網(wǎng)絡(luò)結(jié)構(gòu) 2.3 性能表現(xiàn) 3. YOLOv3 (2018) 3.1 模型介紹 3.2 網(wǎng)絡(luò)結(jié)構(gòu) 3.3 改進(jìn)部分

    2024年04月10日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包