YOLO-FastestV2:更快,更輕!移動端高達300 FPS!引數量僅250k
https://mp.weixin.qq.com/s/ECQ_J_GWpLFCFAO7Emb0xw
https://zhuanlan.zhihu.com/p/400474142
YOLO-FastestV2專案連結:
https://github.com/dog-qiuqiu/Yolo-FastestV2
貼圖先和yolo-fastest-1.1對比下:
是的,這次我沒有優化精度,這次優化的是速度,畢竟追求的是fastest..,不過,用0.3%的精度損失換取30%推理速度的提升以及25%的引數量的減少,至少我覺得還是挺值,與其說追求的速度,其實更加註重的是演算法效果與推理效率的價效比。
先說說Yolo-Fastest的初衷吧,其實早期輕量的目標檢測大家多是用的Mobilenet-SSD,其實在實際測試中,在常用的ARM裝置上是很難達到實時的,只有在一些高階手機大核全開勉強達到實時,更別說工業界常用的"效能強悍的"RK3399等ARM CPU呢,達到實時基本是不可能的。包括後來自己用mobilenet對yolov3進行輕量級的優化,用1.8BFlops的計算量在Kirin 990效能上大核全開達到~55fps,雖然能在高階手機上達到很好的速度,但是在一些低端的手機CPU以及工業界常用的高階晶片RK3399,還是沒法滿足實時的。其次,在實際的應用中,考慮功耗,系統資源佔用,一般也不會多核全開去推理模型,畢竟還得留些資源給其他應用,所以我一般部署模型只會設定單核,最多也是雙核。尤其在手機上,功耗問題特別嚴重,假如模型推理時CPU佔用過高的話,會引起過熱降頻,反而會適得其反,其次還有續航的減少。
所以,不光只單單看模型的推理耗時,還得著重關注模型推理所消耗的系統資源,記憶體,CPU佔用等,例如兩個模型都可以在cpu上達到30fps,但是模型A是在單核的情況下達到實時,cpu佔用才20%,模型B是在4核全開的情況下達到實時,cpu佔用可能100%,但是模型B效果可能要好一些,這種情況下需要權衡利弊。
Yolo-Fastest注重的就是單核的實時推理效能,在滿足實時的條件下的低CPU佔用,不單單只是能在手機移動端達到實時,還要在RK3399,樹莓派4以及多種Cortex-A53低成本低功耗裝置上滿足一定實時性,畢竟這些嵌入式的裝置相比與移動端手機要弱很多,但是使用更加廣泛,成本更加低廉。
先說這一版的改進吧,首先模型的backbone替換為了shufflenetV2,相比原先的backbone,訪存減少了一些,更加輕量,其次Anchor的匹配機制,參考的
-
backbone對應44x44解析度的特徵圖太少
-
正負anchor的嚴重不平衡
-
小物體屬於難樣本對於模型學習能力要求高
Yolo-FastestV2檢測頭
最後,大家可能關心的是和yolox和nanoDet的對比,精度肯定比不過啊, 不過速度應該會快個兩三倍,那體積只有 1.3M 的PP-YOLO Tiny("比 YOLO-Fastest 更輕、更快?")呢,Emmm...用int8的量化後體積和yolo-fastest的fp32的體積比,有點虧...YOLO-FastestV2 int8可是僅僅只有250kb哦,雖然我沒跑過PP-YOLO Tiny,但是應該還是比他快。所以,模型的選擇還是看大家需求哦。
RK3399和樹莓派4搭配ncnn bf16s,YOLO-FastestV2 是可以實時的哦
模型的最終實測效果:
YOLO-FastestV2專案連結:
https://github.com/dog-qiuqiu/Yolo-FastestV2
YOLO-FastestV2程式碼下載