:3 個調(diào)優(yōu)點把單幀耗時壓到 11ms)
InsightFace SCRFD 人臉檢測實戰(zhàn)3 個調(diào)優(yōu)點把單幀耗時壓到 11ms【免費下載鏈接】insightfaceState-of-the-art 2D and 3D Face Analysis Project項目地址: https://gitcode.com/GitHub_Trending/in/insightface假設你要給一路實時視頻流加上人臉框要求每幀穩(wěn)定檢測出人臉并返回坐標還不能讓整條流水線卡住。InsightFace 的 SCRFD 人臉檢測器就是為這種要快、又要準的場景準備的它在 0.67M 參數(shù)量下做到 WIDERFace Easy 93.78%VGA 分辨率單幀約 4.2ms。下面從選檔位、跑通最小閉環(huán)到調(diào)優(yōu)和上線檢查給你一份能直接照著做的交接文檔。先定需求按硬件與精度選模型檔位這一節(jié)幫你回答到底用哪個 SCRFD 規(guī)格。InsightFace 的檢測方法有三種RetinaFace、SCRFD、blazeface_paddle見 detection/README.md。SCRFD 是其中的效率擔當同一精度下參數(shù)量比 RetinaFaceResNet5029.50M 參數(shù)、21.7ms低一個數(shù)量級。SCRFD 又按 FLOPs 分成幾檔精度隨檔位升高耗時也隨檔位上升官方在 VGA 分辨率下的實測數(shù)據(jù)如下來自 detection/scrfd/README.md模型檔位EasyMediumHard參數(shù)量(M)推理耗時(VGA)SCRFD_500M90.5788.1268.510.573.6msSCRFD_2.5G93.7892.1677.870.674.2msSCRFD_10G95.1693.8783.053.864.9msSCRFD_34G96.0694.9285.299.8011.7ms取舍建議邊緣設備、多路并發(fā)選 500M 或 2.5G單路高清晰度、追求 Hard 集召回選 10G只有極難場景大遮擋、遠距離才上 34G。帶_KPS后綴的檔位額外輸出 5 個關鍵點耗時基本不變需要人臉對齊時優(yōu)先選它。十分鐘跑通第一個檢測結(jié)果這一節(jié)給你一條最短路徑裝環(huán)境、自動拉模型、幾行代碼出框。優(yōu)先先跑通不碰識別、屬性等其它模塊。git clone https://gitcode.com/GitHub_Trending/in/insightface cd insightface/python-package pip install -e .python-package是 Python 包源碼安裝后即可自動從模型庫下載默認模型含 SCRFD 檢測器。核心推理調(diào)用如下參考 examples/demo_analysis.py 的寫法檢測類封裝在 python-package/insightface/model_zoo/scrfd.pyimport cv2 from insightface.app import FaceAnalysis app FaceAnalysis(allowed_modules[detection]) app.prepare(ctx_id-1, det_size(640, 640)) faces app.get(cv2.imread(t1.jpg)) print(faces[0].bbox, faces[0].kps)allowed_modules[detection]讓它只加載檢測器ctx_id-1走 CPU改成 0 用 GPU。faces[0].bbox是原圖尺度下的[x1,y1,x2,y2,score]kps是 5 個關鍵點。倉庫自帶的測試圖 t1.jpg 里有 6 張人臉len(faces)應為 6可以拿來驗證結(jié)果是否正確。三個真正影響耗時的調(diào)優(yōu)點這一節(jié)幫你把跑通的版本再榨出余量每條給原理 關鍵配置 預期收益。1. 下調(diào)輸入分辨率。前向耗時主要由特征圖尺寸決定。detect()內(nèi)部會把圖像 resize 到det_size再推理改小即可省算力。官方在 AMD Ryzen 9 3950X、SCRFD-0.5GF、單線程下的實測輸入尺寸單線程耗時640×48028.3ms320×24011.4ms即分辨率減半耗時約降到原來的 1/2.5。人臉本身較小的場景直接選 320×320 或更小收益最明顯。2. 只加載檢測模塊。FaceAnalysis默認會把目錄下所有 onnx識別、屬性等都加載并逐幀推理純檢測場景用不上。用allowed_modules[detection]過濾掉多余模型減少初始化時間和每幀無謂的計算。3. 復用 anchor 中心緩存與動態(tài)輸入 ONNX。forward()會把各尺度特征圖的網(wǎng)格中心點anchor_centers存進self.center_cache上限 100 組見 detection/scrfd/tools/scrfd.py 的center_cache邏輯相同分辨率的連續(xù)幀不必重算 mgrid。導出 ONNX 時保留默認動態(tài)輸入同一模型即可接受不同尺寸免去多份固定 shape 的模型。換檔位時只改一處即可app.prepare(ctx_id-1, det_size(320, 320)) faces app.get(img, max_num0, det_metricdefault)上線前檢查清單這一節(jié)幫你在部署前逐項確認避免本地能跑、線上翻車。輸入尺寸det_size是否與目標攝像頭分辨率匹配人臉是否會小于可解析的最小尺寸推理后端ctx_id選 CPU(-1) 還是 GPU(0)GPU 下確認 provider 生效檢測閾值det_thresh默認 0.5按誤檢/漏檢權(quán)衡調(diào)整NMSnms_thresh默認 0.4重疊人臉多時可適當下調(diào)并發(fā)與線程多線程下OMP_NUM_THREADS與業(yè)務線程數(shù)是否沖突模型完整性確認 onnx 文件 hash 未被截斷損壞日志與監(jiān)控單幀耗時、每幀檢出人臉數(shù)的埋點便于回歸新手高頻翻車點現(xiàn)象小臉檢測不到只有大頭。原因det_thresh默認 0.5 偏高或輸入分辨率下小臉已低于一個像素級特征。處理把det_thresh降到 0.3~0.4 試召回同時確認det_size足夠大別為了提速把小臉裁沒。現(xiàn)象換了分辨率框的位置整體偏移或大小不對。原因detect()內(nèi)部做了 resize padding并除以det_scale還原回原圖尺度如果你手動又縮放了一次坐標就錯位了。處理直接用detect()返回的坐標不要再二次縮放確認歸一化用的是 mean/std 127.5/128。現(xiàn)象CPU 實測比預期慢一大截。原因默認把識別、屬性等所有模塊都加載并逐幀跑了或OMP_NUM_THREADS被外部腳本設成 1官方 CPU 基準就是在OMP_NUM_THREADS1下測的。處理加allowed_modules[detection]并按實際核心數(shù)配置線程。繼續(xù)深入以上覆蓋的是 SCRFD 檢測這條主線。想訓練自己的模型看 detection/scrfd/README.md 里的訓練與 WIDERFace 評估流程想把檢測接上人臉識別參考python-package/insightface/model_zoo/arcface_onnx.py與recognition/下的各框架實現(xiàn)。先把檢測跑穩(wěn)再往上疊加是接入 InsightFace 最省事的順序。【免費下載鏈接】insightfaceState-of-the-art 2D and 3D Face Analysis Project項目地址: https://gitcode.com/GitHub_Trending/in/insightface創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考