Although the training process is quite simple, it can still take some time to complete.
Depending on the number of facial features, the size of the patches, and the number
of stochastic samples in the optimization algorithm, the training process can take
anywhere between a few minutes to over an hour. However, since the training of
each patch can be performed independently of all others, this process can be sped
up substantially by parallelizing the training process across multiple processor-cores
or machines.
Once training has been completed, the program in visualize_patch_model.cpp
can be used to visualize the resulting patch models. As with the visualize_shape_
model.cpp program, the aim here is to visually inspect the results to verify if anything
went wrong during the training process. The program generates a composite image
of all the patch models, patch_model::P, each centered at their respective feature
location in the reference shape, patch_models::reference, and displays a bounding
rectangle around the patch whose index is currently active. The cv::waitKey
function is used to get user input for selecting the active patch index and terminating
the program. The following image shows three examples of composite patch images
learned for patch model with varying spatial support. Despite using the same
training data, modifying the spatial support of the patch model appears to change the
structure of the patch models substantially. Visually inspecting the results in this way
can lend intuition into how to modify the parameters of the training process, or even
the training process itself, in order to optimize results for a particular application.