Ai Model Check

AI stress-testing for a Biometric Liveness Detection Model

Image

How to test a biometric liveness model against real-face variation, attributes, and age groups before deciding what data to buy.

Image

A liveness model can score high on its accuracy test and still get it wrong in production, flagging a real person as an attack because they're wearing glasses, or because the model has never seen a child's face before. Buying more training data before finding out where a model actually fails means paying to fix problems nobody has identified yet. How do you find them first?

The Problem

A Singapore-based identity verification provider already had a working face-biometric model and came to Unidata to source more training data for it. The obvious move is to buy every available dataset and feed it into the next training round. It is also the wasteful one: if the model already handles half of these scenarios well, that part of the spend buys nothing.

So the brief was different. Before any purchase, run an AI stress-testing: test the client's model against a large, structured video set, find out exactly where and why it fails, and let those results decide what data is actually worth buying.

Solution

Test Setup

The check ran the client's model against three datasets, 135,978 videos combined:

  • iBeta 1 and iBeta 2, the client's main liveness test sets, built around adult faces
  • iBeta Kids, a separate set built around children's faces, up to age 17

The model's output was not reduced to a single accuracy score. It was broken down by attack type, face attribute, and age group, so weak spots would show up on their own instead of getting averaged out.

The Attribute Blind Spot

Broken out by category, the error rate was uneven: up to 5% on standard presentation attacks, up to 15% on silicone masks, and up to 25% on real faces from rare or underrepresented ethnicities. One failure mode stood out in particular: a real face wearing an attribute (glasses, jewelry, and similar items) was misclassified as a biometric attack in about 20% of these cases. The check traced this to how the model was trained rather than to a random error:

  • during training, it saw far more attack examples than real faces
  • as a result, it learned to expect a real face to look close to ideal
  • glare, an accessory, or an unusual angle is enough of a deviation to get read as an attack

This is not unique to the client's model. It is a pattern the check turns up on biometric liveness models generally.

Children's Biometrics

The same test was run separately against the iBeta Kids dataset. A model trained mostly on adult faces treats a child's face as an anomaly for the same reason it treats glasses as one: it simply does not match what the model learned a real face looks like.

Unidata includes this age-group test as part of the Model Check whenever a children's dataset is available.

From Findings to Data Purchase

The 20% figure gave the client a specific, named gap instead of a vague sense that the model "could be better." Based on it, the client bought additional data of real faces wearing attributes (glasses, jewelry, and similar items), closing that exact gap rather than repurchasing all three original datasets.

Process

PhaseInputScope of WorkQuality Control
Model & Requirements IntakeClient's liveness model, target attack scenariosAccess setup, defining test scope across face, attribute, and age datasetsTest scope matches client's model and use case
Test Dataset AssemblyiBeta 1, iBeta 2, iBeta Kids (135,978 videos)Running the client's model against all three datasets, structuring output by attack type, attribute, and age groupCoverage confirmed across attack categories and age groups
Error AnalysisModel inference resultsAccuracy breakdown by category; isolating real-face-with-attribute misclassificationsSystematic false-positive patterns identified, not just an aggregate score
Weak Spot ReportValidated error findingsDocumenting strong and weak spots, attack-type distribution, data gapsFindings are specific and reproducible
Targeted Data SourcingWeak spot reportRecommending and preparing datasets that address the identified gapsNew data maps directly to a documented weakness
Delivery & HandoffFinal report, sourced datasetPackaging the report and data with a Docker container for reproducibility, walking the client through the findingsClient sign-off on the findings and the resulting data purchase

Day 1
Model & Dataset Intake
Days 2–5:
Full Test Run Across Datasets
Day 6:
Error Analysis
Day 7:
Report Delivery

The Results

  • An error map by attack type and subject group, not one blended accuracy score
  • A ~20% misread rate isolated to one subgroup: real faces wearing attributes
  • An adult-face bias caught before it reached production, via a dedicated children’s-face test
  • A data purchase aimed at those three gaps, not a repeat buy of everything
We see this blind spot on almost every liveness model we check. It's trained mostly on attacks, so it barely learns what a normal face looks like. Someone puts on glasses, or the room lighting is a little off, and the model calls them fake.
Elizabeth Karnaukhova
Elizabeth Karnaukhova
Datamarket Project Manager

Similar Cases

  • Image
    Geospatial Annotation services

    LiDAR Annotation for Robotics

    City streets in 3D: thousands of objects, overlapping geometries, no margin for misclassification. 3,000 point clouds processed in 19 days at 99% accuracy. What does it take to make raw spatial data reliable enough for robotics?

    Lean more
  • Image
    Geospatial Annotation services

    Aerial Image Annotation for Urban Planning

    We annotated 132,000+ objects in 11,000 aerial images—streamlining urban planning data with scalable workflows and tailored class logic.

    Lean more
  • Image
    Data Collection

    Image Data Collection for Hair Loss Classification Task

    With clear guidelines and a sharp execution strategy, we delivered a high-quality dataset tailored for hair loss classification tasks.

    Lean more
  • Image
    Data Collection

    Image Data Collection for a Palm Recognition Task

    Collecting 20,000 palm photos sounds easy until you try it. We managed scale, verification, and logistics to deliver a clean dataset.

    Lean more
  • Image
    NLP Annotation services

    Product Grouping for E-commerce

    We helped structure the chaos of online listings — enabling cleaner product cards through expert annotation and smart grouping.

    Lean more

Ready to get started?

Tell us what you need — we’ll reply within 24h with a free estimate

    What service are you looking for? *
    What service are you looking for?
    Data Labeling
    AI Model Testing
    Data Collection
    Ready-made Datasets
    Human Moderation
    Medicine
    Other
    What's your budget range? *
    What's your budget range?
    < $5,000
    $5,000 – $25,000
    $25,000 – $50,000
    $50,000 – $100,000
    $100,000+
    Not sure yet
    • United States+1
    • United Kingdom+44
    • Afghanistan (‫افغانستان‬‎)+93
    • Albania (Shqipëri)+355
    • Algeria (‫الجزائر‬‎)+213
    • American Samoa+1684
    • Andorra+376
    • Angola+244
    • Anguilla+1264
    • Antigua and Barbuda+1268
    • Argentina+54
    • Armenia (Հայաստան)+374
    • Aruba+297
    • Australia+61
    • Austria (Österreich)+43
    • Azerbaijan (Azərbaycan)+994
    • Bahamas+1242
    • Bahrain (‫البحرين‬‎)+973
    • Bangladesh (বাংলাদেশ)+880
    • Barbados+1246
    • Belarus (Беларусь)+375
    • Belgium (België)+32
    • Belize+501
    • Benin (Bénin)+229
    • Bermuda+1441
    • Bhutan (འབྲུག)+975
    • Bolivia+591
    • Bosnia and Herzegovina (Босна и Херцеговина)+387
    • Botswana+267
    • Brazil (Brasil)+55
    • British Indian Ocean Territory+246
    • British Virgin Islands+1284
    • Brunei+673
    • Bulgaria (България)+359
    • Burkina Faso+226
    • Burundi (Uburundi)+257
    • Cambodia (កម្ពុជា)+855
    • Cameroon (Cameroun)+237
    • Canada+1
    • Cape Verde (Kabu Verdi)+238
    • Caribbean Netherlands+599
    • Cayman Islands+1345
    • Central African Republic (République centrafricaine)+236
    • Chad (Tchad)+235
    • Chile+56
    • China (中国)+86
    • Christmas Island+61
    • Cocos (Keeling) Islands+61
    • Colombia+57
    • Comoros (‫جزر القمر‬‎)+269
    • Congo (DRC) (Jamhuri ya Kidemokrasia ya Kongo)+243
    • Congo (Republic) (Congo-Brazzaville)+242
    • Cook Islands+682
    • Costa Rica+506
    • Côte d’Ivoire+225
    • Croatia (Hrvatska)+385
    • Cuba+53
    • Curaçao+599
    • Cyprus (Κύπρος)+357
    • Czech Republic (Česká republika)+420
    • Denmark (Danmark)+45
    • Djibouti+253
    • Dominica+1767
    • Dominican Republic (República Dominicana)+1
    • Ecuador+593
    • Egypt (‫مصر‬‎)+20
    • El Salvador+503
    • Equatorial Guinea (Guinea Ecuatorial)+240
    • Eritrea+291
    • Estonia (Eesti)+372
    • Ethiopia+251
    • Falkland Islands (Islas Malvinas)+500
    • Faroe Islands (Føroyar)+298
    • Fiji+679
    • Finland (Suomi)+358
    • France+33
    • French Guiana (Guyane française)+594
    • French Polynesia (Polynésie française)+689
    • Gabon+241
    • Gambia+220
    • Georgia (საქართველო)+995
    • Germany (Deutschland)+49
    • Ghana (Gaana)+233
    • Gibraltar+350
    • Greece (Ελλάδα)+30
    • Greenland (Kalaallit Nunaat)+299
    • Grenada+1473
    • Guadeloupe+590
    • Guam+1671
    • Guatemala+502
    • Guernsey+44
    • Guinea (Guinée)+224
    • Guinea-Bissau (Guiné Bissau)+245
    • Guyana+592
    • Haiti+509
    • Honduras+504
    • Hong Kong (香港)+852
    • Hungary (Magyarország)+36
    • Iceland (Ísland)+354
    • India (भारत)+91
    • Indonesia+62
    • Iran (‫ایران‬‎)+98
    • Iraq (‫العراق‬‎)+964
    • Ireland+353
    • Isle of Man+44
    • Israel (‫ישראל‬‎)+972
    • Italy (Italia)+39
    • Jamaica+1876
    • Japan (日本)+81
    • Jersey+44
    • Jordan (‫الأردن‬‎)+962
    • Kazakhstan (Казахстан)+7
    • Kenya+254
    • Kiribati+686
    • Kosovo+383
    • Kuwait (‫الكويت‬‎)+965
    • Kyrgyzstan (Кыргызстан)+996
    • Laos (ລາວ)+856
    • Latvia (Latvija)+371
    • Lebanon (‫لبنان‬‎)+961
    • Lesotho+266
    • Liberia+231
    • Libya (‫ليبيا‬‎)+218
    • Liechtenstein+423
    • Lithuania (Lietuva)+370
    • Luxembourg+352
    • Macau (澳門)+853
    • Macedonia (FYROM) (Македонија)+389
    • Madagascar (Madagasikara)+261
    • Malawi+265
    • Malaysia+60
    • Maldives+960
    • Mali+223
    • Malta+356
    • Marshall Islands+692
    • Martinique+596
    • Mauritania (‫موريتانيا‬‎)+222
    • Mauritius (Moris)+230
    • Mayotte+262
    • Mexico (México)+52
    • Micronesia+691
    • Moldova (Republica Moldova)+373
    • Monaco+377
    • Mongolia (Монгол)+976
    • Montenegro (Crna Gora)+382
    • Montserrat+1664
    • Morocco (‫المغرب‬‎)+212
    • Mozambique (Moçambique)+258
    • Myanmar (Burma) (မြန်မာ)+95
    • Namibia (Namibië)+264
    • Nauru+674
    • Nepal (नेपाल)+977
    • Netherlands (Nederland)+31
    • New Caledonia (Nouvelle-Calédonie)+687
    • New Zealand+64
    • Nicaragua+505
    • Niger (Nijar)+227
    • Nigeria+234
    • Niue+683
    • Norfolk Island+672
    • North Korea (조선 민주주의 인민 공화국)+850
    • Northern Mariana Islands+1670
    • Norway (Norge)+47
    • Oman (‫عُمان‬‎)+968
    • Pakistan (‫پاکستان‬‎)+92
    • Palau+680
    • Palestine (‫فلسطين‬‎)+970
    • Panama (Panamá)+507
    • Papua New Guinea+675
    • Paraguay+595
    • Peru (Perú)+51
    • Philippines+63
    • Poland (Polska)+48
    • Portugal+351
    • Puerto Rico+1
    • Qatar (‫قطر‬‎)+974
    • Réunion (La Réunion)+262
    • Romania (România)+40
    • Russia (Россия)+7
    • Rwanda+250
    • Saint Barthélemy+590
    • Saint Helena+290
    • Saint Kitts and Nevis+1869
    • Saint Lucia+1758
    • Saint Martin (Saint-Martin (partie française))+590
    • Saint Pierre and Miquelon (Saint-Pierre-et-Miquelon)+508
    • Saint Vincent and the Grenadines+1784
    • Samoa+685
    • San Marino+378
    • São Tomé and Príncipe (São Tomé e Príncipe)+239
    • Saudi Arabia (‫المملكة العربية السعودية‬‎)+966
    • Senegal (Sénégal)+221
    • Serbia (Србија)+381
    • Seychelles+248
    • Sierra Leone+232
    • Singapore+65
    • Sint Maarten+1721
    • Slovakia (Slovensko)+421
    • Slovenia (Slovenija)+386
    • Solomon Islands+677
    • Somalia (Soomaaliya)+252
    • South Africa+27
    • South Korea (대한민국)+82
    • South Sudan (‫جنوب السودان‬‎)+211
    • Spain (España)+34
    • Sri Lanka (ශ්‍රී ලංකාව)+94
    • Sudan (‫السودان‬‎)+249
    • Suriname+597
    • Svalbard and Jan Mayen+47
    • Swaziland+268
    • Sweden (Sverige)+46
    • Switzerland (Schweiz)+41
    • Syria (‫سوريا‬‎)+963
    • Taiwan (台灣)+886
    • Tajikistan+992
    • Tanzania+255
    • Thailand (ไทย)+66
    • Timor-Leste+670
    • Togo+228
    • Tokelau+690
    • Tonga+676
    • Trinidad and Tobago+1868
    • Tunisia (‫تونس‬‎)+216
    • Turkey (Türkiye)+90
    • Turkmenistan+993
    • Turks and Caicos Islands+1649
    • Tuvalu+688
    • U.S. Virgin Islands+1340
    • Uganda+256
    • Ukraine (Україна)+380
    • United Arab Emirates (‫الإمارات العربية المتحدة‬‎)+971
    • United Kingdom+44
    • United States+1
    • Uruguay+598
    • Uzbekistan (Oʻzbekiston)+998
    • Vanuatu+678
    • Vatican City (Città del Vaticano)+39
    • Venezuela+58
    • Vietnam (Việt Nam)+84
    • Wallis and Futuna (Wallis-et-Futuna)+681
    • Western Sahara (‫الصحراء الغربية‬‎)+212
    • Yemen (‫اليمن‬‎)+967
    • Zambia+260
    • Zimbabwe+263
    • Åland Islands+358
    Where did you hear about Unidata? *
    Where did you hear about Unidata?
    Andrew
    Head of Client Success

    — I'll guide you through every step, from your first
    message to full project delivery

    Thank you for your
    message

    It has been successfully sent!

    We use cookies to enhance your experience, personalize content, ads, and analyze traffic. By clicking 'Accept All', you agree to our Cookie Policy.