Face detection
SCRFD 10GF BNKPS
InsightFace SCRFD with 5-point keypoints, the accuracy-pinned variant.
About this model
SCRFD 10GF returns face boxes plus 5 keypoints: left eye, right eye, nose, left mouth, right mouth. The build is the InsightFace fp32 ONNX, around 17 MB, with dynamic input. The keypoints align cleanly into a 112x112 crop for downstream face models.
On M1 Max with CoreML, warm runs land at 49 ms, around 20 fps. Pair with the 500MF variant when you need live-feed speed and a smaller asset.
What you can build
- Auto-frame faces in a portrait camera or video call.
- Drive a face filter app with stable 5-point landmarks.
- Crop and align faces before downstream attribute models.
- Detect faces in user uploads for an AR sticker pipeline.
Variants & downloads
Choose the build for your appModel files are being prepared.
Explore the model’s examples, source links, and integration notes while download variants are added.
Example inference
Performance
Results depend on the device, runtime, and test conditions. Each measurement keeps its own context.
M1 Max, macOS 15, ONNX Runtime 1.17
See original catalog hardware notes · CPU
355.4 ms
Warm inference
Reference result from the existing catalog; conversion variant and measurement date were not recorded.
M1 Max, macOS 15, ONNX Runtime 1.17
See original catalog hardware notes · CoreML
48.6 ms
Warm inference
Reference result from the existing catalog; conversion variant and measurement date were not recorded.
RTX 2060, Ubuntu 24.04, ONNX Runtime 1.24.3
See original catalog hardware notes · CUDA
22.5 ms
Warm inference
Reference result from the existing catalog; conversion variant and measurement date were not recorded.
Integration examples
Vision SDK integration
cpp
#include "imaged/sdk.hpp"
#include "imaged/families/face_detection/face_detection_family.hpp"
imaged::SDK::AI ai;
auto& config = ai.getOptions();
config.set("face_detection.model", "weights/scrfd_10g_bnkps.onnx");
config.set("face_detection.inference.provider", "coreml");
imaged::SDK::FaceDetectionFamily family;
family.load(config);
imaged::SDK::Image image;
image.load("photo.jpg");
auto result = std::get<imaged::SDK::DetectionResult>(family.run(&image));
for (const auto& face : result.detections) {
// face.boundingBox, face.score, face.keypoints (5 points)
}