YOLO系列是基于深度學(xué)習(xí)的回歸方法。
RCNN, Fast-RCNN,F(xiàn)aster-RCNN是基于深度學(xué)習(xí)的分類方法。 YOLO官網(wǎng):https://github.com/pjreddie/darknet
YOLOV1
論文下載:https://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)格就負(fù)責(zé)預(yù)測這個object。
每個網(wǎng)絡(luò)需要預(yù)測B個BBox的位置信息和confidence(置信度)信息,一個BBox對應(yīng)著四個位置信息和一個confidence信息。confidence代表了所預(yù)測的box中含有object的置信度和這個box預(yù)測的有多準(zhǔn)兩重信息:
其中如果有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準(zhǔn)確度的信息。
得到每個box的class-specific confidence score以后,設(shè)置閾值,濾掉得分低的boxes,對保留的boxes進行NMS處理,就得到最終的檢測結(jié)果。
損失函數(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維的坐標(biāo)預(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專門負(fù)責(zé)預(yù)測某個object。具體做法就是看當(dāng)前預(yù)測的box與ground truth box中哪個IoU大,就負(fù)責(zé)哪個。這種做法稱作box predictor的specialization。 最后整個的損失函數(shù)如下所示:
這個損失函數(shù)中:
只有當(dāng)某個網(wǎng)格中有object的時候才對classification error進行懲罰。
只有當(dāng)某個box predictor對某個ground truth box負(fù)責(zé)的時候,才會對box的coordinate error進行懲罰,而對哪個ground truth box負(fù)責(zé)就看其預(yù)測值和ground truth box的IoU是不是在那個cell的所有box中最大。
其他細(xì)節(jié),例如使用激活函數(shù)使用leak RELU,模型用ImageNet預(yù)訓(xùn)練等等
缺點
由于輸出層為全連接層,因此在檢測時,YOLO訓(xùn)練模型只支持與訓(xùn)練圖像相同的輸入分辨率。
雖然每個格子可以預(yù)測B個bounding box,但是最終只選擇只選擇IOU最高的bounding box作為物體檢測輸出,即每個格子最多只預(yù)測出一個物體。當(dāng)物體占畫面比例較小,如圖像中包含畜群或鳥群時,每個格子包含多個物體,但卻只能檢測出其中一個。這是YOLO方法的一個缺陷。
YOLO loss函數(shù)中,大物體IOU誤差和小物體IOU誤差對網(wǎng)絡(luò)訓(xùn)練中l(wèi)oss貢獻值接近(雖然采用求平方根方式,但沒有根本解決問題)。因此,對于小物體,小的IOU誤差也會對網(wǎng)絡(luò)優(yōu)化過程造成很大的影響,從而降低了物體檢測的定位準(zhǔn)確性。
YOLOv2(YOLO9000)
文章提出了一種新的訓(xùn)練方法–聯(lián)合訓(xùn)練算法,這種算法可以把這兩種的數(shù)據(jù)集混合到一起。使用一種分層的觀點對物體進行分類,用巨量的分類數(shù)據(jù)集數(shù)據(jù)來擴充檢測數(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ù)集。
改進
Batch Normalization使用Batch Normalization對網(wǎng)絡(luò)進行優(yōu)化,讓網(wǎng)絡(luò)提高了收斂性,同時還消除了對其他形式的正則化(regularization)的依賴。通過對YOLO的每一個卷積層增加Batch Normalization,最終使得mAP提高了2%,同時還使model正則化。使用Batch Normalization可以從model中去掉Dropout,而不會產(chǎn)生過擬合。High resolution classifier目前業(yè)界標(biāo)準(zhǔn)的檢測方法,都要先把分類器(classi?er)放在ImageNet上進行預(yù)訓(xùn)練。從Alexnet開始,大多數(shù)的分類器都運行在小于256*256的圖片上。而現(xiàn)在YOLO從224*224增加到了448*448,這就意味著網(wǎng)絡(luò)需要適應(yīng)新的輸入分辨率。
為了適應(yīng)新的分辨率,YOLO v2的分類網(wǎng)絡(luò)以448*448的分辨率先在ImageNet上進行Fine Tune,F(xiàn)ine Tune10個epochs,讓網(wǎng)絡(luò)有時間調(diào)整他的濾波器(filters),好讓其能更好的運行在新分辨率上,還需要調(diào)優(yōu)用于檢測的Resulting Network。最終通過使用高分辨率,mAP提升了4%。Convolution with anchor boxesYOLOV1包含有全連接層,從而能直接預(yù)測Bounding Boxes的坐標(biāo)值。Faster R-CNN的方法只用卷積層與Region Proposal Network來預(yù)測Anchor Box的偏移值與置信度,而不是直接預(yù)測坐標(biāo)值。作者發(fā)現(xiàn)通過預(yù)測偏移量而不是坐標(biāo)值能夠簡化問題,讓神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)起來更容易。
所以最終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)化的余地。為了優(yōu)化,在訓(xùn)練集(training set)Bounding Boxes上跑了一下k-means聚類,來找到一個比較好的值。 如果我們用標(biāo)準(zhǔn)的歐式距離的k-means,尺寸大的框比小框產(chǎn)生更多的錯誤。因為我們的目的是提高IOU分?jǐn)?shù),這依賴于Box的大小,所以距離度量的使用:
通過分析實驗結(jié)果(Figure 2),左圖:在model復(fù)雜性與high recall之間權(quán)衡之后,選擇聚類分類數(shù)K=5。右圖:是聚類的中心,大多數(shù)是高瘦的Box。 Table1是說明用K-means選擇Anchor Boxes時,當(dāng)Cluster IOU選擇值為5時,AVG IOU的值是61,這個值要比不用聚類的方法的60.9要高。選擇值為9的時候,AVG IOU更有顯著提高??傊褪钦f明用聚類的方法是有效果的。
Direct location prediction
用Anchor Box的方法,會讓model變得不穩(wěn)定,尤其是在最開始的幾次迭代的時候。大多數(shù)不穩(wěn)定因素產(chǎn)生自預(yù)測Box的(x,y)位置的時候。按照之前YOLO的方法,網(wǎng)絡(luò)不會預(yù)測偏移量,而是根據(jù)YOLO中的網(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é)果進行限制,讓結(jié)果介于0到1之間。網(wǎng)絡(luò)在每一個網(wǎng)格單元中預(yù)測出5個Bounding Boxes,每個Bounding Boxes有五個坐標(biāo)值tx,ty,tw,th,t0,他們的關(guān)系見下圖(Figure3)。假設(shè)一個網(wǎng)格單元對于圖片左上角的偏移量是cx,cy,Bounding Boxes Prior的寬度和高度是pw,ph,那么預(yù)測的結(jié)果見下圖右面的公式:
因為使用了限制讓數(shù)值變得參數(shù)化,也讓網(wǎng)絡(luò)更容易學(xué)習(xí)、更穩(wěn)定。Fine-Grained FeaturesYOLO修改后的Feature Map大小為13*13,這個尺寸對檢測圖片中尺寸大物體來說足夠了,同時使用這種細(xì)粒度的特征對定位小物體的位置可能也有好處。Faster R-CNN、SSD都使用不同尺寸的Feature Map來取得不同范圍的分辨率,而YOLO采取了不同的方法,YOLO加上了一個Passthrough Layer來取得之前的某個26*26分辨率的層的特征。
這個Passthrough layer能夠把高分辨率特征與低分辨率特征聯(lián)系在一起,聯(lián)系起來的方法是把相鄰的特征堆積在不同的Channel之中,這一方法類似與Resnet的Identity Mapping,從而把26*26*512變成13*13*2048。YOLO中的檢測器位于擴展后(expanded )的Feature Map的上方,所以他能取得細(xì)粒度的特征信息,這提升了YOLO 1%的性能。Multi-ScaleTraining作者希望YOLO v2能健壯的運行于不同尺寸的圖片之上,所以把這一想法用于訓(xùn)練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ù)訓(xùn)練的過程。 這一政策讓網(wǎng)絡(luò)在不同的輸入尺寸上都能達到一個很好的預(yù)測效果,同一網(wǎng)絡(luò)能在不同分辨率上進行檢測。當(dāng)輸入圖片尺寸比較小的時候跑的比較快,輸入圖片尺寸比較大的時候精度高,所以你可以在YOLO v2的速度和精度上進行權(quán)衡。 Figure4,Table 3:在voc2007上的速度與精度
YOLOV3
YOLO v3的模型比之前的模型復(fù)雜了不少,可以通過改變模型結(jié)構(gòu)的大小來權(quán)衡速度與精度。 速度對比如下:
簡而言之,YOLOv3 的先驗檢測(Prior detection)系統(tǒng)將分類器或定位器重新用于執(zhí)行檢測任務(wù)。他們將模型應(yīng)用于圖像的多個位置和尺度。而那些評分較高的區(qū)域就可以視為檢測結(jié)果。此外,相對于其它目標(biāo)檢測方法,我們使用了完全不同的方法。我們將一個單神經(jīng)網(wǎng)絡(luò)應(yīng)用于整張圖像,該網(wǎng)絡(luò)將圖像劃分為不同的區(qū)域,因而預(yù)測每一塊區(qū)域的邊界框和概率,這些邊界框會通過預(yù)測的概率加權(quán)。我們的模型相比于基于分類器的系統(tǒng)有一些優(yōu)勢。它在測試時會查看整個圖像,所以它的預(yù)測利用了圖像中的全局信息。與需要數(shù)千張單一目標(biāo)圖像的 R-CNN 不同,它通過單一網(wǎng)絡(luò)評估進行預(yù)測。這令 YOLOv3 非???,一般它比 R-CNN 快 1000 倍、比 Fast R-CNN 快 100 倍。
改進之處
多尺度預(yù)測 (類FPN)
更好的基礎(chǔ)分類網(wǎng)絡(luò)(類ResNet)和分類器 darknet-53,見下圖。
分類器-類別預(yù)測。
YOLOv3不使用Softmax對每個框進行分類,主要考慮因素有兩個:
Softmax使得每個框分配一個類別(score最大的一個),而對于Open Images這種數(shù)據(jù)集,目標(biāo)可能有重疊的類別標(biāo)簽,因此Softmax不適用于多標(biāo)簽分類。
Softmax可被獨立的多個logistic分類器替代,且準(zhǔn)確率不會下降。
分類損失采用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)定義文件https://github.com/pjreddie/darknet/blob/master/cfg/yolov3.cfg 基礎(chǔ)網(wǎng)絡(luò) Darknet-53
darknet-53
仿ResNet, 與ResNet-101或ResNet-152準(zhǔn)確率接近,但速度更快.對比如下:
主干架構(gòu)的性能對比
檢測結(jié)構(gòu)如下:
YOLOv3在mAP@0.5及小目標(biāo)APs上具有不錯的結(jié)果,但隨著IOU的增大,性能下降,說明YOLOv3不能很好地與ground truth切合.
邊框預(yù)測
圖 2:帶有維度先驗和定位預(yù)測的邊界框。我們邊界框的寬和高以作為離聚類中心的位移,并使用 Sigmoid 函數(shù)預(yù)測邊界框相對于濾波器應(yīng)用位置的中心坐標(biāo)。 仍采用之前的logis,其中cx,cy是網(wǎng)格的坐標(biāo)偏移量,pw,ph是預(yù)設(shè)的anchor box的邊長.最終得到的邊框坐標(biāo)值是b*,而網(wǎng)絡(luò)學(xué)習(xí)目標(biāo)是t*,用sigmod函數(shù)、指數(shù)轉(zhuǎn)換。優(yōu)點
快速,pipline簡單.
背景誤檢率低。
通用性強。YOLO對于藝術(shù)類作品中的物體檢測同樣適用。它對非自然圖像物體的檢測率遠(yuǎn)遠(yuǎn)高于DPM和RCNN系列檢測方法。
但相比RCNN系列物體檢測方法,YOLO具有以下缺點:
識別物體位置精準(zhǔn)性差。
召回率低。在每個網(wǎng)格中預(yù)測兩個box這種約束方式減少了對同一目標(biāo)的多次檢測(R-CNN使用的region proposal方式重疊較多),相比R-CNN使用Selective Search產(chǎn)生2000個proposal(RCNN測試時每張超過40秒),yolo僅使用7x7x2個.
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. 提出了一種高效而強大的目標(biāo)檢測模型。它使每個人都可以使用1080 Ti或2080 Ti GPU 訓(xùn)練超快速和準(zhǔn)確的目標(biāo)檢測器(牛逼?。?2. 在檢測器訓(xùn)練期間,驗證了SOTA的Bag-of Freebies 和Bag-of-Specials方法的影響。 3. 改進了SOTA的方法,使它們更有效,更適合單GPU訓(xùn)練,包括CBN [89],PAN [49],SAM [85]等。文章將目前主流的目標(biāo)檢測器框架進行拆分:input、backbone、neck 和 head. 具體如下圖所示:
對于GPU,作者在卷積層中使用:CSPResNeXt50 / CSPDarknet53
對于VPU,作者使用分組卷積,但避免使用(SE)塊-具體來說,它包括以下模型:EfficientNet-lite / MixNet / GhostNet / MobileNetV3
作者的目標(biāo)是在輸入網(wǎng)絡(luò)分辨率,卷積層數(shù),參數(shù)數(shù)量和層輸出(filters)的數(shù)量之間找到最佳平衡。 總結(jié)一下YOLOv4框架:
Backbone:CSPDarknet53
Neck:SPP,PAN
Head:YOLOv3
YOLOv4 =CSPDarknet53+SPP+PAN+YOLOv3 其中YOLOv4用到相當(dāng)多的技巧:
用于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 訓(xùn)練,消除網(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é)果:
YOLO v.s Faster R-CNN
1.統(tǒng)一網(wǎng)絡(luò):YOLO沒有顯示求取region proposal的過程。Faster R-CNN中盡管RPN與fast rcnn共享卷積層,但是在模型訓(xùn)練過程中,需要反復(fù)訓(xùn)練RPN網(wǎng)絡(luò)和fast rcnn網(wǎng)絡(luò).相對于R-CNN系列的"看兩眼"(候選框提取與分類),YOLO只需要Look Once. 2. YOLO統(tǒng)一為一個回歸問題,而R-CNN將檢測結(jié)果分為兩部分求解:物體類別(分類問題),物體位置即bounding box(回歸問題)。
參考
1. V1,V2,V3轉(zhuǎn)載地址: https://blog.csdn.net/App_12062011/article/details/77554288 2. V4轉(zhuǎn)載地址: https://mp.weixin.qq.com/s/Ua3T-DOuzmLWuXfohEiVFw
責(zé)任編輯:xj
原文標(biāo)題:YOLO系列:V1,V2,V3,V4簡介
文章出處:【微信公眾號:新機器視覺】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
-
數(shù)據(jù)
+關(guān)注
關(guān)注
8文章
6842瀏覽量
88758 -
深度學(xué)習(xí)
+關(guān)注
關(guān)注
73文章
5473瀏覽量
120910 -
yolo2
+關(guān)注
關(guān)注
0文章
3瀏覽量
2068
原文標(biāo)題:?YOLO系列:V1,V2,V3,V4簡介
文章出處:【微信號:vision263com,微信公眾號:新機器視覺】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論