生活随笔
收集整理的這篇文章主要介紹了
yolov4论文_YOLOv4论文详细解读
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
大家好,本次分享的是YOLOv4的那篇論文我將主要從這幾個部分對該論文進行詳細的解讀首先來看論文的主要內容YOLOv4這篇論文主要是介紹如何使用一些通用的新方法達到了最先進的實驗結果,他們在COCO數據集上實現了65 FPS的速度和精度為43.5%的AP的檢測。這個是論文中YOLOv4與其他方法的對比圖。從圖中可以看出,在相同FPS情況下,它取得的AP是最高的,在相同的AP的情況下,它的FPS是最高的。接下來我們介紹目標檢測模型現代的目標檢測器通常由兩部分組成,一個是在ImageNet上預訓練的backbone(骨架網絡),另一個是用來預測對象的類別和邊界框的head(頭部)。對于在GPU平臺上運行的那些檢測器,其骨干網絡可能是VGG,ResNet,ResNeXt或DenseNet。對于在CPU平臺上運行的那些檢測器,其骨架可以是SqueezeNet,MobileNet或ShuffleNet。至于頭部,通常分為兩類,即單階段目標檢測器和雙階段目標檢測器。最具有代表性的雙階段目標檢測器是R-CNN系列,包括Fast R-CNN,Faster R-CNN,R-FCN和Libra R-CNN。也可以使兩階段目標檢測器成為anchor-free(無需借助錨點)檢測器,例如RepPoints。對于單階段目標檢測器,最具代表性的模型是YOLO,SSD和RetinaNet。近年來,有研究開發了anchor-free的單階段目標檢測器,例如CenterNet,CornerNet,FCOS等。近年來開發的目標檢測器通常在骨架和頭部之間插入一些層,通常使用這些層。收集不同階段的特征圖。我們可以稱其為目標檢測器的neck(頸部)。通常,頸部由幾個自下而上的路徑和幾個自上而下的路徑組成。應用此機制的網絡包括特征金字塔網絡(FPN),路徑聚集網絡(PAN),BiFPN和NAS-FPN。除上述模型外,一些研究人員還著重于直接構建用于目標檢測的新骨架網(DetNet,DetNAS)或新的整個模型(SpineNet,HitDeector) 。綜上所述,普通的目標檢測器由以下幾部分組成(輸入,骨架網絡,頸部,頭部):這是YOLOv4原論文中的總結內容這里展示的是計算機視覺常用的VGG16模型結構的示意圖以及ResNet50模型結構的示意圖YOLO這個名字完整體現了算法的精髓:You Only Look Once。它與RCNN系列算法不同:RCNN系列算法(RCNN/Fast RCNN/Faster RCNN)是經過了兩次檢測,第一次是獲取proposal box,第二次才是圖像預測。YOLO算法通過回歸來完成物體檢測,期間使用了統一的網絡來完成物體識別和框定位。具體來說,Yolo的CNN網絡將輸入的圖片分割成s*s的網格,然后每個單元格負責去檢測那些中心點落在該格子內的目標,如圖所示,可以看到狗這個目標的中心落在左下角一個單元格內,那么該單元格負責預測這個狗。每個單元格會預測一定數量個邊界框(bounding box)以及邊界框的置信度(confidence score)。所謂置信度其實包含兩個方面,一是這個邊界框含有目標的可能性大小,二是這個邊界框的準確度。還有分類問題,對于每一個單元格其還要給出預測出n個類別概率值,其表征的是由該單元格負責預測的邊界框其目標屬于各個類別的概率。接下來我們介紹BoF通常,傳統的目標檢測器是離線訓練的。因此,研究人員總是喜歡利用這一優勢,并開發出更好的訓練方法,這些方法可以使目標檢測器獲得更好的精度,卻又不會增加推理成本,于是我們稱這些方法為bag of freebies(意為:免費贈品),僅改變訓練策略或僅增加訓練成本。目標檢測方法經常采用并且符合bag of freebies定義的是數據增強。數據增強的目的是增加輸入圖像的多樣性,從而使設計的目標檢測模型對從不同環境獲得的圖像具有更高的魯棒性。例如,光度畸變和幾何畸變是兩種常用的數據增強方法,它們無疑有益于目標檢測任務。在處理光度畸變時,我們會調整圖像的亮度,對比度,色相,飽和度和噪點。對于幾何畸變,我們添加了隨機縮放,裁剪,翻轉和旋轉。這些數據擴充方法都是逐像素調整,并且保留了調整區域中的所有原始像素信息。此外,一些從事數據增強的研究人員還將重點放在模擬目標遮擋問題上。他們在圖像分類和目標檢測中取得了良好的效果。例如,隨機擦除和CutOut(裁剪)可以隨機選擇圖像中的矩形區域,并填充零的隨機或互補值。至于hide-and-seek和網格遮蓋,他們隨機或均勻地選擇圖像中的多個矩形區域,并將它們替換為零。如果類似的概念應用于特征圖,則有DropOut ,DropConnect和DropBlock方法。另外,一些研究人員提出了使用多個圖像一起執行數據增強的方法。例如,MixUp使用兩個圖像以不同的系數比值相乘和疊加,然后使用這些疊加的比值來調整標簽。對于CutMix,它是將裁切后的圖像覆蓋到其他圖像的矩形區域,并根據混合區域的大小調整標簽。除了上述方法之外,style transfer GAN還被用于數據擴充,這種用法可以有效地減少CNN所學習的紋理偏差。然后我們來看一下BoS方面對于那些僅少量增加推理成本,但可以顯著提高目標檢測準確性的插件模塊和后處理方法,我們稱它們為bag of specials(意為:特價袋)。一般而言,這些插件模塊用于增強模型中的某些屬性,例如擴大感受野,引入注意力機制或增強特征集成能力等,而后處理是一種篩選模型預測結果的方法,可以用來增強感受野的通用模塊是SPP,ASPP和RFB。SPP模塊起源于空間金字塔匹配(SPM),SPM的原始方法是將特征圖分割為幾個d×d個相等的塊,其中d可以為{1,2,3,… },從而形成空間金字塔,然后提取bag-of-word(詞袋)特征。SPP將SPM集成到CNN中,并使用最大池化操作而不是詞袋操作。由于He等人提出的SPP模塊將輸出一維特征向量,在全卷積網絡(FCN)中應用是不可行的。因此,在YOLOv3的設計中,Redmon和Farhadi將SPP模塊改進為內核大小為k×k的最大池化輸出的級聯,其中k = {1、5、9、13},步幅等于1。在這種設計下,較大的k×k最大池有效地增加了骨架網絡特征的感受野。在添加了改進版本的SPP模塊之后,YOLOv3-608在MS COCO目標檢測任務上將AP50提高了2.7%,而額外的計算代價為0.5%。ASPP模塊和改進的SPP模塊之間在操作上的差異主要在于原始k×k內核大小、步幅等于1的最大池化到幾個3×3內核大小,擴展比率等于k和在膨脹卷積運算中,步幅等于1。RFB模塊將使用k×k核的多個膨脹卷積,膨脹比等于k,步幅等于1,以獲得比ASPP更全面的空間覆蓋。RFB僅花費7%的額外推理時間,即可將MS COCO上SSD的AP50提高5.7%。通常在目標檢測中使用的注意力模塊主要分為通道注意和點注意,這兩個注意模型的代表是Squeeze-and-Excitation(SE)和Spatial Attention module(SAM)。盡管SE模塊可以使ImNetNet圖像分類任務中的ResNet50提高1%的top-1準確性,同時僅增加2%計算量,但是通常在GPU上它將使推理時間增加大約10%,因此更適合在移動設備中使用。但是對于SAM,它只需要支付0.1%的額外計算量,就可以在ImageNet圖像分類任務上將ResNet50-SE的top-1準確性提高0.5%。最好的是,它根本不影響GPU上的推理速度。在特征集成方面,早期的實踐是使用跳過連接或hyper-column將低層物理特征集成到高層語義特征。由于諸如FPN的多尺度預測方法已變得流行,因此提出了許多集成了不同特征金字塔的輕量級模塊。這種模塊包括SFAM,ASFF和BiFPN。SFAM的主要思想是使用SE模塊在多尺度級聯特征圖上執行通道級級別的加權。對于ASFF,它使用softmax作為逐點級別權重,然后添加不同比例的特征圖。在BiFPN中,提出了多輸入加權殘差連接以執行按比例的級別重新加權,然后添加不同比例的特征圖。然后我們來看一下YOLOv4的方案最終是怎么選擇的YOLOv4的目標是在輸入網絡分辨率,卷積層數,參數數量(過濾器大小2 過濾器通道/組)和層輸出(過濾器)的數量之間找到最佳平衡。論文中的研究提到,就ILSVRC2012(ImageNet)數據集上的目標分類而言,CSPResNext50與CSPDarknet53相比要好得多。但是相反,在MS COCO數據集上的目標檢測方面,CSPDarknet53比CSPResNext50更好。下一個目標是針對不同的檢測器、不同的骨架網絡,選擇其他模塊來增加感受野和參數聚集的最佳方法:FPN,PAN,ASFF,BiFPN。分類最佳的參考模型對于檢測器并非總是最佳的。YOLOv4方案將SPP模塊添加到CSPDarknet53上,因為它顯著增加了感受野,分離出最重要的上下文特征,并且幾乎沒有降低網絡運行速度。然后使用PANet為不同檢測器從不同backbone級別的參數聚合方法,而不是YOLOv3中使用的FPN。最后,YOLOv4方案選擇CSPDarknet53為骨架網絡,SPP作為附加模塊,PANet路徑聚合作為頸部以及和YOLOv3(anchor based)的頭部作為YOLOv4的體系結構。將來還計劃大幅擴展檢測器的bag of freebies(BoF)的內容,從理論上講,它可以解決一些問題并提高檢測器的準確性,并以實驗方式依次檢查每個功能的影響。YOLO V4 不使用跨GPU批量標準化(CGBN或SyncBN)或昂貴的專用設備。這樣一來,任何人都可以在傳統的圖形處理器上重現其最新技術成果,例如GTX 1080Ti或RTX 2080Ti。BoF和BoS的選擇為了改進目標檢測訓練過程,CNN通常使用以下方法:
激活函數:ReLU,leakage-ReLU,parameter-ReLU,ReLU6,SELU,Swish或Mish
邊界框回歸損失函數:MSE,IoU,GIoU,DIoU
數據增強:CutOut,MixUp,CutMix
正則化方法:DropOut,DropPath,Spacial DropOut或DropBlock
通過計算均值和方差的網絡激活函數歸一化:批次歸一化(BN),跨GPU批量歸一化(CGBN或SyncBN),過濾器響應歸一化(FRN)或交叉迭代批量歸一化(CBN)
跳過連接:殘差連接,加權殘差連接,多輸入加權殘差連接或跨階段部分連接(CSP)
至于訓練用的激活函數,由于PReLU和SELU更難以訓練,并且ReLU6是專門為量化網絡設計的,因此方案從候選列表中刪除了上述激活函數。在重新量化方法中,發布DropBlock的人已將其方法與其他方法進行了詳細的比較,并且其正則化方法勝過其他方法許多。因此,YOLOv4方案毫不猶豫地選擇了DropBlock作為正則化方法。至于歸一化方法的選擇,由于方案專注于僅使用一個GPU的訓練策略,因此不考慮syncBN。額外的提升為了使設計的檢測器更適合在單個GPU上進行訓練,方案進行了以下附加設計和改進:
引入了一種新的數據增強方法,即自我對抗訓練(SAT)
在應用遺傳算法時選擇最佳超參數
我們修改了一些現有方法,使方案的設計適合進行有效的訓練和檢測,例如修改后的SAM,修改后的PAN和交叉小批量歸一化(CmBN)
馬賽克代表一種新的數據增強方法,該方法混合了4個訓練圖像,而 CutMix 只有兩個輸入圖像。這樣就可以檢測到超出其正常背景的對象。
此外,批量歸一化從每層上的4張不同圖像計算激活統計信息,這大大減少了對大的mini-batch size的需求。
自對抗訓練(SAT)也代表了一項新的數據增強技術,該技術執行2個前向和反向傳播。在第一階段,神經網絡會更改原始圖像,而不是網絡權重。這樣,神經網絡通過改變原始圖像,從而創造了一種圖像上沒有想要目標的假象,對其自身執行了對抗攻擊。在第二階段,訓練神經網絡以正常方式檢測此修改圖像上的目標。CmBN是CBN修改版本,定義為Cross mini-Batch Normalization(CmBN)。這僅收集單個batch中的mini-batches之間的統計信息。
方案還將SAM從空間注意改為點注意,并將PAN的快捷連接替換為串聯。
YOLOv4的細節YOLOv4的組成:
骨架網絡: CSPDarknet53
頸部: SPP, PAN
頭部: YOLOv3
YOLO v4使用了:
Bag of Freebies (BoF) for backbone: CutMix和馬賽克數據增強,DropBlock正則化, 類標簽平滑
Bag of Specials (BoS) for backbone: Mish激活函數,跨階段部分連接(CSP),多輸入加權殘差連接 (MiWRC)
Bag of Freebies (BoF) for detector: CIoU損失函數, CmBN, DropBlock正則化,馬賽克數據增強,自對抗訓練(SAT),Eliminate grid sensitivity,為每個真實標簽使用多個錨點,,Cosine annealing scheduler,優化的超參數,隨機的訓練形狀
Bag of Specials (BoS) for detector: Mish激活函數,SPP模塊,SAM模塊,路徑聚合模塊(PAN), DIoU-NMS
實驗方案測試了不同訓練改進技術對ImageNet(ILSVRC 2012 val)數據集上分類器準確性的影響,然后對MS COCO(test-dev 2017)數據集上檢測器的準確性進行了影響。在ImageNet圖像分類實驗中,默認的超參數如下:訓練步驟為8,000,000;批量大小和最小批量大小分別為128和32;采用多項式衰減學習率調度策略,初始學習率為0.1。預熱步驟為1000;動量和重量偏差分別設置為0.9和0.005。方案所有的BoS實驗都使用與默認設置相同的超參數,并且在BoF實驗中,方案添加了額外的50%訓練步驟。在BoF實驗中,方案驗證了MixUp,CutMix,Mosaic,模糊數據增強和標簽平滑正則化方法。在BoS實驗中, 方案比較了LReLU,Swish和Mish激活功能的效果。所有實驗均使用1080 Ti或2080 Ti GPU進行訓練。在MS COCO目標檢測實驗中,默認超參數如下:訓練步驟為500,500;訓練步驟為500,500。采用步階衰減學習率調度策略,初始學習率為0.01,分別在40萬步和45萬步上乘以系數0.1。動量和重量衰減分別設置為0.9和0.0005。所有架構均使用單個GPU以64的批處理大小執行多尺度訓練,而最小批處理大小為8或4則取決于架構和GPU內存限制。除了使用遺傳算法進行超參數搜索實驗外,所有其他實驗均使用默認設置。遺傳算法使用YOLOv3-SPP訓練GIoU損失,并搜索300個epoch的最小5k集。對于遺傳算法實驗,方案采用搜索學習率0.00261,動量0.949,IoU閾值來分配ground truth 0.213,并使用損失歸一化器0.07。方案已經驗證了許多BoF,包括消除網格敏感性,分子數據增強,IoU閾值,遺傳算法,類標簽平滑,交叉小批量歸一化,自對抗訓練,余弦退火調度程序,動態小批量大小,DropBlock,優化錨點,不同類型的IoU損失。方案還對各種BoS進行了實驗,包括Mish,SPP,SAM,RFB,BiFPN和高斯YOLO。對于所有實驗,方案僅使用一個GPU進行訓練,因此未使用可優化多個GPU的諸如syncBN之類的技術。結果與其他最先進的目標檢測器獲得的結果比較如圖所示。YOLOv4位于Pareto最優曲線上,在速度和準確性方面均優于最快,最精確的檢測器。由于不同的方法使用不同架構的GPU進行推理時間驗證,因此在Maxwell,Pascal和Volta架構的通用GPU上運行YOLOv4,并將它們與其他最新方法進行比較。結論該論文中的YOLOv4方案提供了一種最先進的檢測器,其速度(FPS)和準確度(MS COCO AP50 … 95和AP50)比所有可用的替代檢測器都要高。所描述的檢測器可以訓練并在具有8-16 GB-VRAM的常規GPU上使用,這使得它的廣泛使用成為可能。單階段基于錨的檢測器的原始概念已經證明了其可行性。方案已經驗證了大量新的方法,并選擇使用這些方法以提高分類器和檢測器的準確性。這些功能可以用作未來研究和開發的最佳實踐。接下來是YOLOv4網絡的整體架構介紹一張圖,整體感受一下yolov4網絡結構該圖是白勇老師所繪制的YOLOv4網絡架構圖Cross Stage Partial(CSP)可以增強CNN的學習能力,能夠在輕量化的同時保持準確性、降低計算瓶頸、降低內存成本。CSPNet論文詳見:https://arxiv.org/pdf/1911.11929.pdfDarknet53的結構如圖所示,共有5個大殘差塊,每個大殘差塊所包含的小殘差單元個數為1、2、8、8、4。CSPDarknet53是在Darknet53的每個大殘差塊上加上CSP,對應layer 0~layer 104。Darknet53分塊1加上CSP后的結果,對應layer 0~layer 10。其中,layer [0, 1, 5, 6, 7]與分塊1完全一樣,而 layer [2, 4, 8, 9, 10]屬于CSP部分。Darknet53分塊2加上CSP后的結果,對應layer 11~layer 23。其中,layer [11, 15~20]對應分塊2(注意:殘差單元中的3×3卷積核的深度改變了,由Darknet53分塊2中的128改為64,請看layer 16 和 layer 19),其余 layer屬于CSP部分。Darknet53分塊3加上CSP后的結果,對應layer 24~layer 54。其中,layer [24, 27~51]對應分塊3(注意:殘差單元中的3×3卷積核的深度改變了,由Darknet53分塊3中的256改為128,請看layer 29等),其余 layer屬于CSP部分。Darknet53分塊4加上CSP后的結果,對應layer 55~layer 85。其中,layer [55, 58~82]對應分塊4(注意:殘差單元中的3×3卷積核的深度改變了,由Darknet53分塊4中的512改為256,請看layer 60等),其余 layer屬于CSP部分。Darknet53分塊5加上CSP后的結果,對應layer 86~layer 104。其中,layer [86, 89~101]對應分塊5(注意:殘差單元中的3×3卷積核的深度改變了,由Darknet53分塊5中的1024改為512,請看layer 91等),其余 layer屬于CSP部分。SPP全稱為Spatial Pyramid Pooling ,即,空間金字塔池化,SPP論文詳見這里:https://arxiv.org/pdf/1406.4729.pdf,網絡結構如圖所示。SPP網絡用在YOLOv4中的目的是增加網絡的感受野。實現是對layer107進行 5×5 、 9×9 、 13×13 的最大池化,分別得到layer 108,layer 110和layer 112,完成池化后,將layer 107,layer 108,layer 110和layer 112進行concatenete,連接成一個特征圖layer 114并通過 1×1降維到512個通道。SAM(spatial attention module)模塊如Figure4所示。這部分主要是基于RPN特征得到一個權重矩陣,因為RPN參數訓練時有一個前背景分類的監督信息,因此這個權重矩陣可以用來表達特征圖上前景和背景的區域差異,將該權重矩陣和原來的特征圖相乘后就得到調整后的特征圖,這樣基于調整后的特征圖執行RoI特征提取就能達到強調前景特征,弱化背景特征的目的。Figure6給出了是否增加SAM模塊對特征圖的影響,可以看到增加SAM后目標區域的特征值相比非目標區域的特征值要更大一些,這樣提取到的RoI特征中目標特征占比也越大,達到強化目標特征,弱化背景特征的目的。PANet 的論文詳見這里https://arxiv.org/pdf/1803.01534.pdf,網絡結構如圖所示,與FPN相比,PANet 在UpSample之后又加了DownSample的操作。PANet上采樣對應的layer為layer 105到layer 128。PANet實現示意圖PANet實現示意圖PANet實現示意圖YOLOv3的Head實現示意圖最后,我們來看一下部分代碼的實際實現我們以這一份復現代碼為例可以看到其中的yolov4具體代碼實現,由大量的殘差卷積模塊、SPP等組成以及Mish激活函數的實現然后我們來看一些官方代碼實現這里是用到的相關激活函數的函數體同樣,是mish激活函數的實現,只不過官方代碼中加入了3種代碼實現,最終采樣的是其中的mish_yashas2的實現。這里展示的是模型結構配置的定義,該配置定義在這個cfg文件里。其C++代碼的SAM實現做了并行計算的優化,這里將前向計算的一些串行的for循環代碼通過編譯器預處理指令轉換為了并行的計算SAM的反向計算也進行了相同的處理最后謝謝大家,如果有什么不懂的歡迎提出來一起討論研究。
往期精彩 ASRT上線測試Demo啦
[論文分享]遷移學習實現基于預算的語音識別
計算機的內功真的很重要嗎?
[論文分享]FastSpeech: 快速魯棒可控的語音合成
教你如何使用ASRT部署中文語音識別API服務器
教你如何使用ASRT訓練中文語音識別模型
·END·
AI檸檬博客 分享AI技術文章
關注前沿科技
QQ交流群:??
867888133
微信號:
ailemon_me 博客網址:https://blog.ailemon.me
點擊下方“
”即可閱讀博客原文,并參與評論和互動。
點在看,讓檸檬菌知道你在看~
總結
以上是生活随笔 為你收集整理的yolov4论文_YOLOv4论文详细解读 的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網站內容還不錯,歡迎將生活随笔 推薦給好友。