eKYC RTFS-10k research baseline

MobileNetV3-Small frame encoder with temporal mean/standard-deviation pooling and a binary face-swap head. Positive class is spoof. Scores are uncalibrated research estimates.

Source: Kontur.AI, RTFS-10k, https://huggingface.co/datasets/kontur-ai/rtfs-10k, revision 83063ae33220e8da968587d4365bd986c7005835, CC BY-SA 4.0. This release attributes the dataset creators and carries the same license. No source videos, donor photos, subject metadata or individual predictions are included.

The experiment downloaded 60 genuine/face-swap pairs (120 videos, 254,898,176 video bytes) with deterministic source-video and donor-photo partitions: 36/12/12 pairs for train/development/test. Known source and donor IDs do not cross splits. The metadata does not prove distinct human identity separation across different originals. This is a tiny custom subset, not the official Replay-Attack benchmark.

Quality preflight retained 57 training videos (31 genuine, 26 face swaps) and 19 development videos (9 genuine, 10 face swaps). Model/threshold selection used development data only. Epoch 5 was selected; development HTER was 42.22%, indicating a weak initial baseline.

Tiny custom holdout results

Metrics below are conditional on passing quality checks, with coverage shown beside them. The holdout contains 12 genuine/face-swap pairs. The operating threshold is fixed from development data. Confidence intervals and an independent dataset are not available.

Input Scored / total ROC-AUC PR-AUC HTER
Native 19 / 24 0.611 0.585 35.0%
320×240 20 / 24 0.610 0.653 50.0%
240×180 19 / 24 0.544 0.636 43.9%
160×120 5 / 24 0.667 0.708 50.0%

Native APCER is 0% and BPCER is 70%, so this operating point wrongly rejects most scored genuine clips. Five native clips were rejected by preprocessing and are not silently counted as successful model predictions. At 160×120, coverage is only 20.8%; the apparent AUC on five scored clips is not reliable evidence of low-resolution robustness.

Uncached end-to-end median latency on successful native clips was 673 ms on the local CUDA GPU and 671 ms on the local CPU. Decoding/detection dominate. These figures exclude network upload and model loading and are not T4 or Render performance claims. report-cuda.json and report-cpu.json include subgroup results, rejection reasons, ROC/PR curves, confusion matrices, and latency percentiles. Individual predictions are excluded from this release.

Initial training used NVIDIA GeForce RTX 5060 Ti, PyTorch 2.11.0 with CUDA 12.8, seed 42, AMP and batch size 8. The T4 Colab notebook is provided in the implementation repository, but this checkpoint was trained locally after the live Colab runtime connection stalled.

Preprocessing contract: haar640-dominant-square-rgb224-blur224-36select12-v2. A bounded 10-second window supplies up to 36 candidates; 12 usable face crops are normalized at 224×224. Quality failures issue no score. The API accepts complete 2–10 second clips. Use the exact shared implementation to load these weights.

The model does not establish replay/print/mask detection, resistance to injection attacks, demographic fairness, African-device performance, or banking readiness. Never use it to approve or reject an account. It is intended for reproducible engineering experiments and further research.

Implementation: https://github.com/josephgitau/ekyc-liveness-protection (private source repository). API: https://ekyc-liveness-api.onrender.com/status . Demo: https://ekyc-liveness-protection-web.vercel.app . Deployment readiness is reported by the status endpoint; repository availability alone does not establish a ready model.

Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Dataset used to train josephgitau/ekyc-liveness-rtfs