最强六大开源轻量级人脸检测项目分析 | 附打包下载
隨著深度學習的興起,工業界和學術界越來越多的使用基于深度學習的方法,而不是傳統的基于模板匹配,紋理提取或者像素積分圖等方法。因為人臉檢測本身并不屬于特別復雜的任務,因此輕量級的深度學習模型即可滿足該任務。本文匯總了六大開源的人臉檢測項目。
雖說深度學習是個黑箱,但基于深度學習的通用目標檢測算法(例 如 Faster-RCNN,SSD,YoloV3、 RetinaNet等)的檢測效果和魯棒性,遠遠的超過基于紋理、邊緣、Harr特征、Sift特征的傳統計算機視覺方法,而且近幾年隨著模型壓縮、量化技術的進步,模型運行速度也越來越快。
對于通用的目標檢測算法,以大家常用的 SSD 和 YoloV3 算法為例,因為算法在設計之初,是為Pascal VOC 或者 COCO這種 20 類 和 80 類的多類別任務設計的,因此其 backbone 網絡,也就是特征提取網絡一般使用 VGG16、Darknet53、ResNet18這種網絡,這些網絡的一個通用特點是,其卷積層的卷積核數目通常比較多(例如256,512),導致模型參數量動輒幾千萬,運算量巨大。
如果我們拿這些通用目標檢測算法來檢測一類,比如只檢測人臉、行人或者車輛時,使用那么多的卷積核數量、那么深的網絡其實是不必要的。如果要檢測 80 個類別,可能需要更多參數量來擬合,但是對于一兩個類別,其實是有點殺雞用宰牛刀了,如果你的任務不復雜,卻用了ResNet18\34這種網絡,你會發現很多卷積核的激活,其實是 0,導致白白多增加了很多計算量。所以,針對特定的人臉檢測任務,其實一些非常輕量級的網絡即可滿足任務要求。
元峰曾經寫了一篇介紹南科大于仕琪老師的開源人臉檢測項目的文章(人臉檢測速度近2000FPS,就在剛剛,這位硬核老師將訓練代碼開源了),有不少讀者對該工作很質疑,認為模型太小,導致有誤檢測,于老師親自現身回答了大家的質疑。
對于比賽刷榜,我們可以用很大的模型,例如某 AI 公司在 WiderFace上奪冠的模型,結構用 RetinaNet,backbone 用 ResNet152,另外,FPN結構也安排上,多模型融合安排上,更多的 anchor 組數安排上,這樣的模型對于刷榜非常實用,但是在工業界非常不實用,假如要部署到 ARM 的嵌入式設備上,大概率直接卡死。
隨著 AI 落地為王時代的到來,大家越來越注重精度和速度的權衡(trade off),本文精選了六大輕量級的開源人臉檢測項目,并對其進行簡單賞析和介紹。
言歸正傳,下面我們按照Github上star數目從高到低依次介紹。
1
01
libfacedetection
Github?star:?9.3k
作者:于仕琪
鏈接:https://github.com/ShiqiYu/libfacedetection
模型參數量:232萬,體積 3.34M
前幾天元峰已經對該項目進行過一次介紹了,該項目使用一個SSD架構的人臉檢測模型,在酷睿 i7 的CPU上,320x240分辨率下可以達到296.21 FPS,下圖是該項目在不同分辨率和單線程下的速度概覽。
模型結構也比較簡單,就是一個輕量級的 SSD 架構,共四個定位層,而且借鑒了RetinFace的關鍵點方法,可以同時回歸5個關鍵點。模型體積只有232萬,體積僅有3.34M
該項目的最大亮點,其實是于老師搞了一個純C++的推理版本,不依賴第三方深度學習庫,非常有利于工程部署。
1
02
Ultra-Light-Fast-Generic-Face-Detector-1MB
Github?star: 4.7k
作者:Linzaer
鏈接:https://github.com/Linzaer/Ultra-Light-Fast-Generic-Face-Detector-1MB
體積:1.04M, int8量化后 300KB
該模型是針對邊緣計算設備設計的人臉檢測模型。并提供了精簡網絡和RFB網絡兩種,在320x240的輸入分辨率下?90~109 FPS左右。
該模型的結構與上述于老師的模型結構非常相似,也是 SSD 架構,共有4個定位層,模型結構如下圖所示。
另外,該項目提供了NCNN、MNN、Caffe、Onnx、Opencv的推理代碼,可以給我們部署項目提供大量參考樣例。
1
03?
A-Light-and-Fast-Face-Detector-for-Edge-Devices
Github?star: 897
作者:YonghaoHe
鏈接:https://github.com/YonghaoHe/A-Light-and-Fast-Face-Detector-for-Edge-Devices
體積:6.1 M
從名字可以看出來,這也是一個面向邊緣設備的檢測模型,該模型同樣是 SSD架構的,不過相比前述兩個模型,該模型有八個定位層,分別對應tiny、small、medium和large四個尺度,backbone 網絡共有 25 個卷積層。
該模型在 Nvidia TX2下,320x240分辨率下可以達到 50.92 FPS。
另外,該 repo 還提供了人頭檢測、行人檢測、車輛檢測的代碼和模型。
1
04
CenterFace
Github?star: 607
作者:Star-Clouds
鏈接:https://github.com/Star-Clouds/CenterFace
體積:7.3 M、同精度小模型 2.3M
CenterFace是 anchor free 的模型結構,應該算是CenterNet針對人臉檢測任務的特例,這一點上跟RetinaFace作為RetinaNet的在人臉任務的特例有異曲同工之妙,而且該模型同時回歸了五個關鍵點。
該網絡的backbone是MobileNetV2,額外添加了FPN結構。
下圖是CenterFace的速度,在 2080TI上可以僅4.4ms。Anchor Free的模型,沒有NMS的過程,也能節省很多后處理時間。
1
05?
DBFace?
Github?star: 195
作者:dlunion
鏈接:https://github.com/dlunion/DBFace
體積:7.03M
DBFace是一個Anchor Free的網絡結構,模型原理可以說與CenterFace非常相似。這里不再展開詳細的介紹了。
1
06
RetinaFace?MobileNet0.25
Github?star:?不好定義(6.4k)
作者:yangfly
鏈接:https://github.com/deepinsight/insightface/issues/669
體積:1.68M
這個項目來自于知名的InsightFace項目,該項目在Github有6.4k star,InsightFace提出了知名的RetinaFace、ArcFace算法,而且開源了詳細的訓練代碼和預訓練模型,可以說是非常良心的開源項目。
但是 RetinaFace(應該是受 RetianNet 的結構啟發而成)本身的 backbone 是 ResNet50,yangfly 大佬將其替換為了 MobileNet0.25,模型大小僅1.68MB。RetinaFace 的模型結構如下,這里的 backbone網絡是 MobileNet 0.25。
????????根據作者的開源結果,我們對以上6大開源輕量級人臉檢測做一個速度和準確度的對比匯總。
| 名稱 | 模型大小(MB) | 速度(FPS) | WiderFace?Easy | WiderFace Medium | WiderFace Hard |
| libfacedetection | 3.34 | 296(i7CPU, 320x240) | 0.773 | 0.718 | 0.485 |
| UltraLightFace | 1.04 | 109(?320x240) | 0.853 | 0.819 | 0.539 |
| LightFast | 5.81 | 131(Titan xp, 640x480) | 0.910 | 0.881 | 0.780 |
| CenterFace | 7.3 | 227(2080TI,640x480) | 0.931 | 0.924 | 0.870 |
| DBFace | 7.03 | ? ? ? 0.905 | 0.896 | 0.794 | |
| RetinaFace MobileNet0.25 | 1.68 | 0.887 | 0.87 | 0.791 |
另外,筆者將六大框架打包下載好了,您只需要在公眾號后臺回復“人臉檢測”即可下載所有6大框架的代碼和模型。
往期精彩回顧適合初學者入門人工智能的路線及資料下載機器學習在線手冊深度學習在線手冊AI基礎下載(pdf更新到25集)本站qq群1003271085,加入微信群請回復“加群”獲取一折本站知識星球優惠券,復制鏈接直接打開:https://t.zsxq.com/yFQV7am喜歡文章,點個在看總結
以上是生活随笔為你收集整理的最强六大开源轻量级人脸检测项目分析 | 附打包下载的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数学基础、机器学习经典算法、统计学习方法
- 下一篇: 用Numpy手写各种距离度量