YOLO系列綜述:從V1到V4

2021-02-15 極市平臺
YOLO v1

這是繼RCNN,fast-RCNN和faster-RCNN之後,rbg(RossGirshick)針對DL目標檢測速度問題提出的另外一種框架。YOLO V1其增強版本GPU中能跑45fps,簡化版本155fps。

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

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

1. YOLO的核心思想

YOLO的核心思想就是利用整張圖作為網絡的輸入,直接在輸出層回歸bounding box的位置和bounding box所屬的類別。

faster RCNN中也直接用整張圖作為輸入,但是faster-RCNN整體還是採用了RCNN那種 proposal+classifier的思想,只不過是將提取proposal的步驟放在CNN中實現了,而YOLO則採用直接回歸的思路。

2.YOLO的實現方法

將一幅圖像分成SxS個網格(grid cell),如果某個object的中心 落在這個網格中,則這個網格就負責預測這個object。
每個網格要預測B個bounding box,每個bounding box除了要回歸自身的位置之外,還要附帶預測一個confidence值。

這個confidence代表了所預測的box中含有object的置信度和這個box預測的有多準兩重信息,其值是這樣計算的:

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

每個bounding box要預測(x, y, w, h)和confidence共5個值,每個網格還要預測一個類別信息,記為C類。則SxS個網格,每個網格要預測B個bounding box還要預測C個categories。輸出就是S x S x (5*B+C)的一個tensor。

注意:class信息是針對每個網格的,confidence信息是針對每個bounding box的。

舉例說明: 在PASCAL VOC中,圖像輸入為448x448,取S=7,B=2,一共有20個類別(C=20)。則輸出就是7x7x30的一個tensor。

整個網絡結構如下圖所示:

在test的時候,每個網格預測的class信息和bounding box預測的confidence信息相乘,就得到每個bounding box的class-specific confidence score:

等式左邊第一項就是每個網格預測的類別信息,第二三項就是每個bounding box預測的confidence。這個乘積即encode了預測的box屬於某一類的概率,也有該box準確度的信息。

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

註:

*由於輸出層為全連接層,因此在檢測時,YOLO訓練模型只支持與訓練圖像相同的輸入解析度。

*雖然每個格子可以預測B個bounding box,但是最終只選擇只選擇IOU最高的bounding box作為物體檢測輸出,即每個格子最多只預測出一個物體。當物體佔畫面比例較小,如圖像中包含畜群或鳥群時,每個格子包含多個物體,但卻只能檢測出其中一個。這是YOLO方法的一個缺陷。

3.YOLO的實現細節

每個grid有30維,這30維中,8維是回歸box的坐標,2維是box的confidence,還有20維是類別。

其中坐標的x,y用對應網格的offset歸一化到0-1之間,w,h用圖像的width和height歸一化到0-1之間。

在實現中,最主要的就是怎麼設計損失函數,讓這個三個方面得到很好的平衡。作者簡單粗暴的全部採用了sum-squared error loss來做這件事。

這種做法存在以下幾個問題:

第一,8維的localization error和20維的classification error同等重要顯然是不合理的;

第二,如果一個網格中沒有object(一幅圖中這種網格很多),那麼就會將這些網格中的box的confidence push到0,相比於較少的有object的網格,這種做法是overpowering的,這會導致網絡不穩定甚至發散。

解決辦法:

更重視8維的坐標預測,給這些損失前面賦予更大的loss weight, 記為在pascal VOC訓練中取5。

對沒有object的box的confidence loss,賦予小的loss weight,記為在pascal VOC訓練中取0.5。

有object的box的confidence loss和類別的loss的loss weight正常取1。

對不同大小的box預測中,相比於大box預測偏一點,小box預測偏一點肯定更不能被忍受的。而sum-square error loss中對同樣的偏移loss是一樣。

為了緩和這個問題,作者用了一個比較取巧的辦法,就是將box的width和height取平方根代替原本的height和width。這個參考下面的圖很容易理解,小box的橫軸值較小,發生偏移時,反應到y軸上相比大box要大。(也是個近似逼近方式)

一個網格預測多個box,希望的是每個box predictor專門負責預測某個object。具體做法就是看當前預測的box與ground truth box中哪個IoU大,就負責哪個。這種做法稱作box predictor的specialization。

最後整個的損失函數如下所示:

這個損失函數中:

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

其他細節,例如使用激活函數使用leak RELU,模型用ImageNet預訓練等等,在這裡就不一一贅述了。

註:

*YOLO方法模型訓練依賴於物體識別標註數據,因此,對於非常規的物體形狀或比例,YOLO的檢測效果並不理想。

*YOLO採用了多個下採樣層,網絡學到的物體特徵並不精細,因此也會影響檢測效果。

* YOLO loss函數中,大物體IOU誤差和小物體IOU誤差對網絡訓練中loss貢獻值接近(雖然採用求平方根方式,但沒有根本解決問題)。因此,對於小物體,小的IOU誤差也會對網絡優化過程造成很大的影響,從而降低了物體檢測的定位準確性。

4.YOLO的缺點

YOLO對相互靠的很近的物體,還有很小的群體 檢測效果不好,這是因為一個網格中只預測了兩個框,並且只屬於一類。

同一類物體出現的新的不常見的長寬比和其他情況時,泛化能力偏弱。

由於損失函數的問題,定位誤差是影響檢測效果的主要原因。尤其是大小物體的處理上,還有待加強。

YOLO9000 YOLOv2

原文下載:https://arxiv.org/pdf/1612.08242v1.pdf

工程代碼:http://pjreddie.com/darknet/yolo/

摘要提出YOLOv2:代表著目前業界最先進物體檢測的水平,它的速度要快過其他檢測系統(FasterR-CNN,ResNet,SSD),使用者可以在它的速度與精確度之間進行權衡。提出YOLO9000:這一網絡結構可以實時地檢測超過9000種物體分類,這歸功於它使用了WordTree,通過WordTree來混合檢測數據集與識別數據集之中的數據。提出了一種新的聯合訓練算法( Joint Training Algorithm ),使用這種聯合訓練技術同時在ImageNet和COCO數據集上進行訓練。YOLO9000進一步縮小了監測數據集與識別數據集之間的代溝。簡介

目前的檢測數據集(DetectionDatasets)有很多限制,分類標籤的信息太少,圖片的數量小於分類數據集(Classification Datasets),而且檢測數據集的成本太高,使其無法當作分類數據集進行使用。而現在的分類數據集卻有著大量的圖片和十分豐富分類信息。

文章提出了一種新的訓練方法–聯合訓練算法,這種算法可以把這兩種的數據集混合到一起。使用一種分層的觀點對物體進行分類,用巨量的分類數據集數據來擴充檢測數據集,從而把兩種不同的數據集混合起來。

聯合訓練算法的基本思路就是:同時在檢測數據集和分類數據集上訓練物體檢測器(Object Detectors ),用監測數據集的數據學習物體的準確位置,用分類數據集的數據來增加分類的類別量、提升健壯性。

YOLO9000就是使用聯合訓練算法訓練出來的,他擁有9000類的分類信息,這些分類信息學習自ImageNet分類數據集,而物體位置檢測則學習自COCO檢測數據集。

All of our code and pre-trained models are available online at http://pjreddie.com/yolo9000/

BETTER

YOLO一代有很多缺點,作者希望改進的方向是:改善recall,提升定位的準確度,同時保持分類的準確度。

目前計算機視覺的趨勢是更大更深的網絡,更好的性能表現通常依賴於訓練更大的網絡或者把多種model綜合到一起。但是YOLO v2則著力於簡化網絡。具體的改進見下表:

使用Batch Normalization對網絡進行優化,讓網絡提高了收斂性,同時還消除了對其他形式的正則化(regularization)的依賴。通過對YOLO的每一個卷積層增加Batch Normalization,最終使得mAP提高了2%,同時還使model正則化。使用Batch Normalization可以從model中去掉Dropout,而不會產生過擬合。

High resolution classifier

目前業界標準的檢測方法,都要先把分類器(classifier)放在ImageNet上進行預訓練。從Alexnet開始,大多數的分類器都運行在小於256*256的圖片上。而現在YOLO從224*224增加到了448*448,這就意味著網絡需要適應新的輸入解析度。

為了適應新的解析度,YOLO v2的分類網絡以448*448的解析度先在ImageNet上進行Fine Tune,Fine Tune10個epochs,讓網絡有時間調整他的濾波器(filters),好讓其能更好的運行在新解析度上,還需要調優用於檢測的Resulting Network。最終通過使用高解析度,mAP提升了4%。

Convolution with anchor boxes

YOLO一代包含有全連接層,從而能直接預測Bounding Boxes的坐標值。Faster R-CNN的方法只用卷積層與Region Proposal Network來預測Anchor Box的偏移值與置信度,而不是直接預測坐標值。作者發現通過預測偏移量而不是坐標值能夠簡化問題,讓神經網絡學習起來更容易。

所以最終YOLO去掉了全連接層,使用Anchor Boxes來預測 Bounding Boxes。作者去掉了網絡中一個Pooling層,這讓卷積層的輸出能有更高的解析度。收縮網絡讓其運行在416*416而不是448*448。由於圖片中的物體都傾向於出現在圖片的中心位置,特別是那種比較大的物體,所以有一個單獨位於物體中心的位置用於預測這些物體。YOLO的卷積層採用32這個值來下採樣圖片,所以通過選擇416*416用作輸入尺寸最終能輸出一個13*13的Feature Map。使用Anchor Box會讓精確度稍微下降,但用了它能讓YOLO能預測出大於一千個框,同時recall達到88%,mAP達到69.2%。

之前Anchor Box的尺寸是手動選擇的,所以尺寸還有優化的餘地。為了優化,在訓練集(training set)Bounding Boxes上跑了一下k-means聚類,來找到一個比較好的值。

如果我們用標準的歐式距離的k-means,尺寸大的框比小框產生更多的錯誤。因為我們的目的是提高IOU分數,這依賴於Box的大小,所以距離度量的使用:

通過分析實驗結果(Figure 2),左圖:在model複雜性與high recall之間權衡之後,選擇聚類分類數K=5。右圖:是聚類的中心,大多數是高瘦的Box。

Table1是說明用K-means選擇Anchor Boxes時,當Cluster IOU選擇值為5時,AVG IOU的值是61,這個值要比不用聚類的方法的60.9要高。選擇值為9的時候,AVG IOU更有顯著提高。總之就是說明用聚類的方法是有效果的。

Direct location prediction

用Anchor Box的方法,會讓model變得不穩定,尤其是在最開始的幾次迭代的時候。大多數不穩定因素產生自預測Box的(x,y)位置的時候。按照之前YOLO的方法,網絡不會預測偏移量,而是根據YOLO中的網格單元的位置來預測坐標,這就讓Ground Truth的值介於0到1之間。而為了讓網絡的結果能落在這一範圍內,網絡使用一個 Logistic Activation來對於網絡預測結果進行限制,讓結果介於0到1之間。網絡在每一個網格單元中預測出5個Bounding Boxes,每個Bounding Boxes有五個坐標值tx,ty,tw,th,t0,他們的關係見下圖(Figure3)。假設一個網格單元對於圖片左上角的偏移量是cx,cy,Bounding Boxes Prior的寬度和高度是pw,ph,那麼預測的結果見下圖右面的公式:

因為使用了限制讓數值變得參數化,也讓網絡更容易學習、更穩定。

Dimension clusters和Direct location prediction,improves YOLO by almost 5% over the version with anchor boxes.

YOLO修改後的Feature Map大小為13*13,這個尺寸對檢測圖片中尺寸大物體來說足夠了,同時使用這種細粒度的特徵對定位小物體的位置可能也有好處。Faster R-CNN、SSD都使用不同尺寸的Feature Map來取得不同範圍的解析度,而YOLO採取了不同的方法,YOLO加上了一個Passthrough Layer來取得之前的某個26*26解析度的層的特徵。這個Passthrough layer能夠把高解析度特徵與低解析度特徵聯繫在一起,聯繫起來的方法是把相鄰的特徵堆積在不同的Channel之中,這一方法類似與Resnet的Identity Mapping,從而把26*26*512變成13*13*2048。YOLO中的檢測器位於擴展後(expanded )的Feature Map的上方,所以他能取得細粒度的特徵信息,這提升了YOLO 1%的性能。

作者希望YOLO v2能健壯的運行於不同尺寸的圖片之上,所以把這一想法用於訓練model中。

區別於之前的補全圖片的尺寸的方法,YOLO v2每迭代幾次都會改變網絡參數。每10個Batch,網絡會隨機地選擇一個新的圖片尺寸,由於使用了下採樣參數是32,所以不同的尺寸大小也選擇為32的倍數{320,352…..608},最小320*320,最大608*608,網絡會自動改變尺寸,並繼續訓練的過程。

這一政策讓網絡在不同的輸入尺寸上都能達到一個很好的預測效果,同一網絡能在不同解析度上進行檢測。當輸入圖片尺寸比較小的時候跑的比較快,輸入圖片尺寸比較大的時候精度高,所以你可以在YOLO v2的速度和精度上進行權衡。

Figure4,Table 3:在voc2007上的速度與精度

Further Experiments

Faster

YOLO使用的是GoogleLeNet,比VGG-16快,YOLO完成一次前向過程只用8.52 billion 運算,而VGG-16要30.69billion,但是YOLO精度稍低於VGG-16。

YOLO v2基於一個新的分類model,有點類似與VGG。YOLO v2使用3*3filter,每次Pooling之後都增加一倍Channels的數量。YOLO v2使用全局平均Pooling,使用Batch Normilazation來讓訓練更穩定,加速收斂,使model規範化。

最終的model–Darknet19,有19個卷積層和5個maxpooling層,處理一張圖片只需要5.58 billion次運算,在ImageNet上達到72.9%top-1精確度,91.2%top-5精確度。

Training for classification

網絡訓練在 ImageNet 1000類分類數據集,訓練了160epochs,使用隨機梯度下降,初始學習率為0.1, polynomial

rate decay with a power of 4, weight decay of 0.0005 and momentum of 0.9 。訓練期間使用標準的數據擴大方法:隨機裁剪、旋轉、變換顏色(hue)、變換飽和度(saturation), 變換曝光度(exposure shifts)。

在訓練時,把整個網絡在更大的448*448解析度上Fine Turnning 10個 epoches,初始學習率設置為0.001,這種網絡達到達到76.5%top-1精確度,93.3%top-5精確度。

網絡去掉了最後一個卷積層,而加上了三個3*3卷積層,每個卷積層有1024個Filters,每個卷積層緊接著一個1*1卷積層, with

the number of outputs we need for detection。

對於VOC數據,網絡預測出每個網格單元預測五個Bounding Boxes,每個Bounding Boxes預測5個坐標和20類,所以一共125個Filters,增加了Passthough層來獲取前面層的細粒度信息,網絡訓練了160epoches,初始學習率0.001,dividing it by 10 at 60 and 90 epochs,a weight decay of 0.0005 and momentum of 0.9,數據擴大方法相同,對COCO與VOC數據集的訓練對策相同。

Stronger

在訓練的過程中,當網絡遇到一個來自檢測數據集的圖片與標記信息,那麼就把這些數據用完整的YOLO v2 loss功能反向傳播這個圖片。當網絡遇到一個來自分類數據集的圖片和分類標記信息,只用整個結構中分類部分的loss功能反向傳播這個圖片。
但是檢測數據集只有粗粒度的標記信息,像「貓「、「 狗」之類,而分類數據集的標籤信息則更細粒度,更豐富。比如狗這一類就包括」哈士奇「」牛頭梗「」金毛狗「等等。所以如果想同時在監測數據集與分類數據集上進行訓練,那麼就要用一種一致性的方法融合這些標籤信息。
再者,用於分類的方法,大多是用softmax layer方法,softmax意味著分類的類別之間要互相獨立的。而盲目地混合數據集訓練,就會出現比如:檢測數據集的分類信息中」狗「這一分類,在分類數據集合中,就會有的不同種類的狗」哈士奇「」牛頭梗「」金毛「這些分類,這兩種數據集之間的分類信息不相互獨立。所以使用一種多標籤的model來混合數據集,假設一個圖片可以有多個分類信息,並假定分類信息必須是相互獨立的規則可以被忽略。

Hierarchical classification

WordNet的結構是一個直接圖表(directed graph),而不是樹型結構。因為語言是複雜的,狗這個詞既屬於『犬科』又屬於『家畜』兩類,而『犬科』和『家畜』兩類在wordnet中則是同義詞,所以不能用樹形結構。

作者希望根據ImageNet中包含的概念來建立一個分層樹,為了建立這個分層樹,首先檢查ImagenNet中出現的名詞,再在WordNet中找到這些名詞,再找到這些名詞到達他們根節點的路徑(在這裡設為所有的根節點為實體對象(physical object))。在WordNet中,大多數同義詞只有一個路徑,所以首先把這條路徑中的詞全部都加到分層樹中。接著迭代地檢查剩下的名詞,並儘可能少的把他們添加到分層樹上,添加的原則是取最短路徑加入到樹中。

為了計算某一結點的絕對概率,只需要對這一結點到根節點的整條路徑的所有概率進行相乘。所以比如你想知道一個圖片是否是Norfolk terrier的概率,則進行如下計算:

為了驗證這一個方法,在WordTree上訓練Darknet19的model,使用1000類的ImageNet進行訓練,為了建立WordtTree 1K,把所有中間詞彙加入到WordTree上,把標籤空間從1000擴大到了1369。在訓練過程中,如果有一個圖片的標籤是」Norfolk terrier「,那麼這個圖片還會獲得」狗「(dog)以及「哺乳動物」(mammal)等標籤。總之現在一張圖片是多標記的,標記之間不需要相互獨立。

如Figure5所示,之前的ImageNet分類是使用一個大softmax進行分類。而現在,WordTree只需要對同一概念下的同義詞進行softmax分類。

使用相同的訓練參數,這種分層結構的Darknet19達到71.9%top-1精度和90.4%top-5精確度,精度只有微小的下降。

這種方法的好處:在對未知或者新的物體進行分類時,性能降低的很優雅(gracefully)。比如看到一個狗的照片,但不知道是哪種種類的狗,那麼就高置信度(confidence)預測是」狗「,而其他狗的種類的同義詞如」哈士奇「」牛頭梗「」金毛「等這些則低置信度。

Datasets combination with wordtree

用WordTree 把數據集合中的類別映射到分層樹中的同義詞上,例如上圖Figure 6,WordTree混合ImageNet與COCO。

Joint classification and detection

作者的目的是:訓練一個Extremely Large Scale檢測器。所以訓練的時候使用WordTree混合了COCO檢測數據集與ImageNet中的Top9000類,混合後的數據集對應的WordTree有9418個類。另一方面,由於ImageNet數據集太大了,作者為了平衡一下兩個數據集之間的數據量,通過過採樣(oversampling)COCO數據集中的數據,使COCO數據集與ImageNet數據集之間的數據量比例達到1:4。

YOLO9000的訓練基於YOLO v2的構架,但是使用3priors而不是5來限制輸出的大小。當網絡遇到檢測數據集中的圖片時則正常地反方向傳播,當遇到分類數據集圖片的時候,只使用分類的loss功能進行反向傳播。同時作者假設IOU最少為 .3。最後根據這些假設進行反向傳播。

使用聯合訓練法,YOLO9000使用COCO檢測數據集學習檢測圖片中的物體的位置,使用ImageNet分類數據集學習如何從大量的類別中進行分類。

為了評估這一方法,使用ImageNet Detection Task對訓練結果進行評估。

評估結果:
YOLO9000取得19.7mAP。
在未學習過的156個分類數據上進行測試,mAP達到16.0。
YOLO9000的mAP比DPM高,而且YOLO有更多先進的特徵,YOLO9000是用部分監督的方式在不同訓練集上進行訓練,同時還能檢測9000個物體類別,並保證實時運行。

雖然YOLO9000對動物的識別性能很好,但是對類別為」sungalsses「或者」swimming trunks「這些衣服或者裝備的類別,它的識別性能不是很好,見table 7。這跟數據集的數據組成有很大關係。

總結

YOLO v2 代表著目前最先進物體檢測的水平,在多種監測數據集中都要快過其他檢測系統,並可以在速度與精確度上進行權衡。

YOLO 9000 的網絡結構允許實時地檢測超過9000種物體分類,這歸功於它能同時優化檢測與分類功能。使用WordTree來混合來自不同的資源的訓練數據,並使用聯合優化技術同時在ImageNet和COCO數據集上進行訓練,YOLO9000進一步縮小了監測數據集與識別數據集之間的大小代溝。

文章還提出了WordTree,數據集混合訓練,多尺寸訓練等全新的訓練方法。

YOLO v3

YOLOv3在Pascal Titan X上處理608x608圖像速度達到20FPS,在 COCO test-dev 上 mAP@0.5 達到 57.9%,與RetinaNet(FocalLoss論文所提出的單階段網絡)的結果相近,並且速度快4倍.

YOLO v3的模型比之前的模型複雜了不少,可以通過改變模型結構的大小來權衡速度與精度。

速度對比如下:

YOLOv3 在實現相同準確度下要顯著地比其它檢測方法快。時間都是在採用 M40 或 Titan X 等相同 GPU 下測量的。

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

改進之處:

2.更好的基礎分類網絡(類ResNet)和分類器 darknet-53,見下圖。

3.分類器-類別預測:
        YOLOv3不使用Softmax對每個框進行分類,主要考慮因素有兩個:

a.Softmax使得每個框分配一個類別(score最大的一個),而對於Open Images這種數據集,目標可能有重疊的類別標籤,因此Softmax不適用於多標籤分類。b.Softmax可被獨立的多個logistic分類器替代,且準確率不會下降。
        分類損失採用binary cross-entropy loss.

多尺度預測

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

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

參見網絡結構定義文件yolov3.cfg

基礎網絡 Darknet-53

darknet-53

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

主幹架構的性能對比

檢測結構如下:

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

邊框預測

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

仍採用之前的logis,其中cx,cy是網格的坐標偏移量,pw,ph是預設的anchor box的邊長.最終得到的邊框坐標值是b*,而網絡學習目標是t*,用sigmod函數、指數轉換。

優點

通用性強。YOLO對於藝術類作品中的物體檢測同樣適用。它對非自然圖像物體的檢測率遠遠高於DPM和RCNN系列檢測方法。

但相比RCNN系列物體檢測方法,YOLO具有以下缺點:

召回率低。在每個網格中預測兩個box這種約束方式減少了對同一目標的多次檢測(R-CNN使用的region proposal方式重疊較多),相比R-CNN使用Selective Search產生2000個proposal(RCNN測試時每張超過40秒),yolo僅使用7x7x2個.

YOLO v.s Faster R-CNN

YOLO沒有顯示求取region proposal的過程。Faster R-CNN中儘管RPN與fast rcnn共享卷積層,但是在模型訓練過程中,需要反覆訓練RPN網絡和fast rcnn網絡.

相對於R-CNN系列的"看兩眼"(候選框提取與分類,圖示如下),YOLO只需要Look Once.
2.  YOLO統一為一個回歸問題,而R-CNN將檢測結果分為兩部分求解:物體類別(分類問題),物體位置即bounding box(回歸問題)。

YOLOv4

YOLOv4包含以下信息:

Tricks(backbone):CutMix、Mosaic、DropBlock、Label SmoothingModified(backbone): Mish、CSP、MiWRCTricks(detector):CIoU、CMBN、DropBlock、Mosaic、SAT、Eliminate grid sensitivity、Multiple Anchor、Cosine Annealing scheduler、Random training shapeModified(tector):Mish、SPP、SAM、PAN、DIoU-NMS

詳細解讀戳這裡

參考

YOLO主頁 https://pjreddie.com/darknet/yolo/ 

YOLOv3: An Incremental Improvement https://pjreddie.com/media/files/papers/YOLOv3.pdf 

YOLO9000: Better, Faster, Stronger https://arxiv.org/abs/1612.08242

You Only Look Once: Unified, Real-Time Object Detection http://arxiv.org/abs/1506.02640

相關焦點

  • 萬字長文綜述Yolov3&Yolov4核心知識
    在此,大白將項目中,需要了解的Yolov3、Yolov4系列相關知識點以及相關代碼進行完整的匯總,希望和大家共同學習探討。文章目錄1. 論文匯總2.是目標檢測Yolo系列非常非常經典的算法,不過很多同學拿到Yolov3或者Yolov4的cfg文件時,並不知道如何直觀的可視化查看網絡結構。
  • 大神接棒,YOLOv4來了!
    重磅乾貨,第一時間送達前言今天刷屏的動態一定是 YOLOv4之前,YOLO系列(v1-v3)作者 Joe Redmon 宣布不再繼續CV方向的研究,引起學術圈一篇譁然。YOLO之父宣布退出CV界,坦言無法忽視自己工作帶來的負面影響
  • YOLO系列:YOLOv1,YOLOv2,YOLOv3,YOLOv4,YOLOv5簡介
    Faster R-CNN中儘管RPN與fast rcnn共享卷積層,但是在模型訓練過程中,需要反覆訓練RPN網絡和fast rcnn網絡.相對於R-CNN系列的"看兩眼"(候選框提取與分類),YOLO只需要Look Once.2.
  • 深入淺出Yolo系列之Yolov3&Yolov4核心基礎知識完整講解
    Detection》Yolov4論文地址:https://arxiv.org/pdf/2004.10934.pdf2.YoloV3核心基礎內容2.1 網絡結構可視化Yolov3是目標檢測Yolo系列非常非常經典的算法,不過很多同學拿到Yolov3或者Yolov4
  • 使用python輕鬆實現高大上的YOLOV4對象檢測算法
    YOLO系列對象檢測算法,算是人工智慧技術領域的一匹黑馬,當開發者宣布不再為YOLO系列檢測算法更新時,很多開發者瞬間失去了」精神食糧「。
  • YOLOv5來了!基於PyTorch,體積比YOLOv4小巧90%,速度卻超2倍
    2020年4月,Alexey Bochkovskiy、Chien-Yao Wang和Hong-Yuan Mark Liao推出了YOLOv4,展示了令人印象深刻的成果。值得注意的是,YOLOv4的許多改進來自於改進的數據增強和模型架構。我們已經寫了關於YOLOv4的分析,以及如何在自定義對象上訓練YOLOv4模型)。
  • YOLOv5 深度可視化解析
    yolov5和前yolo系列在網絡設計方面差別不大,如果要說差別的話,那就是在loss設計上面和前yolo系列存在較大差別,後面會細說。簡單概述來說整個yolov5就是:通過應用類似EfficientNet的channel和layer控制因子來靈活配置不同複雜度的模型,並且在正負樣本定義階段採用了跨鄰域網格的匹配策略,從而得到更多的正樣本anchor,加速收斂。
  • YOLOv4官方改進版來了!55.8% AP!速度最高達1774 FPS,Scaled-YOLOv4正式開源!
    -cspYOLOv4-tiny: https://github.com/WongKinYiu/ScaledYOLOv4/tree/yolov4-tinyYOLOv4-large: https://github.com/WongKinYiu/ScaledYOLOv4/tree/yolov4-large
  • YOLOv4 最強PyTorch復現來了!
    從今年4月 YOLOv4yolov4-tiny2020-07-15 - design and training conditional YOLOv4. yolov4-pacsp-conditional2020-07-13 - support MixUp data augmentation.
  • YOLOv4 的各種新實現、配置、測試、訓練資源匯總
    https://github.com/rrddcc/YOLOv4_tensorflow3、YOLOv4 的 TensorFlow 實現.https://github.com/klauspa/Yolov4-tensorflow4、YOLOv4 的 PyTorch 實現https://github.com/GZQ0723/YoloV45、YOLOv4(TensorFlow後端)的 Keras 實現https://github.com/Ma-Dan/keras-yolo4
  • win10系統下搭建yolov4環境
    yolov4比上代的v3有提升,yolov4其實和tensorflow objection dection 目標檢測差不多
  • 【CV】YOLOv4最全復現代碼合集(含PyTorch/TF/Keras和Caffe等)
    前言2020年4月24日,CVer第一時間推文:大神接棒,YOLOv4距離YOLOv4正式推出,已經2個多月了。因為YOLO系列官方源碼(v1-v4)都是用 C 語言編寫的,代碼太"硬核"。很多人習慣用Python搞事情,所以網上出現了各種基於 xxx 框架的 YOLOv4復現版本。
  • YOLOv4最全復現代碼合集(含PyTorch/TF/Keras和Caffe等)
    重磅乾貨,第一時間送達前言2020年4月24日,CVer第一時間推文:大神接棒,YOLOv4距離YOLOv4正式推出,已經2個多月了。因為YOLO系列官方源碼(v1-v4)都是用 C 語言編寫的,代碼太"硬核"。
  • 【他山之石】Pytorch搭建YoloV4目標檢測平臺
    __init__() self.maxpools = nn.ModuleList([nn.MaxPool2d(pool_size, 1, pool_size//2) for pool_size in pool_sizes]) def forward(self, x): features = [maxpool(x) for maxpool in self.maxpools
  • YOLO v1到YOLO v4(上)
    標題:YOLO v1到YOLO v4(上)作者:吳建明wujianning來源:https://zhuanlan.zhihu.com/p/138623231備註:本文由知乎作者授權轉載,未經允許不得二次轉載歡迎各位加入免費知識星球,獲取PDF論文,歡迎轉發朋友圈分享快樂。
  • 目標檢測實戰:4種YOLO目標檢測的C++和Python兩種版本實現
    在此之前,我已經在github發布過YOLOv4,Yolo-Fastest,YOLObile這三種YOLO基於OpenCV做目標檢測的程序,但是這些程序是用Python編寫的。接下來,我就使用C++編寫一套基於OpenCV的YOLO目標檢測,這個程序裡包含了經典的YOLOv3,YOLOv4,Yolo-Fastest和YOLObile這4種YOLO目標檢測的實現。
  • YOLOv4的PyTorch最小化實現
    Paper Yolo v4: https://arxiv.org/abs/2004.10934Source code:https://github.com/AlexeyAB/darknetMore details: http://pjreddie.com/darknet/yolo/ Inference Train
  • YOLOv4-Tiny來了!371 FPS!
    不過,Amusi 也調查到了關於YOLOv4-Tiny的細節,AlexeyAB 在github回復網友提問的內容如下:There is used resize=1.5 instead of random=1, that you suggested, congrats!
  • 安卓手機也能跑YOLOv5了!
    git clone —recursive https://github.com/lp6m/yolov5s_androidcd yolov5s_android docker build ./ -f ./docker/Dockerfile -t yolov5s_android docker run -it —gpus all -v pwd:/workspace yolov5s_anrdoid bash將app文件夾下的.
  • 實戰 | 如何將YOLOv4部署到無人機?
    將圖像文件(.jpg)與標註文件放入到如下路徑darknet\data\coco\路徑下將scaled_images裡的圖像拷貝到 /home/user/darknet/data/coco/images/train下將Yolo_labels裡的標註文件拷貝到/home/user/darknet/data/coco/images/train下將Yolo_20180908