博客專欄

EEPW首頁 > 博客 > YOLO算法最全綜述:從YOLOv1到Y(jié)OLOv5

YOLO算法最全綜述:從YOLOv1到Y(jié)OLOv5

發(fā)布人:數(shù)據(jù)派THU 時間:2022-06-19 來源:工程師 發(fā)布文章
來源:知乎 初識CV  深度學習愛好者

https://zhuanlan.zhihu.com/p/136382095

YOLO官網(wǎng):

https://github.com/pjreddie/darknet


YOLO v.s Faster R-CNN


1.統(tǒng)一網(wǎng)絡(luò):YOLO沒有顯示求取region proposal的過程。Faster R-CNN中盡管RPN與fast rcnn共享卷積層,但是在模型訓練過程中,需要反復(fù)訓練RPN網(wǎng)絡(luò)和fast rcnn網(wǎng)絡(luò).相對于R-CNN系列的"看兩眼"(候選框提取與分類),YOLO只需要Look Once.
2. YOLO統(tǒng)一為一個回歸問題,而R-CNN將檢測結(jié)果分為兩部分求解:物體類別(分類問題),物體位置即bounding box(回歸問題)。

YOLOv1


論文下載:http://arxiv.org/abs/1506.02640

代碼下載:https://github.com/pjreddie/darknet


核心思想:將整張圖片作為網(wǎng)絡(luò)的輸入(類似于Faster-RCNN),直接在輸出層對BBox的位置和類別進行回歸。


實現(xiàn)方法


  • 將一幅圖像分成SxS個網(wǎng)格(grid cell),如果某個object的中心 落在這個網(wǎng)格中,則這個網(wǎng)格就負責預(yù)測這個object。


圖片

  • 每個網(wǎng)絡(luò)需要預(yù)測B個BBox的位置信息和confidence(置信度)信息,一個BBox對應(yīng)著四個位置信息和一個confidence信息。confidence代表了所預(yù)測的box中含有object的置信度和這個box預(yù)測的有多準兩重信息:


其中如果有object落在一個grid cell里,第一項取1,否則取0。第二項是預(yù)測的bounding box和實際的groundtruth之間的IoU值。

  • 每個bounding box要預(yù)測(x, y, w, h)和confidence共5個值,每個網(wǎng)格還要預(yù)測一個類別信息,記為C類。則SxS個網(wǎng)格,每個網(wǎng)格要預(yù)測B個bounding box還要預(yù)測C個categories。輸出就是S x S x (5*B+C)的一個tensor。(注意:class信息是針對每個網(wǎng)格的,confidence信息是針對每個bounding box的。)
  • 舉例說明: 在PASCAL VOC中,圖像輸入為448x448,取S=7,B=2,一共有20個類別(C=20)。則輸出就是7x7x30的一個tensor。整個網(wǎng)絡(luò)結(jié)構(gòu)如下圖所示:


圖片

  • 在test的時候,每個網(wǎng)格預(yù)測的class信息和bounding box預(yù)測的confidence信息相乘,就得到每個bounding box的class-specific confidence score:


圖片
等式左邊第一項就是每個網(wǎng)格預(yù)測的類別信息,第二三項就是每個bounding box預(yù)測的confidence。這個乘積即encode了預(yù)測的box屬于某一類的概率,也有該box準確度的信息。

  • 得到每個box的class-specific confidence score以后,設(shè)置閾值,濾掉得分低的boxes,對保留的boxes進行NMS處理,就得到最終的檢測結(jié)果。


簡單的概括就是:
(1) 給個一個輸入圖像,首先將圖像劃分成7*7的網(wǎng)格(2) 對于每個網(wǎng)格,我們都預(yù)測2個邊框(包括每個邊框是目標的置信度以及每個邊框區(qū)域在多個類別上的概率)(3) 根據(jù)上一步可以預(yù)測出7*7*2個目標窗口,然后根據(jù)閾值去除可能性比較低的目標窗口,最后NMS去除冗余窗口即可

損失函數(shù)


在實現(xiàn)中,最主要的就是怎么設(shè)計損失函數(shù),讓這個三個方面得到很好的平衡。作者簡單粗暴的全部采用了sum-squared error loss來做這件事。
這種做法存在以下幾個問題:

  • 第一,8維的localization error和20維的classification error同等重要顯然是不合理的;
  • 第二,如果一個網(wǎng)格中沒有object(一幅圖中這種網(wǎng)格很多),那么就會將這些網(wǎng)格中的box的confidence push到0,相比于較少的有object的網(wǎng)格,這種做法是overpowering的,這會導(dǎo)致網(wǎng)絡(luò)不穩(wěn)定甚至發(fā)散。


解決辦法:

  • 更重視8維的坐標預(yù)測,給這些損失前面賦予更大的loss weight。
  • 對沒有object的box的confidence loss,賦予小的loss weight。
  • 有object的box的confidence loss和類別的loss的loss weight正常取1。


對不同大小的box預(yù)測中,相比于大box預(yù)測偏一點,小box預(yù)測偏一點肯定更不能被忍受的。而sum-square error loss中對同樣的偏移loss是一樣。
為了緩和這個問題,作者用了一個比較取巧的辦法,就是將box的width和height取平方根代替原本的height和width。這個參考下面的圖很容易理解,小box的橫軸值較小,發(fā)生偏移時,反應(yīng)到y(tǒng)軸上相比大box要大。(也是個近似逼近方式)
圖片


一個網(wǎng)格預(yù)測多個box,希望的是每個box predictor專門負責預(yù)測某個object。具體做法就是看當前預(yù)測的box與ground truth box中哪個IoU大,就負責哪個。這種做法稱作box predictor的specialization。
最后整個的損失函數(shù)如下所示:
圖片
這個損失函數(shù)中:

  • 只有當某個網(wǎng)格中有object的時候才對classification error進行懲罰。
  • 只有當某個box predictor對某個ground truth box負責的時候,才會對box的coordinate error進行懲罰,而對哪個ground truth box負責就看其預(yù)測值和ground truth box的IoU是不是在那個cell的所有box中最大。


其他細節(jié),例如使用激活函數(shù)使用leak RELU,模型用ImageNet預(yù)訓練等等

優(yōu)點


  • 快速,pipline簡單.
  • 背景誤檢率低。
  • 通用性強。YOLO對于藝術(shù)類作品中的物體檢測同樣適用。它對非自然圖像物體的檢測率遠遠高于DPM和RCNN系列檢測方法。

缺點


  • 由于輸出層為全連接層,因此在檢測時,YOLO訓練模型只支持與訓練圖像相同的輸入分辨率。
  • 雖然每個格子可以預(yù)測B個bounding box,但是最終只選擇只選擇IOU最高的bounding box作為物體檢測輸出,即每個格子最多只預(yù)測出一個物體。當物體占畫面比例較小,如圖像中包含畜群或鳥群時,每個格子包含多個物體,但卻只能檢測出其中一個。這是YOLO方法的一個缺陷。
  • YOLO loss函數(shù)中,大物體IOU誤差和小物體IOU誤差對網(wǎng)絡(luò)訓練中l(wèi)oss貢獻值接近(雖然采用求平方根方式,但沒有根本解決問題)。因此,對于小物體,小的IOU誤差也會對網(wǎng)絡(luò)優(yōu)化過程造成很大的影響,從而降低了物體檢測的定位準確性。

YOLOv2(YOLO9000)


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


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

改進:


Batch Normalization(批量歸一化)
mAP提升2.4%。
批歸一化有助于解決反向傳播過程中的梯度消失和梯度爆炸問題,降低對一些超參數(shù)(比如學習率、網(wǎng)絡(luò)參數(shù)的大小范圍、激活函數(shù)的選擇)的敏感性,并且每個batch分別進行歸一化的時候,起到了一定的正則化效果(YOLO2不再使用dropout),從而能夠獲得更好的收斂速度和收斂效果。
通常,一次訓練會輸入一批樣本(batch)進入神經(jīng)網(wǎng)絡(luò)。批規(guī)一化在神經(jīng)網(wǎng)絡(luò)的每一層,在網(wǎng)絡(luò)(線性變換)輸出后和激活函數(shù)(非線性變換)之前增加一個批歸一化層(BN),BN層進行如下變換:①對該批樣本的各特征量(對于中間層來說,就是每一個神經(jīng)元)分別進行歸一化處理,分別使每個特征的數(shù)據(jù)分布變換為均值0,方差1。從而使得每一批訓練樣本在每一層都有類似的分布。這一變換不需要引入額外的參數(shù)。②對上一步的輸出再做一次線性變換,假設(shè)上一步的輸出為Z,則Z1=γZ + β。這里γ、β是可以訓練的參數(shù)。增加這一變換是因為上一步驟中強制改變了特征數(shù)據(jù)的分布,可能影響了原有數(shù)據(jù)的信息表達能力。增加的線性變換使其有機會恢復(fù)其原本的信息。
關(guān)于批規(guī)一化的更多信息可以參考 Batch Normalization原理與實戰(zhàn)。
High resolution classifier(高分辨率圖像分類器)
mAP提升了3.7%。
圖像分類的訓練樣本很多,而標注了邊框的用于訓練對象檢測的樣本相比而言就比較少了,因為標注邊框的人工成本比較高。所以對象檢測模型通常都先用圖像分類樣本訓練卷積層,提取圖像特征。但這引出的另一個問題是,圖像分類樣本的分辨率不是很高。所以YOLO v1使用ImageNet的圖像分類樣本采用 224*224 作為輸入,來訓練CNN卷積層。然后在訓練對象檢測時,檢測用的圖像樣本采用更高分辨率的 448*448 的圖像作為輸入。但這樣切換對模型性能有一定影響。
所以YOLO2在采用 224*224 圖像進行分類模型預(yù)訓練后,再采用 448*448 的高分辨率樣本對分類模型進行微調(diào)(10個epoch),使網(wǎng)絡(luò)特征逐漸適應(yīng) 448*448 的分辨率。然后再使用 448*448 的檢測樣本進行訓練,緩解了分辨率突然切換造成的影響。
Convolution with anchor boxes(使用先驗框)
召回率大幅提升到88%,同時mAP輕微下降了0.2。
YOLOV1包含有全連接層,從而能直接預(yù)測Bounding Boxes的坐標值。Faster R-CNN的方法只用卷積層與Region Proposal Network來預(yù)測Anchor Box的偏移值與置信度,而不是直接預(yù)測坐標值。作者發(fā)現(xiàn)通過預(yù)測偏移量而不是坐標值能夠簡化問題,讓神經(jīng)網(wǎng)絡(luò)學習起來更容易。
借鑒Faster RCNN的做法,YOLO2也嘗試采用先驗框(anchor)。在每個grid預(yù)先設(shè)定一組不同大小和寬高比的邊框,來覆蓋整個圖像的不同位置和多種尺度,這些先驗框作為預(yù)定義的候選區(qū)在神經(jīng)網(wǎng)絡(luò)中將檢測其中是否存在對象,以及微調(diào)邊框的位置。
之前YOLO1并沒有采用先驗框,并且每個grid只預(yù)測兩個bounding box,整個圖像98個。YOLO2如果每個grid采用9個先驗框,總共有13*13*9=1521個先驗框。所以最終YOLO去掉了全連接層,使用Anchor Boxes來預(yù)測 Bounding Boxes。作者去掉了網(wǎng)絡(luò)中一個Pooling層,這讓卷積層的輸出能有更高的分辨率。收縮網(wǎng)絡(luò)讓其運行在416*416而不是448*448。
由于圖片中的物體都傾向于出現(xiàn)在圖片的中心位置,特別是那種比較大的物體,所以有一個單獨位于物體中心的位置用于預(yù)測這些物體。YOLO的卷積層采用32這個值來下采樣圖片,所以通過選擇416*416用作輸入尺寸最終能輸出一個13*13的Feature Map。使用Anchor Box會讓精確度稍微下降,但用了它能讓YOLO能預(yù)測出大于一千個框,同時recall達到88%,mAP達到69.2%。
Dimension clusters(聚類提取先驗框的尺度信息)
之前Anchor Box的尺寸是手動選擇的,所以尺寸還有優(yōu)化的余地。YOLO2嘗試統(tǒng)計出更符合樣本中對象尺寸的先驗框,這樣就可以減少網(wǎng)絡(luò)微調(diào)先驗框到實際位置的難度。YOLO2的做法是對訓練集中標注的邊框進行K-mean聚類分析,以尋找盡可能匹配樣本的邊框尺寸。
如果我們用標準的歐式距離的k-means,尺寸大的框比小框產(chǎn)生更多的錯誤。因為我們的目的是提高IOU分數(shù),這依賴于Box的大小,所以距離度量的使用:
圖片


centroid是聚類時被選作中心的邊框,box就是其它邊框,d就是兩者間的“距離”。IOU越大,“距離”越近。YOLO2給出的聚類分析結(jié)果如下圖所示:
通過分析實驗結(jié)果(Figure 2),左圖:在model復(fù)雜性與high recall之間權(quán)衡之后,選擇聚類分類數(shù)K=5。右圖:是聚類的中心,大多數(shù)是高瘦的Box。
Table1是說明用K-means選擇Anchor Boxes時,當Cluster IOU選擇值為5時,AVG IOU的值是61,這個值要比不用聚類的方法的60.9要高。選擇值為9的時候,AVG IOU更有顯著提高。總之就是說明用聚類的方法是有效果的。
圖片
Direct location prediction(約束預(yù)測邊框的位置)

借鑒于Faster RCNN的先驗框方法,在訓練的早期階段,其位置預(yù)測容易不穩(wěn)定。其位置預(yù)測公式為:


其中, 是預(yù)測邊框的中心, 是先驗框(anchor)的中心點坐標, 是先驗框(anchor)的寬和高, 是要學習的參數(shù)。注意,YOLO論文中寫的是 ,根據(jù)Faster RCNN,應(yīng)該是"+"。由于 的取值沒有任何約束,因此預(yù)測邊框的中心可能出現(xiàn)在任何位置,訓練早期階段不容易穩(wěn)定。YOLO調(diào)整了預(yù)測公式,將預(yù)測邊框的中心約束在特定gird網(wǎng)格內(nèi)。σ

其中, 是預(yù)測邊框的中心和寬高。 是預(yù)測邊框的置信度,YOLO1是直接預(yù)測置信度的值,這里對預(yù)測參數(shù) 進行σ變換后作為置信度的值。 是當前網(wǎng)格左上角到圖像左上角的距離,要先將網(wǎng)格大小歸一化,即令一個網(wǎng)格的寬=1,高=1。 是先驗框的寬和高。σ是sigmoid函數(shù)。 是要學習的參數(shù),分別用于預(yù)測邊框的中心和寬高,以及置信度。

圖片
因為使用了限制讓數(shù)值變得參數(shù)化,也讓網(wǎng)絡(luò)更容易學習、更穩(wěn)定。
Fine-Grained Features(passthrough層檢測細粒度特征)
passthrough層檢測細粒度特征使mAP提升1。
對象檢測面臨的一個問題是圖像中對象會有大有小,輸入圖像經(jīng)過多層網(wǎng)絡(luò)提取特征,最后輸出的特征圖中(比如YOLO2中輸入416*416經(jīng)過卷積網(wǎng)絡(luò)下采樣最后輸出是13*13),較小的對象可能特征已經(jīng)不明顯甚至被忽略掉了。為了更好的檢測出一些比較小的對象,最后輸出的特征圖需要保留一些更細節(jié)的信息。
YOLO2引入一種稱為passthrough層的方法在特征圖中保留一些細節(jié)信息。具體來說,就是在最后一個pooling之前,特征圖的大小是26*26*512,將其1拆4,直接傳遞(passthrough)到pooling后(并且又經(jīng)過一組卷積)的特征圖,兩者疊加到一起作為輸出的特征圖。
圖片
具體怎樣1拆4,下面借用一副圖看的很清楚。圖中示例的是1個4*4拆成4個2*2。因為深度不變,所以沒有畫出來。
圖片
另外,根據(jù)YOLO2的代碼,特征圖先用1*1卷積從 26*26*512 降維到 26*26*64,再做1拆4并passthrough。下面圖6有更詳細的網(wǎng)絡(luò)輸入輸出結(jié)構(gòu)。
Multi-ScaleTraining(多尺度圖像訓練)
作者希望YOLO v2能健壯的運行于不同尺寸的圖片之上,所以把這一想法用于訓練model中。
區(qū)別于之前的補全圖片的尺寸的方法,YOLO v2每迭代幾次都會改變網(wǎng)絡(luò)參數(shù)。每10個Batch,網(wǎng)絡(luò)會隨機地選擇一個新的圖片尺寸,由于使用了下采樣參數(shù)是32,所以不同的尺寸大小也選擇為32的倍數(shù){320,352…..608},最小320*320,最大608*608,網(wǎng)絡(luò)會自動改變尺寸,并繼續(xù)訓練的過程。
這一政策讓網(wǎng)絡(luò)在不同的輸入尺寸上都能達到一個很好的預(yù)測效果,同一網(wǎng)絡(luò)能在不同分辨率上進行檢測。當輸入圖片尺寸比較小的時候跑的比較快,輸入圖片尺寸比較大的時候精度高,所以你可以在YOLO v2的速度和精度上進行權(quán)衡。
Figure4,Table 3:在voc2007上的速度與精度
圖片
hi-res detector(高分辨率圖像的對象檢測)
圖1表格中最后一行有個hi-res detector,使mAP提高了1.8。因為YOLO2調(diào)整網(wǎng)絡(luò)結(jié)構(gòu)后能夠支持多種尺寸的輸入圖像。通常是使用416*416的輸入圖像,如果用較高分辨率的輸入圖像,比如544*544,則mAP可以達到78.6,有1.8的提升。

Hierarchical classification(分層分類)


作者提出了一種在分類數(shù)據(jù)集和檢測數(shù)據(jù)集上聯(lián)合訓練的機制。使用檢測數(shù)據(jù)集的圖片去學習檢測相關(guān)的信息,例如bounding box 坐標預(yù)測,是否包含物體以及屬于各個物體的概率。使用僅有類別標簽的分類數(shù)據(jù)集圖片去擴展可以檢測的種類。
作者通過ImageNet訓練分類、COCO和VOC數(shù)據(jù)集來訓練檢測,這是一個很有價值的思路,可以讓我們達到比較優(yōu)的效果。通過將兩個數(shù)據(jù)集混合訓練,如果遇到來自分類集的圖片則只計算分類的Loss,遇到來自檢測集的圖片則計算完整的Loss。
但是ImageNet對應(yīng)分類有9000種,而COCO則只提供80種目標檢測,作者使用multi-label模型,即假定一張圖片可以有多個label,并且不要求label間獨立。通過作者Paper里的圖來說明,由于ImageNet的類別是從WordNet選取的,作者采用以下策略重建了一個樹形結(jié)構(gòu)(稱為分層樹):

  1. 遍歷Imagenet的label,然后在WordNet中尋找該label到根節(jié)點(指向一個物理對象)的路徑;
  2. 如果路徑直有一條,那么就將該路徑直接加入到分層樹結(jié)構(gòu)中;
  3. 否則,從剩余的路徑中選擇一條最短路徑,加入到分層樹。


這個分層樹我們稱之為 WordTree,作用就在于將兩種數(shù)據(jù)集按照層級進行結(jié)合。

圖片


分類時的概率計算借用了決策樹思想,某個節(jié)點的概率值等于該節(jié)點到根節(jié)點的所有條件概率之積。最終結(jié)果是一顆 WordTree (視覺名詞組成的層次結(jié)構(gòu)模型)。用WordTree執(zhí)行分類時,預(yù)測每個節(jié)點的條件概率。如果想求得特定節(jié)點的絕對概率,只需要沿著路徑做連續(xù)乘積。例如,如果想知道一張圖片是不是“Norfolk terrier ”需要計算:

圖片


另外,為了驗證這種方法作者在WordTree(用1000類別的ImageNet創(chuàng)建)上訓練了Darknet-19模型。為了創(chuàng)建WordTree1k,作者天添加了很多中間節(jié)點,把標簽由1000擴展到1369。訓練過程中g(shù)round truth標簽要順著向根節(jié)點的路徑傳播。例如,如果一張圖片被標記為“Norfolk terrier”,它也被標記為“dog” 和“mammal”等。為了計算條件概率,模型預(yù)測了一個包含1369個元素的向量,而且基于所有“同義詞集”計算softmax,其中“同義詞集”是同一概念的下位詞。
softmax操作也同時應(yīng)該采用分組操作,下圖上半部分為ImageNet對應(yīng)的原生Softmax,下半部分對應(yīng)基于WordTree的Softmax:


圖片


通過上述方案構(gòu)造WordTree,得到對應(yīng)9418個分類,通過重采樣保證Imagenet和COCO的樣本數(shù)據(jù)比例為4:1。


YOLOv3


論文地址:

https://pjreddie.com/media/files/papers/YOLOv3.pdf


YOLO v3的模型比之前的模型復(fù)雜了不少,可以通過改變模型結(jié)構(gòu)的大小來權(quán)衡速度與精度。
速度對比如下:
圖片


簡而言之,YOLOv3 的先驗檢測(Prior detection)系統(tǒng)將分類器或定位器重新用于執(zhí)行檢測任務(wù)。他們將模型應(yīng)用于圖像的多個位置和尺度。而那些評分較高的區(qū)域就可以視為檢測結(jié)果。此外,相對于其它目標檢測方法,我們使用了完全不同的方法。我們將一個單神經(jīng)網(wǎng)絡(luò)應(yīng)用于整張圖像,該網(wǎng)絡(luò)將圖像劃分為不同的區(qū)域,因而預(yù)測每一塊區(qū)域的邊界框和概率,這些邊界框會通過預(yù)測的概率加權(quán)。我們的模型相比于基于分類器的系統(tǒng)有一些優(yōu)勢。它在測試時會查看整個圖像,所以它的預(yù)測利用了圖像中的全局信息。與需要數(shù)千張單一目標圖像的 R-CNN 不同,它通過單一網(wǎng)絡(luò)評估進行預(yù)測。這令 YOLOv3 非???,一般它比 R-CNN 快 1000 倍、比 Fast R-CNN 快 100 倍。
改進之處

  • 多尺度預(yù)測 (引入FPN)。
  • 更好的基礎(chǔ)分類網(wǎng)絡(luò)(darknet-53, 類似于ResNet引入殘差結(jié)構(gòu))。
  • 分類器不在使用Softmax,分類損失采用binary cross-entropy loss(二分類交叉損失熵)


YOLOv3不使用Softmax對每個框進行分類,主要考慮因素有兩個:

  1. Softmax使得每個框分配一個類別(score最大的一個),而對于Open Images這種數(shù)據(jù)集,目標可能有重疊的類別標簽,因此Softmax不適用于多標簽分類。
  2. Softmax可被獨立的多個logistic分類器替代,且準確率不會下降。

分類損失采用binary cross-entropy loss。


多尺度預(yù)測


每種尺度預(yù)測3個box, anchor的設(shè)計方式仍然使用聚類,得到9個聚類中心,將其按照大小均分給3個尺度。

  • 尺度1: 在基礎(chǔ)網(wǎng)絡(luò)之后添加一些卷積層再輸出box信息.
  • 尺度2: 從尺度1中的倒數(shù)第二層的卷積層上采樣(x2)再與最后一個16x16大小的特征圖相加,再次通過多個卷積后輸出box信息.相比尺度1變大兩倍.
  • 尺度3: 與尺度2類似,使用了32x32大小的特征圖.


參見網(wǎng)絡(luò)結(jié)構(gòu)定義文件 yolov3.cfg
https://github.com/pjreddie/darknet/blob/master/cfg/yolov3.cfg


基礎(chǔ)網(wǎng)絡(luò) Darknet-53
圖片


darknet-53


仿ResNet, 與ResNet-101或ResNet-152準確率接近,但速度更快.對比如下:
圖片


主干架構(gòu)的性能對比


檢測結(jié)構(gòu)如下:
圖片圖片


YOLOv3在mAP@0.5及小目標APs上具有不錯的結(jié)果,但隨著IOU的增大,性能下降,說明YOLOv3不能很好地與ground truth切合。

邊框預(yù)測


圖片


圖 2:帶有維度先驗和定位預(yù)測的邊界框。我們邊界框的寬和高以作為離聚類中心的位移,并使用 Sigmoid 函數(shù)預(yù)測邊界框相對于濾波器應(yīng)用位置的中心坐標。

仍采用之前的logis,其中cx,cy是網(wǎng)格的坐標偏移量,pw,ph是預(yù)設(shè)的anchor box的邊長.最終得到的邊框坐標值是b*,而網(wǎng)絡(luò)學習目標是t*,用sigmod函數(shù)、指數(shù)轉(zhuǎn)換。

YOLOv4


YOLOv4: Optimal Speed and Accuracy of Object Detection

論文:https://arxiv.org/abs/2004.10934

代碼:https://github.com/AlexeyAB/darknet


YOLOv4!
圖片
YOLOv4 在COCO上,可達43.5% AP,速度高達 65 FPS!
YOLOv4的特點是集大成者,俗稱堆料。但最終達到這么高的性能,一定是不斷嘗試、不斷堆料、不斷調(diào)參的結(jié)果,給作者點贊。下面看看堆了哪些料:

  • Weighted-Residual-Connections (WRC)
  • Cross-Stage-Partial-connections (CSP)
  • Cross mini-Batch Normalization (CmBN)
  • Self-adversarial-training (SAT)
  • Mish-activation
  • Mosaic data augmentation
  • CmBN
  • DropBlock regularization
  • CIoU loss


本文的主要貢獻如下:
1. 提出了一種高效而強大的目標檢測模型。它使每個人都可以使用1080 Ti或2080 Ti GPU 訓練超快速和準確的目標檢測器(牛逼!)。2. 在檢測器訓練期間,驗證了SOTA的Bag-of Freebies 和Bag-of-Specials方法的影響。3. 改進了SOTA的方法,使它們更有效,更適合單GPU訓練,包括CBN [89],PAN [49],SAM [85]等。文章將目前主流的目標檢測器框架進行拆分:input、backbone、neck 和 head。
具體如下圖所示:
圖片




  • 對于GPU,作者在卷積層中使用:CSPResNeXt50 / CSPDarknet53
  • 對于VPU,作者使用分組卷積,但避免使用(SE)塊-具體來說,它包括以下模型:EfficientNet-lite / MixNet / GhostNet / MobileNetV3


作者的目標是在輸入網(wǎng)絡(luò)分辨率,卷積層數(shù),參數(shù)數(shù)量和層輸出(filters)的數(shù)量之間找到最佳平衡。
總結(jié)一下YOLOv4框架:

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


YOLOv4 = CSPDarknet53+SPP+PAN+YOLOv3
其中YOLOv4用到相當多的技巧:

  • 用于backbone的BoF:CutMix和Mosaic數(shù)據(jù)增強,DropBlock正則化,Class label smoothing
  • 用于backbone的BoS:Mish激活函數(shù),CSP,MiWRC
  • 用于檢測器的BoF:CIoU-loss,CmBN,DropBlock正則化,Mosaic數(shù)據(jù)增強,Self-Adversarial 訓練,消除網(wǎng)格敏感性,對單個ground-truth使用多個anchor,Cosine annealing scheduler,最佳超參數(shù),Random training shapes
  • 用于檢測器的Bos:Mish激活函數(shù),SPP,SAM,PAN,DIoU-NMS


看看YOLOv4部分組件:
圖片
感受一下YOLOv4實驗的充分性(調(diào)參的藝術(shù)):
圖片


圖片


感受一下性能炸裂的YOLOv4實驗結(jié)果:
圖片圖片圖片圖片


YOLOv5:


2020年2月YOLO之父Joseph Redmon宣布退出計算機視覺研究領(lǐng)域,2020 年 4 月 23 日YOLOv4 發(fā)布,2020 年 6 月 10 日YOLOv5發(fā)布。

YOLOv5源代碼:

https://github.com/ultralytics/yolov5


他們公布的結(jié)果表明,YOLOv5 的表現(xiàn)要優(yōu)于谷歌開源的目標檢測框架 EfficientDet,盡管 YOLOv5 的開發(fā)者沒有明確地將其與 YOLOv4 進行比較,但他們卻聲稱 YOLOv5 能在 Tesla P100 上實現(xiàn) 140 FPS 的快速檢測;相較而言,YOLOv4 的基準結(jié)果是在 50 FPS 速度下得到的,參閱:https://blog.roboflow.ai/yolov5-is-hereState-of-the-Art。


圖片
不僅如此,他們還提到「YOLOv5 的大小僅有 27 MB?!箤Ρ纫幌拢菏褂?darknet 架構(gòu)的 YOLOv4 有 244 MB。這說明 YOLOv5 實在特別小,比 YOLOv4 小近 90%。這也太瘋狂了!而在準確度指標上,「YOLOv5 與 YOLOv4 相當」。
因此總結(jié)起來,YOLOv5 宣稱自己速度非??欤蟹浅]p量級的模型大小,同時在準確度方面又與 YOLOv4 基準相當。
大家對YOLOV5命名是爭議很大,因為YOLOV5相對于YOLOV4來說創(chuàng)新性的地方很少。不過它的性能應(yīng)該還是有的,現(xiàn)在kaggle上active檢測的比賽小麥檢測前面的選手大部分用的都是YOLOV5的框架。比賽鏈接:

https://www.kaggle.com/c/global-wheat-detection


參考

1.V1,V2,V3參考地址:

https://blog.csdn.net/App_12062011/article/details/77554288
2.V4轉(zhuǎn)載地址:

https://mp.weixin.qq.com/s/Ua3T-DOuzmLWuXfohEiVFw


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



關(guān)鍵詞: AI

相關(guān)推薦

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

關(guān)閉