目標(biāo)檢測概述
目標(biāo)檢測概述
什么是目標(biāo)檢測?
滑動窗口(Sliding Window)
滑動窗口的效率問題和改進(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)化性能 -
改進(jìn)思路 2:減少冗余計算,使用卷積網(wǎng)絡(luò)實(shí)現(xiàn)密集預(yù)測目前普遍采用的方式
改進(jìn)思路:用卷積一次性計算所有特征,再取出對應(yīng)位置的特征完成分類
原圖滑窗 ?? 重疊區(qū)域重復(fù)計算卷積 ?
特征圖滑窗 ?? 重疊區(qū)域只計算一次卷積特征,與窗的個數(shù)無關(guān) ?
在特征圖上進(jìn)行密集預(yù)測
目標(biāo)檢測的基本范式
-
One Stage: YOLO系列
輸出檢測框的左上角和右下角坐標(biāo) (x1,y1),(x2,y2)
一個CNN網(wǎng)絡(luò)回歸預(yù)測即可 -
Two Stage: Faster-rcnn Mask-Rcnn系列
與one-stage 相比,多了一步提取候選框(預(yù)選)。
目標(biāo)檢測技術(shù)的演進(jìn)
基礎(chǔ)知識和術(shù)語
框、邊界框(Bounding Box)
框泛指圖像上的矩形框,邊界橫平豎直
描述一個框需要 4 個像素值:
? 方式1:左上右下邊界坐標(biāo) ??,??, ??, ??
? 方式2:中心坐標(biāo)和框的長寬 ??, ??, ??, ?
邊界框通常指緊密包圍感興趣物體的框
檢測任務(wù)要求為圖中出現(xiàn)的每個物體預(yù)測一個邊界框
以下這些概念都指某種框,用在不同的上下文中:
-
區(qū)域(Region)
:框的同義詞 -
區(qū)域提議(Region Proposal,Proposal)
指算法預(yù)測的可能包含物體的框,某種識別能力不強(qiáng)的算法的初步預(yù)測結(jié)果 -
感興趣區(qū)域(Region of Interest,RoI)
當(dāng)我們談?wù)撔枰M(jìn)一步檢測這個框中是否有物體時,通常稱框?yàn)楦信d趣區(qū)域 -
錨框(Anchor Box,Anchor)
圖中預(yù)設(shè)的一系列基準(zhǔn)框,類似滑窗,一些檢測算法會基于錨框預(yù)測邊界框
交并比 ( Intersection Over Union,IOU)
交并比(IoU)定義為兩矩形框交集面積與并集面積之比,是矩形框重合程度的衡量指標(biāo)
置信度(Confidence Score)
置信度(Confidence Score):模型認(rèn)可自身預(yù)測結(jié)果的程度,通常需要為每個框預(yù)測一個置信度
大部分算法取分類模型預(yù)測物體屬于特定類別的概率
部分算法讓模型獨(dú)立于分類單獨(dú)預(yù)測一個置信度
我們傾向認(rèn)可置信度高的預(yù)測結(jié)果
非極大值抑制(Non-Maximum Suppression,NMS)
滑窗類算法通常會在物體周圍給出多個相近的檢測框
這些框?qū)嶋H指向同一物體,只需要保留其中置信度最高的。
通過非極大值抑制(NMS)算法實(shí)現(xiàn):
邊界框回歸 (Bounding Box Regression)
問題:滑窗(或其他方式產(chǎn)生的基準(zhǔn)框)與物體精準(zhǔn)邊界通常有偏差。
處理方法:讓模型在預(yù)測物體類別同時預(yù)測邊界框相對于滑窗的偏移量。
邊界框編碼(Bbox Coding)
邊界框的絕對偏移量在數(shù)值上通常較大,不利于神經(jīng)網(wǎng)絡(luò)訓(xùn)練,通常需要對偏移量進(jìn)行編碼,作為回歸
模型的預(yù)測目標(biāo)
感受野
是特征圖上的點(diǎn)能看到原始圖像多大區(qū)域
感受野越大,越能感受全局的物體。
堆疊兩個
3
?
3
3*3
3?3的卷積層,感受野是
5
?
5
5*5
5?5。
堆疊三個
3
?
3
3*3
3?3的卷積層,感受野是
7
?
7
7*7
7?7。
為什么采用小卷積核的堆疊而不是直接采用一個大的卷積核來擴(kuò)大感受野呢?
準(zhǔn)確度和召回率
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圖)
去上限求出與x軸圍成的陰影的面積就是AP的值。如上圖就是長方形A1,A2,A3,A4的面積之和。
對每個類別都計算出AP,求均值得到mAP
單階段和雙階段算法
-
單階段算法
-
雙階段算法
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, 還有置信度(是物體的概率)
網(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表示的是歸一化后的值,是相對位置和大小
損失函數(shù):
優(yōu)缺點(diǎn):
(1)優(yōu)點(diǎn):
- YOLO檢測速度非???。標(biāo)準(zhǔn)版本的YOLO可以每秒處理 45 張圖像;YOLO的極速版本每秒可以處理150幀圖像。這就意味著 YOLO 可以以小于 25 毫秒延遲,實(shí)時地處理視頻。對于欠實(shí)時系統(tǒng),在準(zhǔn)確率保證的情況下,YOLO速度快于其他方法。
- YOLO 實(shí)時檢測的平均精度是其他實(shí)時監(jiān)測系統(tǒng)的兩倍。
- 遷移能力強(qiáng),能運(yùn)用到其他的新的領(lǐng)域(比如藝術(shù)品目標(biāo)檢測)。
(2)局限:
- YOLO對相互靠近的物體,以及很小的群體檢測效果不好,這是因?yàn)橐粋€網(wǎng)格只預(yù)測了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的大小,所以距離度量的使用:
其中,centroid是聚類時被選作中心的邊框,box就是其它邊框,d就是兩者間的“距離”,IOU越大,“距離”越近。YOLOv2給出的聚類分析結(jié)果如下圖所示,通過分析實(shí)驗(yàn)結(jié)果(Figure 2),在model復(fù)雜性與high recall之間權(quán)衡之后,選擇聚類分類數(shù)K=5。 -
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é)果見下圖右面的公式: -
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)過一組卷積)的特征圖,兩者疊加到一起作為輸出的特征圖。
具體怎樣將1個特征圖拆成4個特征圖,見下圖,圖中示例的是1個
4
?
4
4*4
4?4拆成4個
2
?
2
2*2
2?2,因?yàn)樯疃炔蛔?br>
-
多尺度訓(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
訓(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。 -
特征金字塔網(wǎng)絡(luò)(feature parymid network,FPN)
如上圖,物體檢測算法可以分為三步:
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)行融合。
借鑒特征金字塔網(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>
-
殘差連接
思想: 只用好的,不好的舍棄,不比原來差。
-
先驗(yàn)框的設(shè)計
也是通過聚類得到9個先驗(yàn)框。
大的先驗(yàn)框交給1313, 中等交給2626,小的交給52*52。 -
多標(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)屬于該類。
-
損失函數(shù)
YOLOv3的損失函數(shù)表達(dá)式:
對比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。
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),可以看下面這張圖:
圖上的組合單元的注釋如下: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)行拼接。如下圖所示:
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ū)別具體如下圖所示: -
修改過的SAM
作者在原SAM(Spatial Attention Module)方法上進(jìn)行了修改,將SAM從空間注意修改為點(diǎn)注意。如下圖所示,對于常規(guī)的SAM,最大值池化層和平均池化層分別作用于輸入的feature map,得到兩組shape相同的feature map,再將結(jié)果輸入到一個卷積層,接著是一個 Sigmoid 函數(shù)來創(chuàng)建空間注意力。
在YOLOv4中,對原來的SAM方法進(jìn)行了修改。如下圖所示,修改后的SAM直接使用一個卷積層作用于輸入特征,得到輸出特征,然后再使用一個Sigmoid 函數(shù)來創(chuàng)建注意力。作者認(rèn)為,采用這種方式創(chuàng)建的是點(diǎn)注意力。 -
修改過的PAN
作者對原PAN(Path Aggregation Network)方法進(jìn)行了修改, 使用**張量連接(concat)**代替了原來的快捷連接(shortcut connection)。如下圖所示:
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 -
正則化方法有:
DropOut
DropConnect
DropBlock -
回歸損失
IOU 會存在梯度消失的問題
GIOU 引入閉包面積
DIOU引入中心點(diǎn)距離
CIOU引入長寬比
-
-
特價包
- 增大感受野技巧:
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
- 增大感受野技巧:
網(wǎng)絡(luò)結(jié)構(gòu)YOLOv4 = CSPDarknet53(主干) + SPP附加模塊(頸) + PANet路徑聚合(頸) + YOLOv3(頭部)
(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的輸出
而在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ù)的公式與圖像如下:
(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在一起。
在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》
下圖是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)行分析:
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)
上圖展示了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)存需求。
-
自適應(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)變形,如下圖所示:
為了避免這種情況的發(fā)生,YOLOv5采用了灰度填充的方式統(tǒng)一輸入尺寸,避免了目標(biāo)變形的問題?;叶忍畛涞暮诵乃枷刖褪?strong>將原圖的長寬等比縮放對應(yīng)統(tǒng)一尺寸,然后對于空白部分用灰色填充。如下圖所示:
基準(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大小的特征映射。
- 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模塊。
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)。
為了便于分析改進(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)
-
為什么采用解耦頭?
論文作者在實(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é)
我們將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)系。
于是,我們基于硬件感知神經(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 Backbone 和 Rep-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。
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。
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)圖如下圖所示)。
解耦檢測頭(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%。
訓(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 的大小就是最終的輸出了。
主干網(wǎng)絡(luò)
YOLOV7 的 backbone 如下圖所示,總共有50層。
首先是經(jīng)過 4 層卷積層,如下圖,CBS 主要是 Conv + BN + SiLU 構(gòu)成,我在圖中用不同的顏色表示不同的 size 和 stride, 如 (3, 2) 表示卷積核大小為 3 ,步長為 2。 在 config 中的配置如圖。
經(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 輸出為需要的通道。
MP 層 主要是分為 Maxpool 和 CBS , 其中 MP1 和 MP2 主要是通道數(shù)的比變化。
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 層。
檢測頭
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ù)量不同。
對于 pafpn 輸出的 P3、P4 和 P5 , 經(jīng)過 RepConv 調(diào)整通道數(shù),最后使用 1x1 卷積去預(yù)測 objectness、class 和 bbox 三部分。
RepConv 在訓(xùn)練和推理是有一定的區(qū)別。訓(xùn)練時有三個分支的相加輸出,部署時會將分支的參數(shù)重參數(shù)化到主分支上
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的情況。 -
帶輔助訓(xùn)練頭(分損失函數(shù)和匹配策略兩部分討論)
將負(fù)責(zé)最終輸出的Head為lead Head,將用于輔助訓(xùn)練的Head稱為auxiliary Head。
一些細(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í),可能仍然無法完全擬合至效果特別好。
YOLOv8
YOLOv8詳解 【網(wǎng)絡(luò)結(jié)構(gòu)+代碼+實(shí)操】文章來源:http://www.zghlxwxcb.cn/news/detail-488385.html
對比
文章來源地址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)!