In [1]:
%matplotlib inline
%pylab inline


Populating the interactive namespace from numpy and matplotlib

Load training data


In [2]:
import menpo.io as mio
from menpo.landmark import labeller, ibug_face_66
from menpofast.utils import convert_from_menpo

path = '/data/'
group = 'ibug_face_66'

training_images = []
for i in mio.import_images(path + 'PhD/DataBases/faces/lfpw/trainset/',
                           verbose=True, max_images=None):
    
    labeller(i, 'PTS', eval(group))
    i.crop_to_landmarks_proportion_inplace(0.5, group='PTS')
    i = i.rescale_landmarks_to_diagonal_range(150, group=group)
    
    if i.n_channels == 3:
        i = i.as_greyscale(mode='average')
    training_images.append(i)


- Loading 811 assets: [====================] 100%

In [ ]:
for i in mio.import_images(path + 'PhD/DataBases/faces/helen/trainset/',
                           verbose=True, max_images=None):
    
    # convert the image from menpo Image to menpofast Image (channels at front)
    i = convert_from_menpo(i)
    
    labeller(i, 'PTS', eval(group))
    i.crop_to_landmarks_proportion_inplace(0.5, group='PTS')
    i = i.rescale_landmarks_to_diagonal_range(150, group=group)
    
    if i.n_channels == 3:
        i = i.as_greyscale(mode='average')
    training_images.append(i)

In [ ]:
for i in mio.import_images(path + 'PhD/DataBases/faces/ibug/',
                           verbose=True, max_images=None):
    
    # convert the image from menpo Image to menpofast Image (channels at front)
    i = convert_from_menpo(i)
    
    labeller(i, 'PTS', eval(group))
    i.crop_to_landmarks_proportion_inplace(0.5, group='PTS')
    i = i.rescale_landmarks_to_diagonal_range(150, group=group)
    
    if i.n_channels == 3:
        i = i.as_greyscale(mode='average')
    training_images.append(i)

In [3]:
from menpo.visualize import visualize_images

visualize_images(training_images)


Active Appearance Models

Training Parameters


In [9]:
from menpofast.feature import no_op, fast_dsift

features = fast_dsift
patch_shape = (17, 17)
diagonal = 100
scales = (1, .5)
max_shape_components = 25
max_appearance_components = 250
normalize_parts = False

Global PWA


In [10]:
from menpofit.transform import DifferentiablePiecewiseAffine
from alabortijcv2015.aam import GlobalAAMBuilder
from alabortijcv2015.utils import pickle_dump
    
aam = GlobalAAMBuilder(transform=DifferentiablePiecewiseAffine,
                       features=features,
                       diagonal=diagonal,
                       scales=scales,
                       max_shape_components=max_shape_components,
                       max_appearance_components=max_appearance_components).build(training_images,
                                                                                  group=group,
                                                                                  verbose=True)
    
pickle_dump(aam, path + 'PhD/Models/ijcv2015/exp1_' + aam.__class__.__name__ + '_' + 'PWA' + '_' + features.__name__)


- Building models
  - Level 0: Done
  - Level 1: Done

Global TPS


In [ ]:
from menpofit.transform import DifferentiableThinPlateSplines
from alabortijcv2015.aam import GlobalAAMBuilder
from alabortijcv2015.utils import pickle_dump
    
aam = GlobalAAMBuilder(transform=DifferentiableThinPlateSplines,
                       features=features,
                       diagonal=diagonal,
                       scales=scales,
                       max_shape_components=max_shape_components,
                       max_appearance_components=max_appearance_components).build(training_images,
                                                                                  group=group,
                                                                                  verbose=True)
    
pickle_dump(aam, path + 'PhD/Models/ijcv2015/exp1_' + aam.__class__.__name__ + '_' + 'TPS' + '_' + features.__name__)

Patch


In [ ]:
from alabortijcv2015.aam import PatchAAMBuilder
from alabortijcv2015.utils import pickle_dump
    
aam = PatchAAMBuilder(patch_shape=patch_shape,
                      features=features,
                      diagonal=diagonal,
                      scales=scales,
                      max_shape_components=max_shape_components,
                      max_appearance_components=max_appearance_components).build(training_images,
                                                                                 group=group,
                                                                                 verbose=True)
    
pickle_dump(aam, path + 'PhD/Models/ijcv2015/exp1_' + aam.__class__.__name__ + '_' + features.__name__)

Linear Global PWA


In [ ]:
from menpofit.transform import DifferentiablePiecewiseAffine
from alabortijcv2015.aam import LinearGlobalAAMBuilder
from alabortijcv2015.utils import pickle_dump
    
aam = LinearGlobalAAMBuilder(transform=DifferentiablePiecewiseAffine,
                             features=features,
                             diagonal=diagonal,
                             scales=scales,
                             max_shape_components=max_shape_components,
                             max_appearance_components=max_appearance_components).build(training_images,
                                                                                        group=group,
                                                                                        verbose=True)
    
pickle_dump(aam, path + 'PhD/Models/ijcv2015/exp1_' + aam.__class__.__name__ + '_' + 'PWA' + '_' + features.__name__)

Linear Global TPS


In [ ]:
from menpofit.transform import DifferentiableThinPlateSplines
from alabortijcv2015.aam import LinearGlobalAAMBuilder
from alabortijcv2015.utils import pickle_dump
    
aam = LinearGlobalAAMBuilder(transform=DifferentiableThinPlateSplines,
                             features=features,
                             diagonal=diagonal,
                             scales=scales,
                             max_shape_components=max_shape_components,
                             max_appearance_components=max_appearance_components).build(training_images,
                                                                                        group=group,
                                                                                        verbose=True)

pickle_dump(aam, path + 'PhD/Models/ijcv2015/exp1_' + aam.__class__.__name__ + '_' + 'TPS' + '_' + features.__name__)

Linear Patch


In [ ]:
from alabortijcv2015.aam import LinearPatchAAMBuilder
from alabortijcv2015.utils import pickle_dump
    
aam = LinearPatchAAMBuilder(patch_shape=patch_shape,
                            features=features,
                            diagonal=diagonal,
                            scales=scales,
                            max_shape_components=max_shape_components,
                            max_appearance_components=max_appearance_components).build(training_images,
                                                                                       group=group,
                                                                                       verbose=True)
    
pickle_dump(aam, path + 'PhD/Models/ijcv2015/exp1_' + aam.__class__.__name__ + '_' + features.__name__)

Parts


In [8]:
from alabortijcv2015.aam import PartsAAMBuilder
from alabortijcv2015.utils import pickle_dump
    
aam = PartsAAMBuilder(parts_shape=patch_shape,
                     features=features,
                     diagonal=diagonal,
                     normalize_parts=normalize_parts,
                     scales=scales,
                     max_shape_components=max_shape_components,
                     max_appearance_components=max_appearance_components).build(training_images,
                                                                                group=group,
                                                                                verbose=True)

aam_type = aam.__class__.__name__
pickle_dump(aam, path + 'PhD/Models/ijcv2015/exp1_' + aam_type + '_' + features.__name__)


- Building models
  - Level 0: Done
  - Level 1: Done