FastestDet:比yolov5更快!更強!全新設計的超實時Anchor-free目標檢測算法(附源代碼下載)
本篇文章轉自于知乎——qiuqiuqiu,主要設計了一個新穎的輕量級網絡!
代碼地址:https://github.com/dog-qiuqiu/FastestDet
01
概述
FastestDet是設計用來接替yolo-fastest系列算法,相比于業界已有的輕量級目標檢測算法如yolov5n, yolox-nano, nanoDet, pp-yolo-tiny, FastestDet和這些算法壓根兒不是一個量級,FastestDet無論在速度還是參數量上,都是要小好幾個數量級的(不要在拿int8的模型和我fp32的模型比體積了,不公平),但是精度自然而然也比不過。FastestDet是針對計算資源緊缺的ARM平臺設計的,突出單核效能,因為在實際業務場景中,不會把所有CPU資源都給推理框架做模型推理的,假如說你想在例如樹莓派, RK3399, RK3568去跑實時目標檢測,那么FastestDet是比較好的選擇,或者移動端上不想占用太多cpu資源,也可以去用單核并設置cpu sleep去推理FastestDet,在低功耗的條件下運行算法。
02
新框架算法
先說下FastestDet的幾個重要特性:
單輕量化檢測頭
anchor-free
跨網格多候選目標
動態正負樣本分配
簡單的數據增強
下面我就一個個去詳細講下吧:
單輕量化檢測頭這個是對網絡結構上對算法模型進行優化,主要是提升算法運行速度,簡化后處理步驟,大家可以先看下這塊的網絡結構:
其實多檢測頭設計的是為了適應檢測不同尺度物體目標,高分辨率的檢測頭負責檢測小物體,低分辨的檢測頭負責檢測大物體,一種分而治之的思想。
我個人覺得根因在于感知野,不同尺度的物體所需要的感知野是不同的,而模型每層的感知野都是不一樣的,包括FPN也是對不同感知野特征的匯總融合。這塊單檢測頭我也是參考的YOLOF的思想,在網絡結構中,采用類似inception的5x5分組卷積并行網絡結構,期待能融合不同感知野的特征,讓單個檢測頭也能適應檢測不同尺度的物體。
Anchor-Free原先的anchor-base算法在訓練模型都需要對數據集進行anchor-bias的運算,anchor-bias可以理解為對數據集中標注物體的寬高進行聚類,得到一組先驗寬高,網絡在這組先驗寬高的基礎上去優化預測框的寬高。FastestDet采用的是anchor-free算法,模型是直接回歸gt于特征圖寬高的scale值的,是沒有先驗寬高。這種方法可以簡化模型后處理。而且對于anchor-base算法每個特征圖的特征點是對應N個anchor候選框的,而這種anchor-free每個特征圖的特征點只對應一個候選框,所以在推理速度上也是有優勢的。
跨網格多候選目標這塊還是借鑒了yolov5,不單單只把gt中心點所在的網格當成候選目標,還把附近的三個也算進行去,增加正樣本候選框的數量,如下圖所示:
所謂的動態正負樣本分配其實就是在模型訓練過程去動態分配正負樣本,這是有別于以前yolo-fastest的,原先yolo-fastest的anchor-bias設置好以后, 通過計算anchor-bias與gt寬高的scale,對scale卡固定閾值分配正負樣本(參考yolov5的做法),而anchor-bias和gt在訓練過程中都是不變的,所以正負樣本分配在訓練過程中也是不變的。
而在FastestDet的正負樣本分配參考的ATSS,通過設置預測框與GT計算的SIOU的均值作為分配正負樣本的閾值,假如當前預測框與GT的SIOU閾值大于均值,那么為正樣本,反之異然。(為什么沒有參考simota?那是因為在構建cost矩陣時,不同loss的權重還得調超參,懶的調了)
簡單的數據增強對于輕量級的模型數據增強要慎重,本來學習能力差,腦子不怎么好使,上來給難題做可不拉跨,所以采用簡單的數據增強如隨機平移和隨機縮放,并沒有采用moscia和Mixup。
03
實驗結果
*博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。