论文阅读笔记 | 目标检测算法——PP-YOLOv2
如有錯誤,懇請指出。
文章目錄
- 1. Introduction
- 2. Revisit PP-YOLO
- 2.1 Pre-Processing
- 2.2 Baseline Model
- 2.3 Training Schedule
- 3. Selection of Refinements
- 3.1 Path Aggregation Network
- 3.2 Mish Activation Function
- 3.3 Larger Input Size
- 3.4 IoU Aware Branch
- 4. Other try
- 4.1 Cosine Learning Rate Decay
- 4.2 Backbone Parameter Freezing
- 4.3 SiLU Activation Function
- 5. Result
paper:PP-YOLOv2: A Practical Object Detector
code:https://github.com/PaddlePaddle/PaddleDetection
摘要:
在PP-YOLO的基礎上再進行了改進,提高精度的同時幾乎保持推斷時間不變。作者分析了一系列改進,并通過增量消融實驗來實證評估它們對最終模型性能的影響。最后PP-YOLOv2取得了更佳的性能(49.5%mAP)-速度(69FPS)均衡,并優于YOLOv4與YOLOv5。
PP-YOLO閱讀筆記:目標檢測算法——PP-YOLO
1. Introduction
在各種實際應用中,不僅計算資源有限,而且軟件支持不足,所以雙階段的目標檢測進行的非常緩慢。所以如何在保持推理速度的同時提高YOLOv3的有效性是實際應用中的一個關鍵問題。為了同時滿足這兩個問題,作者添加了一些改進,這些改進幾乎不會增加推斷時間,從而提高PP-YOLO的整體性能。
2. Revisit PP-YOLO
2.1 Pre-Processing
應用從Beta(α,β)Beta(α, β)Beta(α,β)分布中采樣的權重MixUp,其中α=1.5,β=1.5α=1.5, β=1.5α=1.5,β=1.5。
然后RandomColorDistortion、RandomExpand、RandCrop、RandomFlip以0.5的概率依次應用。
然后對RGB通道進行歸一化處理。
最后,輸入大小從[320,352,384,416,448,480,512,544,576,608]均勻抽取。
2.2 Baseline Model
基準模型是PP-YOLO,其是YOLOv3的改進版本,首先使用ResNet50-vd對YOLOv3的backbone進行替換,隨后使用了10個技巧來提升性能。
具體查看:論文閱讀筆記 | 目標檢測算法——PP-YOLO
2.3 Training Schedule
在COCOtrain2017上,使用隨機梯度下降(SGD)對網絡進行訓練,使用分布在8個gpu上的96張圖像的小批量進行500K迭代。學習率在4K迭代時從0線性增加到0.005,在400K和450K迭代時分別除以10。重量衰減設為0.0005,動量設為0.9。采用梯度裁剪來穩定訓練過程。
3. Selection of Refinements
PP-YOLOv2大致結構如圖所示:
3.1 Path Aggregation Network
使用PAN代替FPN,多了一個自頂向下的信息匯集,之前多次提及,這里不再重復。
3.2 Mish Activation Function
Mish激活函數在YOLOv4、YOLOv5等多種實際的探測器中被證明是有效的。它們在骨干中采用mish激活功能。然而,作者更喜歡使用預先訓練的參數,因為有一個強大的模型,在ImageNet上達到82.4%的top-1精度。為了保持主干不變,我們將mish激活函數應用于檢測頸部而不是主干。
3.3 Larger Input Size
增加輸入尺寸會擴大對象的面積。因此,小范圍的目標信息將比以前更容易保存。因此,性能將得到提高。但是,較大的圖像輸入尺寸會占用更多的內存。要應用這個技巧,我們需要減少Batchsize。更具體地說,我們將Batchsize從每GPU 24張圖像減少到每GPU 12張圖像,并將最大輸入尺寸從608擴大到768。
輸入大小從[320、352、384、416、448、480、512、544、576、608、640、672、704、736、768]均勻繪制。
3.4 IoU Aware Branch
在PP-YOLO中,IoU aware loss采用的是軟權重格式(soft weight format),與初衷不一致。因此作者采用軟標簽格式(soft label format)。公式為:
loss=?t?log?(σ(p))?(1?t)?log?(1?σ(p))loss = -t*\log(σ(p))-(1-t)*\log(1-σ(p)) loss=?t?log(σ(p))?(1?t)?log(1?σ(p))
其中t表示錨點和它匹配的ground-truth邊界框之間的IoU,p是IoU感知分支的原始輸出。ps:僅僅正樣本的IoU損失進行了計算
IoU注意力的提出由來:
在YOLOv3中,將分類概率和目標得分相乘作為最終檢測置信度,其中這沒有考慮到定位精度。為了處理這個問題,論文中引入一個IoU預測分支。在訓練過程中,使用感知IoU損失來訓練這個分支。在推理階段,最后的分類置信度由分類概率、目標分數和IoU值乘積得到。最終的檢測置信度然后用作后續NMS的輸入。
4. Other try
作者其實還嘗試了其他的一些消融實驗,但是沒有效果,所以最后也沒有使用這些技巧,這里還是記錄一下比較好。
4.1 Cosine Learning Rate Decay
與線性步進學習率衰減不同,余弦學習率衰減是學習率的指數衰減。不過其對初始學習率、熱身步數、結束學習率等超參數敏感,所以沒有看見其對COCOtrain2017有一個積極影響。(但是對COCOminitrain產生了積極的作用)
4.2 Backbone Parameter Freezing
在對下游任務進行ImageNet預訓練參數的微調時,通常會在前兩個階段凍結參數。然后這里同樣是對COCOminitrain有效而對COCOtrain2017無效。
不一致現象的一個可能原因是兩個訓練集的大小不同,COCO minitrain2017是COCOtrain2017的五分之一。在小數據集上訓練的參數的泛化能力可能比預先訓練的參數差。
4.3 SiLU Activation Function
同樣的SiLU,對COCOminitrain有效而對COCOtrain2017無效。所以使用Mish而不是SiLU。
5. Result
- 消融實驗,各個在PP-YOLOv2中各個技巧帶來的提升:
- 與SOTA的對比:
總結:
本文介紹了PP-YOLO的一些更新,形成了一個高性能的對象檢測器PPYOLOv2。PP-YOLOv2比其他著名的探測器(如YOLOv4和YOLOv5)在速度和精度上取得了更好的平衡。在本文中,我們探索了一些技巧,并展示了如何將這些技巧結合到PPYOLO檢測器上,并演示了它們的有效性。
總結,其實PP-YOLO系列幾乎沒有任何創新的,但通過實驗結合技巧提升了檢測性能。
總結
以上是生活随笔為你收集整理的论文阅读笔记 | 目标检测算法——PP-YOLOv2的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 招聘 风波
- 下一篇: linux stoping redis,