YOLOvi(i=1,2,3,4)系列
YOLOvi(i=1,2,3,4)系列
YOLOv4論文鏈接:https://arxiv.org/pdf/2004.10934.pdf
YOLOv4源碼鏈接:https://github.com/AlexeyAB/darknet
YOLO 系列算法是目標檢測 one-stage 類的代表算法,本文將從
問題背景,創新點等方面比較,了解它們的的發展歷程。
一、任務描述
目標檢測是為了解決圖像里的物體是什么,在哪里的問題。輸入一幅圖像,輸出的是圖像里每個物體的類別和位置,其中位置用一個包含物體的框表示。
需要注意目標,同時也是論文中常說的感興趣的物體,指關心的類別(行人檢測只檢測人,交通檢測只關心交通工具等),或者數據集包含的類別,并不是圖像里所有的物體都是目標,比如建筑,草坪也是物體,但他們常常是背景。
從計算機視覺的角度看,目標檢測是分類+定位,從機器學習的角度看,目標檢測是分類+回歸。
二.YOLOv4介紹
論文鏈接:https://arxiv.org/pdf/2004.10934.pdf
源碼鏈接:https://github.com/AlexeyAB/darknet
有大量的特征被認為可以提高卷積神經網絡(CNN)的精度。需要在大型數據集上對這些特征的組合進行實際測試,并對結果進行理論驗證。某些功能只在某些模型上運行,某些問題只在某些模型上運行,或只在小規模數據集上運行;而某些功能(如批處理規范化和殘差連接)適用于大多數模型、任務和數據集。
假設這些通用特征包括加權殘差連接(WRC)、跨階段部分連接(CSP)、跨小批量規范化(CmBN)、自對抗訓練(SAT)和Mish激活。
新功能:WRC、CSP、CmBN、SAT、誤激活、馬賽克數據增強、CmBN、下降塊正則化和CIoU損失,并將其中一些功能結合起來,達到以下效果:43.5%AP(65.7%AP50)的MS COCO數據集,在Tesla V100上以65 FPS的實時速度。
貢獻總結如下:
-
開發了一個高效、強大的目標檢測模型。它使得每個人都可以使用1080Ti或2080Ti的GPU來訓練一個超快速和精確的目標探測器。
-
在探測器培訓期間,驗證了最先進的免費包和特殊包目標檢測方法的影響。
-
修改了最新的方法,使之更有效,更適合于單一GPU訓練,包括CBN[89]、PAN[49]、SAM[85]等。
總之,通用的目標探測由幾個部分組成:
YOLOv4主要模塊:
為使得所涉及的檢測器更適合于單GPU,作者還進行了其他幾項額外設計與改進:
·
引入一種新的數據增廣方法:Mosaic與自對抗訓練;
·
通過GA算法選擇最優超參數;
·
對現有方法進行改進以更適合高效訓練和推理:改進SAM、改進PAN,CmBN。
作者在現有實時網絡的基礎上提出了兩種觀點:
·
對于GPU而言,在組卷積中采用小數量的groups(1-8),比如CSPResNeXt50/CSPDarknet53;
·
對于VPU而言,采用組卷積而不采用SE模塊。
網路結構選擇
網絡結構選擇是為了在輸入分辨率、網絡層數、參數量、輸出濾波器數之間尋求折中。作者研究表明:CSPResNeXt50在分類方面優于CSPDarkNet53,而在檢測方面反而表現要差。
網絡主要結構確定了后,下一個目標是選擇額外的模塊以提升感受野、更好的特征匯聚模塊(如FPN、PAN、ASFF、BiFPN)。對于分類而言最好的模型可能并不適合于檢測,相反,檢測模型需要具有以下特性:
更高的輸入分辨率,為了更好的檢測小目標;
更多的層,為了具有更大的感受野;
更多的參數,更大的模型可以同時檢測不同大小的目標。
總之,選擇具有更大感受野、更大參數的模型作為backbone。給出了不同backbone的上述信息對比。從中可以看到:CSPResNeXt50僅僅包含16個卷積層,其感受野為425x425,包含20.6M參數;而CSPDarkNet53包含29個卷積層,725x725的感受野,27.6M參數。這從理論與實驗角度表明:CSPDarkNet53更適合作為檢測模型的Backbone。
三、設計思想
目標檢測架構分為兩種,一種是two-stage,一種是one-stage,區別就在于 two-stage 有region proposal 過程,類似于一種海選過程,網絡會根據候選區域生成位置和類別,而 one-stage 直接從圖片生成位置和類別。
今天提到的 YOLO 就是一種
one-stage 方法。
YOLO 是 You Only Look Once 的縮寫,意思是神經網絡只需要看一次圖片,就能輸出結果。
YOLO 一共發布了四個版本,其中 YOLOv1 奠定了整個系列的基礎,后面的系列就是在第一版基礎上的改進,只為提升性能。
YOLO的檢測方法如下:
將輸入圖像劃分為
S×S 網格(grid),比如這里劃分成
7×7=49 個 grid,如果目標的中心落入網格單元,則該網格單元負責檢測該目標。注意不是整個物體落入單元格,只需要物體中心在即可。
每個網格單元預測 B(文中 B=2) 個邊界框和這些框的置信度得分。這個分數反映這個框包含物體的概率
Pr(Object) 以及預測框的位置準確性 IOU,所以置信分數也由這兩部分定義:
每個 bounding
box 都要包含 5 個預測值,x, y, w,
h, confidence。(x,y)框中心是相對于網格單元的坐標,w 和 h 是框相當于整幅圖的寬和高,confidence 代表該框與 ground truth 之間的 IOU(框里沒有物體分數直接為 0 )
因為位置和類別需要同時預測,所以每個單元格除了輸出 bounding box 也輸出物體的條件概率(該物體屬于某一類的概率,當然這些概率以包含對象的網格單元為條件)。每個網格單元輸出一個概率集合,不考慮這個 grid 預測幾個 bounding box。
測試階段,在測試時,將條件分類概率與各個框的置信度預測相乘,作為每個框特定于每個類的置信分數(這個分數編碼了類別和位置兩部分信息)。
與 R-CNN 系列方法相比:
· R-CNN
及其變體采用 region proposals 而不是滑動窗口法找物體,是一種多階段方法。調網絡的時候需要分開調,運行慢。
· YOLO
與 R-CNN 相似的地方是在網格單元找可能的邊界框,用 CNN 提取特征。不同的是,加在網格單元的空間限制有助于防止同一個目標的重復檢測,預測的邊界框也少(98 個),還有把多個階段結合成一個階段。
四、各自特點和發展
- YOLOv1
問題背景
之前 two-stage 方法如 R-CNN 把檢測問題分成兩部分,先生成候選區域(region proposal),再用分類器對區域分類,多階段訓練導致不易優化。
創新點
把檢測當作回歸問題,用一個網絡輸出位置和類別,實現了一個 unified system,從檢測的角度是 one-stage的
訓練流程
和 R-CNN 差不多
首先 ImageNet 1000類 競賽數據集上對卷積層進行預訓練
然后再把網絡根據檢測任務微調
檢測流程
輸入一幅多目標圖像
將圖像劃分成多個網格
通過網絡得到每個網格的分類概率,以及各網格預測的框+置信度
針對每個框,把概率與置信分數相乘,作為每個框特定于每個類的置信分數
輸出位置和類別信息
優點
快。因為回歸問題沒有復雜的流程(pipeline)。
可以基于整幅圖像預測(看全貌而不是只看部分)。與基于滑動窗口和區域提議的技術不同,YOLO在訓練和測試期間會看到整個圖像,因此它隱式地編碼有關類及其外觀的上下文信息。因為能看到圖像全貌,與 Fast R-CNN 相比,YOLO 預測背景出錯的次數少了一半。
學習到物體的通用表示(generalizable representations),泛化能力好。因此,當訓練集和測試集類型不同時,YOLO 的表現比 DPM 和
R-CNN 好得多,應用于新領域也很少出現崩潰的情況。
缺點
空間限制:一個單元格只能預測兩個框和一個類別,這種空間約束必然會限制預測的數量;
難擴展:模型根據數據預測邊界框,很難將其推廣到具有新的或不同尋常的寬高比或配置的對象。由于輸出層為全連接層,因此在檢測時,YOLO 訓練模型只支持與訓練圖像相同的輸入分辨率。
網絡損失不具體:無論邊界框的大小都用損失函數近似為檢測性能,物體 IOU 誤差和小物體 IOU 誤差對網絡訓練中 loss 貢獻值接近,但對于大邊界框來說,小損失影響不大,對于小邊界框,小錯誤對 IOU 影響較大,從而降低了物體檢測的定位準確性。
- YOLOv2
問題背景
YOLOv1 檢測性能低
當前的檢測任務受數據集標簽的限制(數據集必須有標簽或通過分類賦予標簽)。但是,標記檢測圖像比標記分類圖像昂貴得多,所以檢測數據和分類數據不是一個規模。
創新點
針對第一個問題,使用一些方法提升 YOLOv1 的性能,得到 YOLOv2。
針對第二個問題,提出了 ImageNet 和 COCO 數據集的結合方法,以及聯合訓練方法,訓練 YOLOv2 后得到的模型叫 YOLO9000。
提升性能的方法
Accuracy: Batch Normalization, High Resolution
Classifier, Convolutional With Anchor Boxes, , Direct location prediction,
Fine-Grained Features, Multi-Scale Training
Speed: 提出一個新網絡 Darknet-19
訓練流程
論文提出了一種聯合訓練算法,該算法可以在檢測和分類數據上訓練目標檢測器。
利用標記的檢測圖像來學習精準定位,同時使用分類圖像來增加其“詞匯量”和健壯性。
· 分類檢測數據集結合方法:
檢測數據集的標簽少且普通,分類數據集的標簽多且具體,如果想在兩個數據集上訓練,就得把它們的標簽合并起來。很多分類方法都用一個 softmax layer ,但它的前提是假設所有類互斥,但的數據集類別是不都是互斥的(有可能是包含關系,例如狗和金毛犬),所以使用了一個多標簽模型來組合數據集(無互斥的要求),及使用多個 softmax 。
大多數分類方法都假定標簽采用扁平結構,但是對于組合數據集需要層次化的結構。
ImageNet 標簽采用有向圖結構。在這里,作者把數據集的結構簡化為結構樹(hierarchical
tree)。
通過改造圖,最后得到一個 WordTree,這樣每個節點/標簽都有自己的概率,解決了類別之間不互斥的問題,就能在檢測集和分類集上聯合訓練。
· 聯合訓練方法:
把檢測和分類數據混合,訓練過程中遇到帶標簽的檢測圖像,就基于 YOLOv2 整個損失函數進行反向傳播,遇到分類圖像,只反向傳播網絡的分類損失。
- YOLOv3
問題背景
YOLOv3 的提出不是為了解決什么問題,整篇論文其實是技術報告。
YOLOv3 在 YOLOv2 基礎上做了一些小改進,文章篇幅不長,核心思想和 YOLOv2、YOLO9000差不多。
模型改進
邊界框預測:定位任務采用 anchor box 預測邊界框的方法,YOLOv3 使用邏輯回歸為每個邊界框都預測了一個分數
objectness
score,打分依據是預測框與物體的重疊度。如果某個框的重疊度比其他框都高,它的分數就是 1,忽略那些不是最好的框且重疊度大于某一閾值(0.5)的框
類別預測:和 YOLOv2 一樣,YOLOv3 仍然采取多標簽分類
多尺度預測
使用新網絡
Darknet-53 提取特征
- YOLOv4
問題背景
YOLO 原作者之前宣布退出CV界,YOLOv4 的作者其實不是前三篇 YOLO 的一作
YOLOv4 是對 YOLOv3 的一個改進。它的改進方法就是總結了幾乎所有的檢測技巧,又提出一點兒技巧,然后經過篩選,排列組合,挨個實驗(ablation study)哪些方法有效。
值得注意的是文章第二部分相關工作,簡直就是目標檢測的一個簡單綜述,閱讀該部分,你就能了解模型及方法,如果它提到的每個方法你都了解,說明你在這個方向的研究較全面深入(我沒達到)。
框架方法
下面這幅論文中的圖介紹了 YOLOv4 檢測器的構成及使用的訓練方法,這些是經過大量實驗選出的性能最好的組合
五、總結
回顧 YOLO 系列的發展,可以看出 YOLO
后期沒有提出新穎的想法,更重視應用落地。
總結
以上是生活随笔為你收集整理的YOLOvi(i=1,2,3,4)系列的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Mask-RCNN技术解析
- 下一篇: Git 快速控制