YOLOv4 tricks解讀(一)數據增強篇


  論文題目:YOLOv4: Optimal Speed and Accuracy of Object Detection

  文獻地址:https://arxiv.org/pdf/2004.10934.pdf

  源碼地址:https://github.com/AlexeyAB/darknet

  2019年YOLOv3在各個領域都獲得了廣泛的應用,並獲得了不錯的效果。上個月YOLOv4的發布,必定會帶來一波技術革新的浪潮。然而,YOLOv4實際上是一篇結合了大量前任的研究,通過適當的組合,並適當創新的高水平論文,實現速度和精度上的平衡與再創新高

  文獻中作者將前人的工作主要歸納為Bag of freebies和Bag of specials。前者歸納的tricks是指只在訓練階段增加耗時,不影響推理(測試)過程中的時間消耗,稱為"贈品";后者歸納的tricks是指會略微增加推理過程的時間消耗,但可以顯著的提升模型的性能,稱為"特價"。本系列按照paper中編排的順序,對各種tricks進行庖丁解牛,重在掃盲一些思想。

  本節主要針對Bag of freebies中談到數據增強,分析其思想和核心細節。包含以下tricks:random erasing、 cutout、 hide-and-seek、grid mask、Adversarial Erasing、mixup、cutmix、mosaic、Stylized-ImageNet、label smooth和dropblock

01 Random Erasing

  論文名稱:Random erasing data augmentation

  文獻地址:https://arxiv.org/pdf/1708.04896v2.pdf

  源碼地址:https://github.com/zhunzhong07/Random-Erasing

  隨機擦除數據增強技術是在訓練中,隨機擦除隨機選擇圖像中的一個矩形區域,並用隨機值擦除其像素。效果如下圖所示,從隨機擦除的效果圖上可以看出,該數據增強方式的提出主要針對遮擋問題。通過隨機擦除目標的特征模擬遮擋的效果,提高模型的泛化能力,使模型在訓練過程中僅通過局部特征對目標進行識別,強化模型對於目標局部特征的認知,弱化模型對於目標全部特征的依賴。模型通過這樣的數據進行訓練,將會對噪聲和遮擋更具魯棒性。

  Random erasing 算法流程如下,主要包含兩個部分:

  •  區域大小的隨機;
  •  位置的隨機。

  主要流程如下:

  偽代碼如下:

  由於random erasing的應用具有圖像分類和目標檢測兩種不同的場景,二者的區別在於是否知道目標所在的位置。對於這兩種情形:

  • 圖像分類
    • 在原圖中隨機選擇擦除區域; --- 漫無目的的擦除
  • 目標檢測
    • 在原圖中隨機選擇擦除區域;(IRE)
    • 在每個b-box上獨立執行random erasing,即此時b-box相對於圖像一樣成為一個獨立的個體;(ORE) --- 由指導的擦除
    • 在圖像和目標b-box上隨機選擇擦除區域。(I+ORE)

  具體如下圖左圖所示。

  作者還將Random Erasing與Random Croping結合,在隨機剪切的圖像上添加隨機擦除,如下圖右圖所示。

02 Cutout

  論文題目:Improved Regularization of Convolutional Neural Networks with Cutout

  文獻地址:https://arxiv.org/abs/1708.04552v2

  源碼地址:https://github.com/uoguelph-mlrg/Cutout

  Cutout與random earsing的出發點是一致的,都是針對機器視覺中存在的目標遮擋問題。通過對訓練數據模擬遮擋,一方面能解決現實中遮擋的問題,另一方面也能讓模型更好的學習利用上下文的信息。

  作者描述了兩種Cutout的設計理念:

  1. 開發了一種 有針對性的方法,專門從圖像的輸入中刪除圖像的重要特征,為了鼓勵網絡考慮不那么突出的特征。做法為刪除最大激活的特征,具體是: 在訓練的每個epoch過程中,保存每張圖片對應的最大激活特征圖(輸出的最大特征激活點),在下一個訓練回合,對每張圖片的最大激活圖進行上采樣到和原圖一樣大,然后使用閾值划分為二值圖,蓋在原圖上再輸入到cnn中進行訓練。因此,這樣的操作可以有針對性的對目標進行遮擋。如下圖所示
    • 對於上述操作的進一步理解:由於網絡經過訓練后,輸出特征的最大激活點會圍繞在目標區域中,並且由於有針對性的遮擋,輸出的最大激活點的位置(將要遮擋的位置)將不同於本次輸入的位置(原先的位置已遮擋,此時不可能被激活),也就是說,在訓練的每一代中,可以圍繞目標的不同區域進行動態遮擋訓練。而不像之前對輸入圖像進行數據增強,一張圖片在整個訓練過程只有一種遮擋模式。該操作有些像dropout,每次訓練中都隨機性的選擇參與訓練的節點,當然也勢必會帶來收斂速度的減慢。
    • 雖然通過理論感知,這種有針對性的遮擋要比單純隨機遮擋高效,但實際效果區別卻差不多,(至於為什么效果區別不大,並不理解,可能受二值化閾值的影響,需要自適應?仍有待繼續研究)反而這種增加了更多計算量和內存,得不償失。

2. 另外一種設計理念與random erasing及其類似,但實施起來要比random erasing簡單,具體操作是:選擇一個固定大小的正方形區域,然后將該區域填充為0即可,為了避免全0區域對訓練的影響,需要對數據中心歸一化到0。並且,與random erasing不同的是,其以一定概率(50%)允許擦除區域不完全在原圖像中。

03 Hide-and-seek

  論文題目:Hide-and-Seek: A Data Augmentation Technique for Weakly-Supervised Localization and Beyond

  文獻地址:https://arxiv.org/pdf/1811.02545.pdf

  源碼地址:https://github.com/kkanshul/Hide-and-Seek

  Hide-and-seek本質上也是通過隱藏一部分區域,迫使網絡尋找其他特征辨別物體。與前兩種數據增強方式不同的是,Hide-and-seek不再通過隨機位置確定patch的位置,而是將原圖划分為若干份(划分方式與ROI POOL有類似之處),然后對划分的每一份依概率進行隱藏,並且在每一代中,每一張圖片的隱藏區域都是隨機的,並且該操作僅添加於訓練過程中,這與dropout也有相同之處。如下圖所示,狗子的圖像在各代中隱藏區域,隱藏數量都不相同。測試過程中,並未添加數據增強。

  例如,將224*224*3的圖像划分為16份,每個patch為56*56*3,每個patch是否隱藏的概率p=0.5.

  作者認為,隱藏區域的替代像素值十分重要,如果簡單的將像素值替換為0,暴力填黑,會造成訓練和測試數據分布不一致問題。因此,作者采用整個數據集的均值來處理【不是單張圖像的均值】。

  個人感覺這種操作方式與要識別目標的大小和分割分數有較強的關聯,並且這種數據增強方式有極大的可能出現目標區域全部刪除或者全部保留的情況

04 GridMask

  論文題目:GridMask Data Augmentation

  文獻地址:https://arxiv.org/pdf/2001.04086v2.pdf

  作者將現有的數據增強方法大致分為三個類別:

  • 空間轉換spatial transformation
    • 隨機尺寸
    • 裁剪
    • 翻轉
    • 旋轉任意角度
  • 顏色扭曲color distortion
    • 改變亮度
    • 改變色調(hue)
  • 信息丟棄information dropping
    • random erasing
    • cutout
    • hide-and-seek(HaS)

  作者的出發點來源於為了避免連續區域的過度刪除和保留的問題,即在刪除和保留圖像上的區域信息之間達到合理的平衡Cutout,HaS中依概率對划分區域進行隱藏,很有可能造成目標全部刪除或者全部保留的現象,如下圖所示。

  random erasing中漫無目的擦除的策略也可能導致這一現象的發生。

  作者發現了一種與上述方法不同的理念:擦除的區域既不是連續的區域,也不是隨機的像素值而是一系列不連貫的像素集。如下圖所示:

  從上圖中可以看出,不連貫像素集之間是等間距分布,起始位置任意。

  不連貫的像素集可以由四個參數確定:

  • r是單位中較短的灰邊的比值。可以看出,r在一定程度上決定了原圖的保留比例,即r越大,原圖保留的越多。
  • d是一個單元的長度。d在一定程度上決定移除正方形區域的大小。
  • δx和δy是第一個完整的單元與圖像邊界之間的距離。【起點的位置】

  四個參數的選擇方式:

  • 參數定義:

  input image:

  掩碼二值矩陣M:

其中,1表示保留原像素,0表示移除原像素。

  output image:

  • r的選擇

  r確定輸入圖像的保持比。在幾何形狀中,保留比例可以表示為:

當保留比例過大,數據增強的效果較弱,可能會過擬合;

當保留比例過小,喪失過多信息,會導致欠擬合;

  那么,r與k存在的關系可以建立為:

  上述關系的公式可以對應上圖中的虛線正方形中。

  • d的選擇

  d的長度不影響保持比。但會決定了一個落下的正方形的大小。

  當r確定后,正方形的邊長l與d的關系為

  可以很明顯的看出,d越大,l越大,也就是黑色塊面積越大,相應黑色塊的個數就會越少。當d固定后,正方形的邊長在訓練過程中為固定值,因此,需要對d進行隨機處理。

  很容易得出結論,一個較小的d可以避免大多數失敗的情況。但是最近的一些研究表明,去掉一個非常小的區域對於卷積運算是無用的

  • δx和δy的選擇

  用於起始塊的偏移量。

  綜上所述,算法存在保留比例選擇的問題,可以采用固定值或者線性增加的操作,作者認為線性增加會更好。即保留比例由小變大,達到一定比例后固定。

05 Object Region Mining with Adversarial Erasing

  論文題目:Object Region Mining with Adversarial Erasing: A Simple Classification to Semantic Segmentation Approach

  文獻地址:https://arxiv.org/pdf/1703.08448.pdf

  針對弱監督語義分割問題,作者研究了一種利用分類網絡逐步挖掘識別目標區域的方法。其操作與Cutout中提出的第一種理念極為相似,也是通過訓練的方式通過對激活的部分形成遮擋,而挖掘不同的可區別目標的區域,只不過本文作者在這里將各代激活的區域組合形成分割的結果。

  具體來說:每代訓練中,對於每張圖片都可以得到CAM(Classification Activation Method),將CAM圖二值化然后蓋在原圖上,進行下一次迭代訓練,每次迭代都是學習一個不同的可判別區域,而迭代的停止條件是無法完成分類的任務。因為可判別區域理論上會全部被蓋住。

  如下圖所示:

  作者在實現這一想法使用了自編碼器AE,算法流程如下:

06 Mixup

  論文題目:mixup: BEYOND EMPIRICAL RISK MINIMIZATION

  文獻地址:https://arxiv.org/pdf/1710.09412.pdf

  mixup大家應該都很熟悉,其核心就是將兩張圖像和label采用比例混合,即圖像融合。例如下圖增加雨滴的特效。

  當然,mixup主要是為了圖形分類,兩張圖像線性混合時,label也要線性混合。

  作者給出了mixup在pytorch上的部分代碼:

  對於目標檢測如果采用mixup的方式融合,損失函數加權相加外,個人認為標簽就不需要進行線性混合了。

07 Cutmix && Mosaic(YOLOv4)

  論文題目:CutMix: Regularization Strategy to Train Strong Classifiers with Localizable Features

  文獻地址:https://arxiv.org/pdf/1905.04899.pdf

  源碼地址:https://github.com/clovaai/CutMix-PyTorch

  從算法名稱上來看,cutmix相當於Cutout和mixup的結合版。如下圖所示,Cutmix是在Cutout遮擋的位置上添加了其他的圖像。

  作者認為mixup的問題在於,它們在局部是模糊的、非自然的,因此會使模型混淆

   cutmix和mixup的區別是,混合位置是采用hard 0-1掩碼,而不是soft操作,相當於新合成的兩張圖是來自兩張圖片的hard結合,而不是Mixup的線性組合。但是其label還是和mixup一樣是線性組合

  結合操作可以定義為:

  M是與原圖大小相同的{0,1}掩碼矩陣,λ用於控制標簽融合的線性混合度。並且是通過λ參數控制裁剪矩形大小,因為λ本身就是權衡兩個圖像的比例參數,可以反應到圖像的大小上。

  偽代碼如下:

  Mosaic是YOLOv4中提出的一種數據增強方式,屬於Cutmix的擴展。Cutmix是兩張圖像的混合,即Cutout僅有一塊區域,而Mosaic是4張圖像的混合,一張圖相當於4張圖(一節更比六節強...)相當於變相的增加了訓練過程中batch的數量,也可以相應減少訓練過程中的batch,降低對於硬件的要求。

08 Stylized-ImageNet

  論文題目:ImageNet-trained CNNs are biased towards texture; increasing shape bias improves accuracy and robustness

  文獻地址:https://arxiv.org/pdf/1811.12231.pdf

  源碼地址:https://github.com/rgeirhos/texture-vs-shape

  通過論文題目就可以看出作者的結論:CNN通過訓練學習到的會偏向於紋理特征,而增加對形狀偏差可以提高准確性和魯棒性。這樣的結論來源於作者通過ImageNet訓練得到的CNN。如下圖所示,作者發現CNN會將大象紋理的貓誤分為大象相關的類別,而不是貓的類別

  基於此,作者提出了Stylized-ImageNet數據集,即風格化后的ImageNet,通過風格化的數據集與原數據集混合進行訓練,可以平衡紋理與形狀,使模型即關注紋理,也關注形狀。並且發現這樣做可以提升目標檢測的精度和魯棒性。

  另外,作者准備了六類數據來驗證這一觀點,分別是:

  • 正常圖片
  • 灰度圖片
  • 只有輪廓的圖片
  • 只有邊緣的圖片
  • 只有紋理沒有形狀的圖片
  • 紋理與形狀不一致的圖片

  通過這六類圖片在4種主流網絡上訓練,並結合人的主觀判斷。如下圖所示,可以看出:

  • 各主流網絡在正常圖片和灰度圖片上具有較高的精度;
  • 對於只包含輪廓和只包含邊緣的圖片准確率則顯著降低;
  • 對於僅包含紋理不含形狀的圖片卻具有極高的准確率。

  可見,CNN在識別物體時,主要參考的是紋理信息,而不是形狀。並且形狀似乎沒有那么重要。

  ImageNet簡稱為IN,Stylized-ImageNet簡稱為SIN

  如上表所示,作者通過不同訓練-測試組合進行進一步實驗,從第一行可以看出,通過IN訓練的圖像不能適應失去紋理特征的SIN圖像(IN-SIN);而通過SIN訓練的圖像精度(SIN-SIN)不如(IN-IN),說明失去紋理特征的圖像對於模型而言訓練難度較大;而SIN-IN的測試效果卻比SIN-SIN的要好。

  后三行是通過限制ResNet-50網絡深度,從而限制感受野進行分析,(感受野分別為33*33/17*17 /9*9)當感受野降低時,通過失去紋理SIN訓練的模型精度顯著下降,說明SIN訓練的模型中主要通過形狀shape識別目標,由於感受野的降低,失去了目標shape的信息,從而導致進度的驟降;而IN-IN模型的精度雖然有所下降,但影響並不大,可見,由IN訓練的圖像主要通過紋理捕捉信息,而通過SIN訓練的圖像主要通過形狀捕捉信息

  基於上述實驗,確實驗證了CNN在訓練過程中,主要依靠紋理捕捉信息,當紋理信息喪失后,主要依靠形狀捕捉信息。但還不能證明通過紋理與形狀的平衡能夠提升模型的精度。

  上表的實驗結果表明,將SIN與IN數據集混合訓練可以提升模型的精度。並且,使用SIN與IN數據集混合訓練后的模型再使用IN進行微調,可以進一步提升模型的性能。

  綜上所述:CNN訓練學習過程中主要依賴於紋理特征,而不是形狀特征。但是這是不好的,為了突出形狀bias,作者采用SIN做法進行數據增強,SIN與原始數據混合訓練就可以實現紋理與形狀的平衡,提升模型的精度和魯棒性。但可能對於小目標物體的識別效果並不大。

09 label smooth

  論文題目:Rethinking the Inception Architecture for Computer Vision

  文獻地址:https://arxiv.org/pdf/1512.00567.pdf

  label smooth名為標簽平滑,是一種針對分類問題(多分類)的正則化技術,優化對象為Label。也是針對分類問題中錯誤標注的解決辦法之一。

  對於多分類問題,通常將類別真值表示為one-hot vector(獨熱編碼)。

  簡而言之,one-hot就是將離散的類別編號表示為類別長度的向量,該向量中僅有一個數字為1,其余均為0,並且1的位置可以獨立的表示各個類別。例如對於包含0,1,2,3四個類的多分類問題,2的獨熱編碼表示為[0,0,1,0];同理,3的獨熱編碼表示為[0,0,0,1]。

  對於損失函數,我們需要用預測概率去擬合真實概率,而擬合one-hot的真實概率函數會帶來兩個問題:

  • 1)無法保證模型的泛化能力,容易造成過擬合;
  • 2) 全概率和0概率鼓勵所屬類別和其他類別之間的差距盡可能加大,而由梯度有界可知,這種情況很難適應。會造成模型過於相信預測的類別。

  label smoothing的操作就是針對one hot編碼,對one hot編碼采取平滑處理:

其中,ε∈[0, 1],而μ(y|xi)服從噪聲分布,相當於對one hot編碼添加了正則項。

  由於one-hot發生了改變,因此,在使用one hot和softmax后的預測概率構成的交叉損失函數也將發生相應的變化,具體來說:

  具體的推導過程可以參考:

https://leimao.github.io/blog/Label-Smoothing/

If label_smoothing is nonzero, smooth the labels towards 1/num_classes:

new_onehot_labels = onehot_labels * (1 - label_smoothing) + label_smoothing / num_classes

What does this mean?

Well, say you were training a model for binary classification. Your labels would be 0 — cat, 1 — not cat.

Now, say you label_smoothing = 0.2

Using the equation above, we get:

new_onehot_labels = [0 1] * (1 — 0.2) + 0.2 / 2 =[0 1]*(0.8) + 0.1

new_onehot_labels =[0.9 0.1]

  參考:https://towardsdatascience.com/label-smoothing-making-model-robust-to-incorrect-labels-2fae037ffbd0

  總而言之:label smoothing就是一種正則化的方法而已,讓分類之間的cluster更加緊湊,增加類間距離,減少類內距離,避免over high confidence的adversarial examples。

10 DropBlock

  論文題目:DropBlock: A regularization method for convolutional networks

  文獻地址:https://arxiv.org/pdf/1810.12890.pdf

    

  論文提出了一種針對卷積層的正則化方法DropBlock,該方法在輸入層針對圖像與之前談到的Random Erasing、CutOut、GridMask等方法是相同的,但DropBlock還可以作用於網絡處理過程中的feature map。

  從方法名稱上可以看出,DropBlock "Drop"的是block,而不單個像素點。如下圖(b)和下圖(c)所示:

  DropBlock在實現中設置了兩個主要參數:

  • block_size: 被丟棄區塊的大小
    • 該參數設置為固定值;
    • 當block_size=1時,就是傳統的dropout;
    • 可以設置為3,5,7等。
  • γ:drop過程中的概率
    • 服從伯努利公式

其中,keep_prob可以被解釋為和傳統的dropout中一樣,保留一個單元的概率。有效區域的大小為

DropBlock的主要區別是在被刪除的塊中會有一些重疊,所以上面的方程只是一個近似值。keep_prob在0.75和0.95之間。

  

  作者在做實驗時候發現,block_size設置為7*7效果最好,對於所有的feature map都一樣,γ通過一個公式來控制,keep_prob則是一個線性衰減過程從最初的1到設定的閾值(具體實現是dropout率從0增加到指定值為止),而固定keep_prob效果不好。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM