yolov4负样本_了解各种挂件--帮助读懂YOLOV4
YOLOV4在V3的基礎上引進了很多掛機,了解這些掛件們,會有助于真正了解這篇文章。所以我就先從掛件開始介紹吧。
Weighted-Residual-Connections
文章
weighted-residual 可以更好更快的結合不同層傳遞過來的殘差,雖然增加了一些計算量,但是當網絡層數從100+增加到1000+時,網絡效果更好,收斂得更快。公式是:
卷積網絡參數, 是控制殘差的權重, 是連續兩個conv-BN-Relus。Cross-Stage-Partial-Connections
文章
作者認為現在網絡計算量大是由于在網絡優化的過程中,重復的梯度信息。作者將一個stage的頭尾兩部分的特征圖集成起來,來解決這個問題。減少了至少20%的計算量,網絡效果與之前相當甚至超出。
CSP結構可以和其他網絡結構結合,以resnext為例
將base layer 按channel 一份為二,這種情況下甚至都不需要bottleneck,在固定FLOPs的情況下,對MAC(Memory Access Cost)的需求更低。
Cross mini-Batch Normalization
首先介紹CNB,文章。
現在很多大的網絡,往往batch-size都很小,比如一些檢測網絡,這樣的情況下直接使用BN,batch內部的統計量與全局數據的統計量會有較大的誤差會導致BN的效果不好;使用Group Normalization在layer之間做normalization會導致計算量過大;也有使用navie CNB的方式,就是多次迭代之間計算BN所需的統計量,但是不同迭代之間使用的參數
也是不一致的,所以BN的統計量也不可以一起使用(我剛看到這里的時候就想為什么不能多次迭代的mini-batches之間不更新網絡參數,直接最后BN的統計量與網絡參數一起更新)。CNB的思想就是通過泰勒展開,使用之前迭代的BN統計量去逼近當前的BN統計量
其中為
均值, 為平方均值,當步長小的時候可以忽略二階部分。整個計算還有一個近似的地方,具體到計算某個layer時,只考慮當前layer,具體可以去看論文。反觀CmBN就簡單很多,mini-batches之間不更新網絡參數,只在batch最后同時更新BN的統計量ScaleShift和網絡參數,就相當于一個大的batch,分多個mini batches進行計算,在最后一起更新。
Self-Adversarial-Training
先介紹下 Adversarial Training
內層就是給輸入加一個擾動最大化loss,外層在當前的擾動下最小化loss。
SAT包含兩個向前向后的過程:
1.第一次固定網絡的參數去訓練圖像,通過最大化loss,生成圖像沒有待檢測物體的描述(就是擾動)。
2.第二次就是在加了擾動的圖像上正常訓練模型。
下面是我在github上找的作者的詳細描述。
Mish activation
公式
y = x*tf.math.tanh(F.softplus(x))
可以發現比RELU平滑,經過測試,比RELU略慢,但是效果好。
Mosaic data augmentation
CutOut:圖像中切除一塊
MixUp:兩張圖像加權相加
CutMix:一張圖像切除一塊,另一張取對應位置補上去。
Mosaic:四張圖像拼一起。
DropBlock
dropblock是對卷積層正則化的方式,dropout是dropblock的一種,當block的大小為1時就是dropout。在使用dropout時,被drop調的單元的特征還可以通過附近激活的單元去學習;而dropblock只能從其他區域去學習,比如drop調了狗的頭,只有去學習狗的其他部分,有更好的泛化效果。
IOU,GIOU,DIOU,CIOU
這邊簡單介紹一下,具體可以看這里
IOU =
GIOU:即使IOU相同也不能代表兩個bbox的接近程度是一致的,因此提出GIOU
DIOU:當一個物體包含另一個物體時,GIOU就退化到IOU了。DIOU考慮到兩個bbox的中心點的距離。
CIOU:進一步考慮了bbox長寬比的關系。
PANet
這個著實比較熟,當年還實現過,就是最后全連接太占資源了,單卡跑起來比較費勁。
個人總結起來就是比FPN多了一個自下而上的過程,多做了一次特征融合。
SE & SAM
SE是在通道上加注意力,SAM是在特征圖的二維空間上注意力了。
正文開始
作者在V3的基礎上嘗試加入各種掛件,包括:Weighted-Residual-Connections、Cross-Stage-Partial-connections、Cross mini-Batch Normalization、Self-adversarial-training、Mish-activation、Mosaic data augmentation、DropBlock regularization 和 CIoU loss。組合這些掛件可以達到SOTA:在MS COCO 上達到 43.5%AP(65.7%
),使用Tesla V100 可以保持65的FPS。Contributions
1.任何人使用一塊1080Ti或者2080Ti就可以訓練一個又快又準的目標檢測模型。
2.我們實驗確認了各種SOTA的Bag-of-Freebies和Bag-of-Specials在訓練時對模型的影響。
3.我們對一些SOTA的方法做出改進,讓它們更適合單卡訓練,包括CNB,PAN,SAM等。
Related work
Object detection model
- Backbones for GPU:VGG,ResNet,ResNeXt,DenseNet
- Backbones for CPU:SqueezeNet,MobileNet,ShuffleNet
- two-stage: R-CNN, fast R-CNN, faster R-CNN, R-FCN, Libra R-CNN .RepPoints(anchor free)
- one-stage: 使用anchors的有 YOLO(除了V1), SSD , RetinaNet; 不帶anchor的有 CenterNet, CornerNet, FCOS 等。
- neck:backbone和head之間的部分,常常用于提取不同stage的特征,包括FPN,PAN,BiFPN,NAS-FPN。
- new: backbone 有 DetNet, DetNAS;完整的檢測模型有:SpineNet, HitDetector
Bag of freebies是指提升model的預測準確度但是不會影響增加預測的開銷,常常使用在訓練階段且只會增加訓練開銷。常見的手段就是數據增廣。數據增光包括photometric distortions和geometric distortions,具體有:
photometric distortions:調整亮度,對比度,hue,飽和度,圖像噪聲。
geometric distortions:隨機縮放、裁剪、翻轉和旋轉。
上述的方法都是像素級別的,原始的像素信息依舊保存著。
有一些嘗試模擬目標遮擋的數據增廣方式,比如random erase、CutOut、hide-and-seek、grid mask都是隨機選取原圖像中的矩形區域置0或者隨機值。也有作用在特征圖上的方法,比如DropOut、DropConnect、DropBlock;MixUp將兩張圖片融合到一起;CutMix將原圖裁剪到一部分并用另一張的對應部分填補上去;style transfer GAN也可以用來做數據增廣,可以減少CNN學習到的紋理偏差。
有一些freebies是用來解決數據的語義分布的偏差問題,一種情況就是不同類別之間數據分布不均衡,常用的方法就是hard negative example mining和 OHEM, hard negative example mining需要結束一輪訓練才能找到loss高的負樣本,而OHEM是復制了一個只做forward的分支,提取loss高的ROIs,然后放入另外一個分支訓練,兩個分支一起更新權重。因為one-stage的檢測方法沒有RPN所以不適合使用example mining的方法,于是就有了kaiming老哥的focal loss,
。除此之外還有label smoothing,可以讓模型更加魯棒。最后就是LOSS方面的設計,常用的L1,L2 loss 來做回歸,當物體的大小變化時,loss也會隨這變化。于是就有基于IOU的loss,讓降低loss與物體大小的相關性,包括IOUG,IOU,DIOU,CIOU。
Bag of specials
specials 就是指提升預測的開銷,但是可以提升模型準確率的方法。
常用的模塊有SPP,ASPP,RFB;最早的SPP結構是將特征圖分解成多個d*d的特征塊,然后使用bag-of-word的方式組合成固定大小的特征;后續就使用max-pooling的方式替代bag-of-word。ASPP相較SPP 加了空洞卷積。RFB基于inception的思想加了空洞卷積。
attention機制也是一種常用的提升方式,SE就是基于通道的attention,SAM就是基于特征圖的二維attention。
關于特征集成部分,skip-connect和hyper-column都是融合不同尺度特征的方式。SFAM是基于SE的方式,在給concated后的多尺度特征上,給通道設置權重。ASFF用softmax在point-wise的級別上給特征加權,然后相加不同尺度的特征。在BiFPN中使用多輸入加權的殘差連接給不同尺度的特征加權,然后相加。
關于激活函數,就有ReLU,LReLU,PReLU,ReLU6,SELU,Swish,hard-Swish和Mish。
關于后處理,常用的是NMS;然后基于貪心的思想,提出了soft NMS;DIoU NMS是進一步把bbox的center point的信息加入到NMS的計算中。
Methodology
基于GPU,使用CSPResNeXt50/CSPDarknet53.
基于VPU,使用EfficientNet-lite/MixNet/GhostNet/MobileNetV3.
Selection of architecture
對分類來說最優的網絡結構,對檢測來說往往不是。對分類任務相反,檢測任務需要:
- 更高的輸入size,用于檢測小目標。
- 更深的網絡,更大的感受野去覆蓋更大的輸入size。
- 更多的參數,更大的模型復雜度去支持檢測各種尺度的物體。
Selection of Bof and Bos
Additional improvements
作者做出的一些改進方法
- Mosaic和SAT
- 用遺傳算法尋找最優超參數
- 調整現有方法,modified SAM,modified PAN, CmBN
SAM 從 scale-wise 的attention該成point-wise的;PAN從add改成concate。
YOLOV4
Experiments
具體的實驗細節就不貼在這里了。
總結
以上是生活随笔為你收集整理的yolov4负样本_了解各种挂件--帮助读懂YOLOV4的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 百度搜索打不开第二页_如何查询百度关键词
- 下一篇: 动态鼠标指针_推荐8款电脑鼠标指针,让你