FRVT_ongoing_11_api
FRVT_ongoing_11_api
Ongoing
Patrick Grother
Mei Ngan
Kayee Hanaoka
Information Access Division
Information Technology Laboratory
April 6, 2023
FRVT Ongoing 1:1
1 Revision History
2
3
Date Version Description
April 1, 2019 4.0 Initial document
June 24, 2020 4.0.1 Update feature extraction times in Table 1.3 from 1000ms to 1500ms
September 9, 2020 4.0.2 Update link to General Evaluation Specifications document
Adjust the legal similarity score range
March 22, 2021 4.0.3 Update 1:1 matching time limit in Table 1.3 from 5 milliseconds to 0.1
milliseconds (or 100 microseconds)
January 7, 2022 5.0 Add second version of createTemplate() function in Section 4.4.4 that
supports the existence of multiple people in an image
February 2, 2022 5.0.1 Add Figure 2 and Table 3 to illustrate the second version of
createTemplate() function from Section 4.4.4
March 24, 2022 5.0.2 Add verbiage to be more explicit about algorithmic behavior when the
software fails to find a face in an image in Sections 4.4.3 and 4.4.4
April 6, 2023 6.0 Add support for iris recognition
Remove references to deprecated Multiface data structure
4
5 Table of Contents
6 1. FRVT 1:1 ............................................................................................................................................................................. 3
7 1.1. Scope ........................................................................................................................................................................ 3
8 1.2. General FRVT Evaluation Specifications ................................................................................................................... 3
9 1.3. Time limits ................................................................................................................................................................ 3
10 2. Data structures supporting the API ................................................................................................................................... 3
11 3. Implementation Library Filename ..................................................................................................................................... 3
12 4. API Specification................................................................................................................................................................. 3
13 4.1. Header File ............................................................................................................................................................... 4
14 4.2. Namespace ............................................................................................................................................................... 4
15 4.3. Overview................................................................................................................................................................... 4
16 4.4. API............................................................................................................................................................................. 5
17
18 List of Tables
19 Table 1 – Processing time limits in milliseconds, per 640 x 480 image ..................................................................................... 3
20 Table 2 – Functional summary of the 1:1 application of Figure 1 ............................................................................................. 4
21 Table 3 – Functional summary of the 1:1 application of Figure 2 ............................................................................................. 5
22 Table 4 – Initialization ................................................................................................................................................................ 6
23 Table 5 – Template generation from one or more images of exactly one person .................................................................... 7
24 Table 6 – Template generation of one more people detected from a single image ................................................................. 8
25 Table 7 – Template matching .................................................................................................................................................... 9
26
27 List of Figures
28 Figure 1 – Schematic of 1:1 verification (template generation of one or more images of exactly one person) ...................... 4
29 Figure 2 – Schematic of 1:1 verification (template generation of one or more people detected in an image) ....................... 5
30
31
32 1. FRVT 1:1
33 1.1. Scope
34 This document establishes a concept of operations and an application programming interface (API) for evaluation of face
35 recognition (FR) or iris recognition implementations submitted to NIST's ongoing Face Recognition Vendor Test. This API
36 is for the 1:1 identity verification track. Separate API documents will be published for future additional tracks to FRVT.
37
64 4. API Specification
65 FRVT 1:1 participants shall implement the relevant C++ prototyped interfaces in Section 4.4. C++ was chosen in order to
66 make use of some object-oriented features.
70 4.2. Namespace
71 All supporting data structures will be declared in the FRVT namespace. All API interfaces/function calls for this track will
72 be declared in the FRVT_11 namespace.
73 4.3. Overview
74 The 1:1 testing will proceed in the following phases: optional offline training; preparation of enrollment templates;
75 preparation of verification templates; and matching. NIST requires that these operations may be executed in a loop in a
76 single process invocation, or as a sequence of independent process invocations, or a mixture of both.
77
78
1:1 VERIFICATION Native or
updated
configuration
data
Enrollment initialization Verification initialization
Match initialization
Key
SDK SDK
Image(s) Comparison Image(s)
Enrollment Verification Algorithm
template engine template component
SDK behind FRVT API
Data passed by
NIST to
Score algorithm
79
80 Figure 1 – Schematic of 1:1 verification (template generation of one or more images of exactly one person)
81
82 Table 2 – Functional summary of the 1:1 application of Figure 1
Phase Description Performance Metrics to be reported by NIST
Initialization Function to read configuration data, if any. None
Enrollment Given K 1 input images of an individual, the implementation Statistics of the time needed to produce a template.
will create a proprietary enrollment template. That is, Statistics of template size. Rate of failure to produce a
createTemplate(role=FRVT::TemplateRole::Enrollment_11) template.
will be called. NIST will manage storage of these templates.
Verification Given K 1 input images of an individual, the implementation Statistics of the time needed to produce a template.
will create a proprietary verification template. That is, Statistics of template size. Rate of failure to produce a
createTemplate(role=FRVT::TemplateRole::Verification_11) template.
will be called. NIST will manage storage of these templates.
Matching (i.e. Given a proprietary enrollment and a proprietary verification Statistics of the time taken to compare two templates.
comparison) template, compare them to produce a similarity score. Accuracy measures, primarily reported as DETs,
including for partitions of the input datasets.
83
84 Figure 2 – Schematic of 1:1 verification (template generation of one or more people detected in an image)
85
86 Table 3 – Functional summary of the 1:1 application of Figure 2
Phase Description Performance Metrics to be reported by NIST
Initialization Function to read configuration data, if any. None
Enrollment Given K = 1 input image, the implementation will create M Statistics of the time needed to produce M templates.
proprietary enrollment templates based on the number of Statistics of template size. Rate of failure to produce a
people detected in the image. That is, template.
createTemplate(role=FRVT::TemplateRole::Enrollment_11)
will be called. NIST will manage storage of these templates.
Verification Given K = 1 input image, the implementation will create N Statistics of the time needed to produce N templates.
proprietary verification templates based on the number of Statistics of template size. Rate of failure to produce a
people detected in the image. That is, template.
createTemplate(role=FRVT::TemplateRole::Verification_11)
will be called. NIST will manage storage of these templates.
Matching (i.e. Given a M proprietary enrollment templates and N Statistics of the time taken to compare two templates.
comparison) proprietary verification templates, cross compare them to Accuracy measures, primarily reported as DETs,
produce MxN similarity scores. including for partitions of the input datasets.
87
88 4.4. API
89 4.4.1. Interface
90 The software under test must implement the interface Interface by subclassing this class and implementing each
91 method specified therein.
C++ code fragment Remarks
1. class Interface
2. {
public:
3. virtual ReturnStatus initialize( Supports algorithm initialization
const std::string &configDir ) = 0;
4. virtual ReturnStatus createFaceTemplate( Supports template generation from one or more
const std::vector<Image> &faces, face images of exactly one person
TemplateRole role,
std::vector<uint8_t> &templ,
std::vector<EyePair> &eyeCoordinates) = 0;
5. virtual ReturnStatus createIrisTemplate( Supports template generation from one or more iris
const std::vector<Image> &irises, images of exactly one person
TemplateRole role,
std::vector<uint8_t> &templ,
std::vector<IrisAnnulus> &irisLocations) = 0;
6. virtual ReturnStatus createFaceTemplate( Supports template generation of one or more
const Image &image, people detected from a single image
TemplateRole role,
std::vector<std::vector<uint8_t>> &templs,
std::vector<EyePair> &eyeCoordinates) = 0;
7. virtual ReturnStatus matchTemplates( Supports comparison between two templates
const std::vector<uint8_t> &verifTemplate,
const std::vector<uint8_t> &enrollTemplate,
double &similarity) = 0;
8. static std::shared_ptr<Interface> getImplementation(); Factory method to return a managed pointer to the
Interface object. This function is implemented by
the submitted library and must return a managed
pointer to the Interface object.
9. };
92
93 There is one class (static) method declared in Interface. getImplementation() which must also be implemented
94 by the implementation. This method returns a shared pointer to the object of the interface type, an instantiation of the
95 implementation class. A typical implementation of this method is also shown below as an example.
96
C++ code fragment Remarks
#include "frvt11.h"
NullImpl:: NullImpl () { }
NullImpl::~ NullImpl () { }
std::shared_ptr<Interface>
Interface::getImplementation()
{
return std::make_shared<NullImpl>();
}
97 4.4.2. Initialization
98 The NIST test harness will call the initialization function in Table 4 before calling template generation or matching. This
99 function will be called BEFORE any calls to fork()1 are made.
100 Table 4 – Initialization
Prototype ReturnStatus initialize(
const string &configDir); Input
Description This function initializes the implementation under test. It will be called by the NIST application before any call to
createTemplate() or matchTemplates(). The implementation under test should set all parameters.
This function will be called N=1 times by the NIST application, prior to parallelizing M >= 1 calls to
createTemplate() via fork().
Input Parameters configDir A read-only directory containing any developer-supplied configuration parameters or run-
time data files. The name of this directory is assigned by NIST, not hardwired by the
provider. The names of the files in this directory are hardwired in the implementation and
are unrestricted.
Output none
Parameters
Return Value See General Evaluation Specifications document for all valid return code values.
1 http://man7.org/linux/man-pages/man2/fork.2.html
101 4.4.3. Template generation from one or more images of exactly one person
102 The functions of Table 5 supports role-specific generation of template data from one or more images of exactly one
103 person. Template format is entirely proprietary. Some of the proposed datasets include K > 2 image per person for some
104 persons. This affords the possibility to model a recognition scenario in which a new image of a person is compared
105 against all prior images. Use of multiple images per person has been shown to elevate accuracy over a single image.
106 NOTE: For any given submission, developers may only implement ONE of the functions in Table 5. That is, a single
107 submission may only support face recognition or iris recognition. For the functions that are not implemented, the
108 function shall return ReturnCode::NotImplemented.
109 Using this function, NIST will enroll K >= 1 images under each identity. The method by which the face or iris recognition
110 implementation exploits multiple images is not regulated. The test seeks to evaluate developer provided technology for
111 multi-presentation fusion.
112 This document defines a template to be a developer defined data-structure, capable of holding zero or one embeddings.
113 A developer may include embeddings, other information derived from the image, a header; the contents is developer
114 defined. An algorithm might internally fuse K feature sets into a single model or maintain them separately. In any case,
115 the resulting proprietary template is contained in a contiguous block of data. A template may have length zero bytes. In
116 all cases, the matchTemplates() function must accept two templates. The matchTemplates() function will be called
117 even if the developer’s implementation of a template is of zero bytes.
118
119 Table 5 – Template generation from one or more images of exactly one person
Prototype for ReturnStatus createFaceTemplate(
face const std::vector<Image> &faces, Input
recognition TemplateRole role, Input
std::vector<uint8_t> &templ, Output
std::vector<EyePair> &eyeCoordinates); Output
Prototype for ReturnStatus createIrisTemplate(
iris const std::vector<Image> &irises, Input
recognition TemplateRole role, Input
std::vector<uint8_t> &templ, Output
std::vector<IrisAnnulus> &irisLocations); Output
Description Takes a vector of image(s) and outputs a proprietary template and associated eye coordinates or irisLocations. The
vectors to store the template and eye coordinates/iris locations will be initially empty, and it is up to the
implementation to populate them with the appropriate data. In all cases, even when unable to extract features, the
output shall be a template that may be passed to the matchTemplates() function without error. That is, this routine
must internally encode "template creation failed", and the matcher must transparently handle this. The table below
specifies algorithmic behavior based on whether a face or iris was detected/features were extracted from the input
image(s).
Return Value See General Evaluation Specifications document for all valid return code values.
120 4.4.4. Template generation of one or more people detected from an image
121 This function supports role-specific generation of one or more templates that correspond to one or more people detected
122 in an image. Some of the proposed test images include K > 1 persons for some images and situations where the subject of
123 interest may or may not be the foreground face (largest face in the image). This function allows the implementation to
124 return a template for each person detected in the image. For testing, NIST will
125 1. Generate one or more enrollment templates from a single call to this function or the function of Table 5
126 2. Generate one or more verification templates from a single call to this function or the function of Table 5
127 3. Match all enrollment templates from 1) with all verification templates from 2)
128 4. Use the maximum similarity score across all template comparisons from 3) in our calculation of FMR and FNMR
129 (this applies to both genuine and imposter comparisons)
130 NOTE: The implementation must be able to match any combination of enrollment and verification templates generated
131 from this function and the function of Table 5. In other words, the output template format should be consistent between
132 this function and the function of Table 5. A template may have length zero bytes. In all cases, the matchTemplates()
133 function must accept two templates. The matchTemplates() function will be called even if the developer’s
134 implementation of a template is of zero bytes.
135
136 Table 6 – Template generation of one more people detected from a single image
Prototypes ReturnStatus createFaceTemplate(
const Image &image, Input
TemplateRole role, Input
std::vector<<std::vector<uint8_t>> &templs, Output
std::vector<EyePair> &eyeCoordinates); Output
Description This function supports template generation of one or more people detected from a single image. It takes a single
input image and outputs one or more proprietary templates and associated eye coordinates based on the number of
people detected. The vectors to store the template(s) and eye coordinates will be initially empty, and it is up to the
implementation to populate them with the appropriate data. If the implementation is unable to extract features, the
output shall still contain a single template that may be passed to the matchTemplates() function without error. That
is, this routine must internally encode "template creation failed", and the matcher must transparently handle this.
The table below specifies algorithmic behavior based on the number of faces detected from the input image.
137
The score values should be reported on the range that is used in the developer’s
software products. We require scores to be non-negative. Developers often use
[0,1], for example. Our test reports include various plots with threshold values
e.g. FMR(T), to allow end-users to set thresholds in operations. These plots may
become difficult to interpret if scores span many orders of magnitude.
Return Value See General Evaluation Specifications document for all valid return code values.
141