Handle enrollment of multiple independent templates by creating a single
element template list from each input template, then processing these
TemplateLists in parallel. This changes the basic operation for processing
templates derived from a sinlge image from project(template, template) (a
single input/single output function) to project(templateList, templateList),
which allows for a transform to output a variable number of templates from a
given input (e.g. a detector can output multiple templates, or a filter can
remove templates that don't meet some criterion).
The basic parallel execution code loop is implemented using
DistributeTemplateTransform, instead of through Template::Project(list), and a DistributeTemplateTransform is automatically prepended to input enrollment
algorithms. This avoids the problem of having to decide whether or not a split
should take place on every call to project(templatelist), and since the
distribute transform is just a normal transform, it can be applied more than
once in a given algorithm (when this is desirable).
Implement ExpandTransform as a basic Transform that take a template list as
input, and expands it for its output (in project(templatelist)), due to the
restructuring ExpandTransform no longer has to essentially mimic the
functionality of PipeTransform to function correctly.
This commit breaks binary compatibility (of saved models), so updates to the
pre-trained face recognition and gender classification models are included.