做者:William
git來源:自動駕駛全棧工程師知乎專欄算法
連接:https://www.zhihu.com/people/william.hyin/columns微信

YOLO之父Joseph Redmon在今年年初宣佈退出計算機視覺的研究的時候,不少人都覺得目標檢測神器YOLO系列就此終結。網絡
然而在4月23日,繼任者YOLO V4卻悄無聲息地來了。Alexey Bochkovskiy發表了一篇名爲YOLOV4: Optimal Speed and Accuracy of Object Detection的文章。架構
YOLO V4是YOLO系列一個重大的更新,其在COCO數據集上的平均精度(AP)和幀率精度(FPS)分別提升了10% 和12%,並獲得了Joseph Redmon的官方承認,被認爲是當前最強的實時對象檢測模型之一。
app
正當計算機視覺的從業者們正在努力研究YOLO V4的時候,萬萬沒想到,有牛人不服。框架
6月25日,Ultralytics發佈了YOLOV5 的第一個正式版本,其性能與YOLO V4不相伯仲,一樣也是現今最早進的對象檢測技術,並在推理速度上是目前最強。dom
從上圖的結果能夠看出,YOLO V5確實在對象檢測方面的表現很是出色,尤爲是YOLO V5s 模型140FPS的推理速度很是驚豔。編輯器
YOLO V5和V4集中出現讓不少人都感到疑惑,一是YOLO V5真的有資格能被稱做新一代YOLO嗎?二是YOLO V5的性能與V4相比究竟如何,二者有啥區別及類似之處?ide
在本文中我會詳細介紹YOLO V5和YOLO V4的原理,技術區別及類似之處,最後會從多方面對比二者的性能。
我在我以前的文章中介紹了YOLO V3模型,YOLO是一種快速緊湊的開源對象檢測模型,與其它網絡相比,同等尺寸下性能更強,而且具備很不錯的穩定性,是第一個能夠預測對象的類別和邊界框的端對端神經網絡。
YOLO V3原始模型是基於Darknet網絡。Ultralytics將YOLO V3架構遷移到了Pytorch平臺上,並對其自行研究和改進。Ultralytics-yolov3 代碼庫是目前已開源YOLO V3 Pytorch的最佳實現。
YOLO網絡主要由三個主要組件組成。
1)Backbone -在不一樣圖像細粒度上聚合並造成圖像特徵的卷積神經網絡。
2)Neck:一系列混合和組合圖像特徵的網絡層,並將圖像特徵傳遞到預測層。
3)Head:對圖像特徵進行預測,生成邊界框和並預測類別。
下圖是對象檢測網絡的通用架構:

咱們能夠在上述每一個主要組件上使用不一樣的技術或者組合不一樣的方案來實現屬於本身的最佳對象檢測框架。
實際上YOLO V5的模型架構是與V4很是相近的。
在下文中,我會從下面幾個方面對比YOLO V5和V4,並簡要闡述它們各自新技術的特色,對比二者的區別和類似之處,評判二者的性能,並作最後總結。
Data Augmentation
Auto Learning Bounding Box Anchors
Backbone
Neck
Head
Activation Function
Optimization Function
Benchmarks
Data Augmentation
YOLO V4數據加強

圖像遮擋
Random Erase:用隨機值或訓練集的平均像素值替換圖像的區域。

Cutout:僅對 CNN 第一層的輸入使用剪切方塊Mask。

Hide and Seek:將圖像分割成一個由 SxS 圖像補丁組成的網格,根據機率設置隨機隱藏一些補丁,從而讓模型學習整個對象的樣子,而不是單獨一塊,好比不單獨依賴動物的臉作識別。

Grid Mask:將圖像的區域隱藏在網格中,做用也是爲了讓模型學習對象的整個組成部分。

MixUp:圖像對及其標籤的凸面疊加。

多圖組合
將另外一個圖像中的剪切部分粘貼到加強圖像。圖像的剪切迫使模型學會根據大量的特徵進行預測。

在Cutmix中咱們組合了兩張圖像,而在 Mosaic 中咱們使用四張訓練圖像按必定比例組合成一張圖像,使模型學會在更小的範圍內識別對象。其次還有助於顯著減小對batch-size的需求,畢竟大多數人的GPU顯存有限。

自對抗訓練(SAT)
Self-Adversarial Training是在必定程度上抵抗對抗攻擊的數據加強技術。CNN計算出Loss, 而後經過反向傳播改變圖片信息,造成圖片上沒有目標的假象,而後對修改後的圖像進行正常的目標檢測。須要注意的是在SAT的反向傳播的過程當中,是不須要改變網絡權值的。

類標籤平滑

YOLO V5 數據加強

Auto Learning Bounding Box Anchors-自適應錨定框

# anchors
anchors:
- [116,90, 156,198, 373,326] # P5/32
- [30,61, 62,45, 59,119] # P4/16
- [10,13, 16,30, 33,23] # P3/8
可是對於你的自定義數據集來講,因爲目標識別框架每每須要縮放原始圖片尺寸,而且數據集中目標對象的大小可能也與COCO數據集不一樣,所以YOLO V5會從新自動學習錨定框的尺寸。

如在上圖中, YOLO V5在進行學習自動錨定框的尺寸。對於BDD100K數據集,模型中的圖片縮放到512後,最佳錨定框爲:
YOLO V4並無自適應錨定框。
Backbone-跨階段局部網絡(CSP)
YOLO V5和V4都使用CSPDarknet做爲Backbone,從輸入圖像中提取豐富的信息特徵。CSPNet全稱是Cross Stage Partial Networks,也就是跨階段局部網絡。
CSPNet解決了其餘大型卷積神經網絡框架Backbone中網絡優化的梯度信息重複問題,將梯度的變化從頭至尾地集成到特徵圖中,所以減小了模型的參數量和FLOPS數值,既保證了推理速度和準確率,又減少了模型尺寸。
CSPNet其實是基於Densnet的思想,複製基礎層的特徵映射圖,經過dense block 發送副本到下一個階段,從而將基礎層的特徵映射圖分離出來。
這樣能夠有效緩解梯度消失問題(經過很是深的網絡很難去反推丟失信號) ,支持特徵傳播,鼓勵網絡重用特徵,從而減小網絡參數數量。
CSPNet思想能夠和ResNet、ResNeXt和DenseNet結合,目前主要有CSPResNext50 and CSPDarknet53兩種改造Backbone網絡。
Neck-路徑聚合網絡(PANET)
Neck主要用於生成特徵金字塔。特徵金字塔會加強模型對於不一樣縮放尺度對象的檢測,從而可以識別不一樣大小和尺度的同一個物體。
在PANET出來以前,FPN一直是對象檢測框架特徵聚合層的State of the art,直到PANET的出現。
在YOLO V4的研究中,PANET被認爲是最適合YOLO的特徵融合網絡,所以YOLO V5和V4都使用PANET做爲Neck來聚合特徵。
PANET基於 Mask R-CNN 和 FPN 框架,同時增強了信息傳播。該網絡的特徵提取器採用了一種新的加強自下向上路徑的 FPN 結構,改善了低層特徵的傳播。
第三條通路的每一個階段都將前一階段的特徵映射做爲輸入,並用3x3卷積層處理它們。輸出經過橫向鏈接被添加到自上而下通路的同一階段特徵圖中,這些特徵圖爲下一階段提供信息。
同時使用自適應特徵池化(Adaptive feature pooling)恢復每一個候選區域和全部特徵層次之間被破壞的信息路徑,聚合每一個特徵層次上的每一個候選區域,避免被任意分配。
下圖中pi 表明 CSP 主幹網絡中的一個特徵層

Head-YOLO 通用檢測層
模型Head主要用於最終檢測部分。它在特徵圖上應用錨定框,並生成帶有類機率、對象得分和包圍框的最終輸出向量。
在 YOLO V5模型中,模型Head與以前的 YOLO V3和 V4版本相同。

這些不一樣縮放尺度的Head被用來檢測不一樣大小的物體,每一個Head一共(80個類 + 1個機率 + 4座標) * 3錨定框,一共255個channels。
Activation Function
激活函數的選擇對於深度學習網絡是相當重要的。YOLO V5的做者使用了 Leaky ReLU 和 Sigmoid 激活函數。
在 YOLO V5中,中間/隱藏層使用了 Leaky ReLU 激活函數,最後的檢測層使用了 Sigmoid 形激活函數。而YOLO V4使用Mish激活函數。
Mish在39個基準測試中擊敗了Swish,在40個基準測試中擊敗了ReLU,一些結果顯示基準精度提升了3–5%。
可是要注意的是,與ReLU和Swish相比,Mish激活在計算上更加昂貴。

Optimization Function
YOLO V5的做者爲咱們提供了兩個優化函數Adam和SGD,並都預設了與之匹配的訓練超參數。默認爲SGD。
YOLO V4使用SGD。
YOLO V5的做者建議是,若是須要訓練較小的自定義數據集,Adam是更合適的選擇,儘管Adam的學習率一般比SGD低。
可是若是訓練大型數據集,對於YOLOV5來講SGD效果比Adam好。
實際上學術界上對於SGD和Adam哪一個更好,一直沒有統一的定論,取決於實際項目狀況。
Cost Function
YOLO 系列的損失計算是基於 objectness score, class probability score,和 bounding box regression score.
YOLO V5使用 GIOU Loss做爲bounding box的損失。
YOLO V5使用二進制交叉熵和 Logits 損失函數計算類機率和目標得分的損失。同時咱們也可使用fl _ gamma參數來激活Focal loss計算損失函數。
YOLO V4使用 CIOU Loss做爲bounding box的損失,與其餘提到的方法相比,CIOU帶來了更快的收斂和更好的性能。

上圖結果基於Faster R-CNN,能夠看出,實際上CIoU 的表現比 GIoU 好。
Benchmarks- YOLO V5 VS YOLO V4
因爲Ultralytics公司目前重心都放在儘快推廣YOLO V5對象檢測框架,YOLO V5也在不停的更新和完善之中,所以做者打算年末在YOLO V5的研究完成以後發表正式論文。
在沒有論文的詳細論述以前,咱們只能經過查看做者放出的COCO指標並結合大佬們後續的實例評估來比較二者的性能。
官方性能評估


在上面的兩個圖中,FPS與ms/img的關係是反轉的,通過單位轉換後咱們能夠發現,在V100GPU上YOLO V5能夠達到250FPS,同時具備較高的mAP。
因爲YOLO V4的原始訓練是在1080TI上的,遠低於V100的性能,而且AP_50與AP_val的對標不一樣,所以僅憑上述的表格是沒法得出二者的Benchmarks。
好在YOLO V4的第二做者WongKinYiu使用V100的GPU提供了能夠對比的Benchmarks。
從圖表中能夠看出,二者性能其實很接近,可是從數據上看YOLO V4仍然是最佳對象檢測框架。YOLO V4的可定製化程度很高,若是不害怕更多自定義配置,那麼基於Darknet的YOLO V4仍然是最準確的。
值得注意的是YOLO V4其實使用了大量Ultralytics YOLOv3代碼庫中的數據加強技術,這些技術在YOLO V5中也被運行,數據加強技術對於結果的影響到底有多大,還得等做者的論文分析。
訓練時間
根據Roboflow的研究代表,YOLO V5的訓練很是迅速,在訓練速度上遠超YOLO V4。對於Roboflow的自定義數據集,YOLO V4達到最大驗證評估花了14個小時,而YOLO V5僅僅花了3.5個小時。
而在我本身的數據訓練過程當中,YOLO V5s訓練速度遠超YOLO V4 。我會在個人下篇文章:YOLO V5 Transfer learning 中展現YOLO V5s的實測訓練速度。
模型大小
上圖中不一樣模型的大小分別爲:V5x: 367MB,V5l: 192MB,V5m: 84MB,V5s: 27MB,YOLOV4: 245 MB
YOLO V5s 模型尺寸很是小,下降部署成本,有利於模型的快速部署。
推理時間
在單個圖像(批大小爲1)上,YOLOV4推斷在22毫秒內,YOLOV5s推斷在20毫秒內。
而YOLOV5實現默認爲批處理推理(批大小36),並將批處理時間除以批處理中的圖像數量,單一圖片的推理時間可以達到7ms,也就是140FPS,這是目前對象檢測領域的State-of-the-art。
我使用我訓練的模型對10000張測試圖片進行實時推理,YOLOV5s 的推理速度很是驚豔,每張圖只須要7ms的推理時間,再加上20多兆的模型大小,在靈活性上堪稱無敵。
可是其實這對於YOLO V4並不公平,因爲YOLO V4沒有實現默認批處理推理,所以在對比上呈現劣勢,接下來應該會有不少關於這兩個對象檢測框架在同一基準下的測試。
其次YOLO V4最新推出了tiny版本,YOLO V5s 與V4 tiny 的性能速度對比還須要更多實例分析。
Summary
總的來講,YOLO V4 在性能上優於YOLO V5,可是在靈活性與速度上弱於YOLO V5。
因爲YOLO V5仍然在快速更新,所以YOLO V5的最終研究成果如何,還有待分析。
我我的以爲對於這些對象檢測框架,特徵融合層的性能很是重要,目前二者都是使用PANET,可是根據谷歌大腦的研究,BiFPN纔是特徵融合層的最佳選擇。誰能整合這項技術,頗有可能取得性能大幅超越。

儘管YOLO V5目前仍然計遜一籌,可是YOLO V5仍然具備如下顯著的優勢:
使用Pytorch框架,對用戶很是友好,可以方便地訓練本身的數據集,相對於YOLO V4採用的Darknet框架,Pytorch框架更容易投入生產
代碼易讀,整合了大量的計算機視覺技術,很是有利於學習和借鑑
不只易於配置環境,模型訓練也很是快速,而且批處理推理產生實時結果
可以直接對單個圖像,批處理圖像,視頻甚至網絡攝像頭端口輸入進行有效推理
可以輕鬆的將Pytorch權重文件轉化爲安卓使用的ONXX格式,而後能夠轉換爲OPENCV的使用格式,或者經過CoreML轉化爲IOS格式,直接部署到手機應用端
最後YOLO V5s高達140FPS的對象識別速度使人印象很是深入,使用體驗很是棒
寫在結尾
其實不少人都以爲YOLO V4和YOLO V5實際上沒有什麼耳目一新創新,而是大量整合了計算機視覺領域的State-of-the-art,從而顯著改善YOLO對象檢測的性能。
其實我以爲有的時候工程應用的能力一樣也很重要,能有兩個這麼優秀的技術整合實例供咱們無償使用和學習研究,已經不能奢求更多了,畢竟活雷鋒仍是少啊。先別管別人誰更強,本身能學到更多才是最重要的,畢竟討論別人誰強,還不如本身強。
最後想說的是,技術發展如此之快,究竟誰能最後拿下最佳對象檢測框架的頭銜尤未可知,而咱們處在最好的時代,讓咱們且行且學且珍惜。

備註:目標檢測

目標檢測交流羣
2D、3D目標檢測等最新資訊,若已爲CV君其餘帳號好友請直接私信。
微信號:aicvml
QQ羣:805388940
微博知乎:@我愛計算機視覺
投稿:amos@52cv.net
網站:www.52cv.net

在看,讓更多人看到
本文分享自微信公衆號 - 我愛計算機視覺(aicvml)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。