YOLOv4的Tricks解讀二 --- 正則化(DropOut/DropConnect/DropBlock)


YOLOv4中採用了DropBlock正則化方法,本文就YOLOv4中涉及和採用的DropBlock進行總結和學習。

DropOut

在這裏插入圖片描述
DropOut在全連接層使用,進行隨機放棄連接。

  • 在訓練階段,對於每個節點,以p概率將其輸出值保留,以1-p概率將其輸出值乘以0(以一定的概率讓神經元的激活函數停止工作,相當於這個神經元就廢了~~)。
  • 在測試階段,輸出結果要乘以p。原因是:保持訓練階段和測試階段的期望值相同。訓練階段,對於每個節點,dropout之前的輸出是x, 經歷dropout之後的期望值是px+(1−p)∗0=px,因此在測試階段需要將結果乘以p,從而輸出的期望值是px(可以看到,這樣增加了測試階段的計算量,影響測試性能。)。

按照原文的話就是進行激活函數運算之後乘以一個二進制的掩碼向量(向量的中的0,1是隨機的),這樣就是dropout的計算。

DropOut之前的計算:
在這裏插入圖片描述
使用DropOut後的計算:
在這裏插入圖片描述
其中p是概率大小,公式中Bernoulli函數,是爲了以概率p,隨機生成一個0、1的向量。

dropout爲什麼可以緩解網絡過擬合?

  • 減少了節點之間的co-adaptation(共適應性)
  • bagging的極限形式

DropConnect

在這裏插入圖片描述
由上圖看出,DropOut是將神經元激活輸出隨機置0,而DropConnect是作用於權重,以1-p概率將節點中的每個與其相連的輸入權重清0(一個作用於神經元激活輸出,一個作用於神經元輸入 — 隱層權重)。
看看DropConnect的trainning和inference兩部分。
在這裏插入圖片描述
注意:因爲DropConnect只能用於全連接的網絡層(和dropout一樣),如果網絡中用到了卷積,則用patch卷積時的隱層節點是不使用DropConnect的,因此上面的流程裏有一個Extract feature步驟,該步驟就是網絡前面那些非全連接層的傳播過程,比如卷積+pooling.
簡單來說,DropConnect的訓練過程是:

  • 按照伯努利分佈以概率p生成一個Mask二進制矩陣
  • 使用上步生成的Mask矩陣乘以權重,這樣就將權重矩陣中的部分元素值0,即將部分權重清0,然後乘以特徵矩陣,再然後經過記過函數得到激活層輸出。
  • 計算模型輸出
  • 開始反向傳播,更新梯度

注意更新梯度那裏在更新DropConnect layer的梯度時,置0權重的梯度不參與更新。它的考慮是前向計算的時候這些被選中的W都是0,那麼在梯度更新的時候也不允許有更新,因此這裏梯度矩陣先乘以Mask矩陣,將置0的權重對應的梯度置零,那麼對應的權重梯度就沒有得到更新

DropBlock

論文:https://arxiv.org/pdf/1810.12890.pdf
代碼:https://github.com/miguelvr/dropblock

DropOut的主要問題就是隨機drop特徵,這一點對於FC層是有效的,但在卷積層是無效的,因爲卷積層的特徵是空間強相關的。當特徵相關時,即使有DropOut,信息仍能傳送到下一層,導致過擬合。

DropBlock是適用於卷積層的正則化方法,它作用的對象的特徵圖。在DropBlock中,特徵在一個個block中,當應用DropBlock時,一個feature map中的連續區域會一起被drop掉。那麼模型爲了擬合數據網絡就不得不往別出看以尋找新的證據。

看下圖:
在這裏插入圖片描述
其中(a)是輸入到卷積網絡的原始圖像,(b)和©中的綠色區域包括激活單元,這些激活單元在輸入圖像中包含語義信息。隨機丟棄激活對刪除語義信息無效,因爲附近的激活包含緊密相關的信息。 相反,刪除連續區域可以刪除某些語義信息(例如,頭或腳),從而強制其餘單元學習用於分類輸入圖像的其它特徵,這樣就增加了模型的泛化能力。

依據論文的說法,在一系列模型和數據集中,DropBlock的性能遠遠優於Dropout。 將DropBlock添加到ResNet-50體系結構可將ImageNet上的圖像分類準確性從76.51%提高到78.13%。 在檢測到COCO時,DropBlock將RetinaNet的AP從36.8%提高到38.4%。

它與dropout的主要區別在於,它從圖層的特徵圖中刪除連續區域,而不是刪除獨立的隨機單位(看起來DropBlock的本質其實就是將Cutout方法應用於CNN的每一個特徵圖。)。 DropBlock具有兩個主要參數,分別是block_size和γ。 block_size是要刪除的塊的大小,而γ控制要刪除的激活單元數。DropBlock的僞代碼如下:
在這裏插入圖片描述

  • 輸入爲:層激活輸出(也就是feature map A),block_size,γ,mode-

  • 當mode是inference時直接返回特徵圖,不做DropBlock。

  • 按照伯努利分佈(0-1分佈)採樣mask M

  • 對於每個零位置M_ij,創建一個以M_ij爲中心,寬度,高度爲block_size的空間正方形mask,並將正方形中M的所有值設置爲0(參見圖2)。(需要注意的是僅從淺綠色區域採樣M的中心點,這樣block就是完整的)

  • 新的A = A * M

  • 特徵歸一化:A = A * count(M)/count_ones(M)

在這裏插入圖片描述
根據論文,有在不同的特徵通道上共享DropBlock mask和每個特徵通道上獨享DropBlock mask兩種方法,實驗證實第二種效果更好。

設置block_size的值。 在作者的實現中,作者爲所有特徵圖設置了恆定的block_size,而與特徵圖的分辨率無關。 當block_size = 1時,DropBlock類似於dropout;當block_size覆蓋整個功能圖時,DropBlock類似於SpatialDropout (drop掉一個feature map的整個通道)。

設定γ的值。 實踐中,作者沒有明確設置γ。 γ根據以下公式進行調整:
在這裏插入圖片描述
其中keep_prob可以解釋爲將單元保留在dropout的概率。 有效種子區域的大小爲(feat_size -block_size +1)^2,其中feat_size是feature map的大小。 DropBlock的主要細微差別是在丟棄的塊中會有一些重疊,因此上面的方程式只是一個近似值。 實驗中,首先估計要使用的keep_prob(介於0.75和0.95之間),然後根據上式計算γ。

預定的DropBlock。 作者發現在訓練期間使用固定的keep_prob的DropBlock效果不佳。 應用小值的keep_prob會損害一開始的學習。 相反,隨着時間的推移,將keep_prob從1逐漸減小到目標值更加穩健,並且對大多數keep_prob值進行了改進。 實驗中,作者使用了降低keep_prob值的線性方案,該方案在許多超參數設置中都可以正常工作。 此線性方案類似於ScheduledDropPath 。

看看實驗結果:
在這裏插入圖片描述
第一行爲原始的圖片,第二行爲未使用DropBlock,第三行爲block_size=1,第四行爲block_size=7。可以看出

(1)使用DropBlock比不使用DropBlock具有更大的熱量圖

(2)DropBlock的block_size越大,熱量圖的激活部分越多

ImageNet 圖像分類:
在這裏插入圖片描述
COCO 目標檢測:
在這裏插入圖片描述
PASCAL VOC 圖像分割:
在這裏插入圖片描述

參考
https://www.pianshen.com/article/9279561411/
https://blog.csdn.net/qq_14845119/article/details/85103503
https://www.jianshu.com/p/cf403e991a88

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章