天天看點

Yolo-FastestV2:更快,更輕,移動端可達300FPS,參數量僅250k

貼圖先和yolo-fastest-1.1對比下:

Yolo-FastestV2:更快,更輕,移動端可達300FPS,參數量僅250k

是的,這次我沒有優化精度,這次優化的是速度,畢竟追求的是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的比對機制,參考的YOLOV5,其實YOLOV5與Darknet的官版YOLOV4在Anchor的比對機制的差別還是挺大的,這點不細講了,網上解析一大堆,其次是檢測頭的解耦合,這個也是參考YoloX的,将檢測框的回歸,前景背景的分類以及檢測類别的分類有yolo的一個特征圖解耦成3個不同的特征圖,其中前景背景的分類以及檢測類别的分類采用同一網絡分支參數共享。最後将檢測類别分類的loss由sigmoid替換為softmax。對了,這次還是隻有輸出11x11和22x22兩個尺度的檢測頭,因為發現在coco上三個檢測頭(11x11,22x22,44x44)和兩個檢測頭(11x11,22x22)的精度無太大差異,個人感覺原因如下:1.backbone對應44x44分辨率的特征圖太少2.正負anchor的嚴重不平衡3.小物體屬于難樣本對于模型學習能力要求高

Yolo-FastestV2:更快,更輕,移動端可達300FPS,參數量僅250k

最後,大家可能關心的是和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:更快,更輕,移動端可達300FPS,參數量僅250k
Yolo-FastestV2:更快,更輕,移動端可達300FPS,參數量僅250k
Yolo-FastestV2:更快,更輕,移動端可達300FPS,參數量僅250k
Yolo-FastestV2:更快,更輕,移動端可達300FPS,參數量僅250k

Github:https://github.com/dog-qiuqiu/Yolo-FastestV2

繼續閱讀