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