In [1]:
%matplotlib inline
%pylab inline


Populating the interactive namespace from numpy and matplotlib

In [2]:
repeat = 1

Load test data


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

path = '/data/'
group = 'streetscene_car_view_1'

test_images = []
for i in mio.import_images(path + 'PhD/DataBases/cars/cmu_car_data1/view1',
                           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=group)
    i = i.rescale_landmarks_to_diagonal_range(200, group=group)
    
    if i.n_channels == 3:
        i = i.as_greyscale(mode='average')
    test_images.append(i)


- Loading 843 assets: [==                  ] 13%
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-3-35c71fedad18> in <module>()
      8 test_images = []
      9 for i in mio.import_images(path + 'PhD/DataBases/cars/cmu_car_data1/view1',
---> 10                            verbose=True, max_images=None):
     11 
     12     # convert the image from menpo Image to menpofast Image (channels at front)

/data/pythondev/src/menpo/menpo/io/input/base.pyc in import_images(pattern, max_images, landmark_resolver, normalise, verbose)
    170                                         landmark_ext_map=image_landmark_types,
    171                                         verbose=verbose,
--> 172                                         importer_kwargs=kwargs):
    173         yield asset
    174 

/data/pythondev/src/menpo/menpo/io/input/base.pyc in _import_glob_generator(pattern, extension_map, max_assets, landmark_resolver, landmark_ext_map, importer_kwargs, verbose)
    290                                          landmark_resolver=landmark_resolver,
    291                                          landmark_ext_map=landmark_ext_map,
--> 292                                          importer_kwargs=importer_kwargs)):
    293         if verbose:
    294             print_dynamic('- Loading {} assets: {}'.format(

/data/pythondev/src/menpo/menpo/io/input/base.pyc in _multi_import_generator(filepaths, extensions_map, keep_importers, landmark_resolver, landmark_ext_map, importer_kwargs)
    427                            landmark_resolver=landmark_resolver,
    428                            landmark_ext_map=landmark_ext_map,
--> 429                            importer_kwargs=importer_kwargs)
    430         if keep_importers:
    431             assets, importer = imported

/data/pythondev/src/menpo/menpo/io/input/base.pyc in _import(filepath, extensions_map, keep_importer, landmark_resolver, landmark_ext_map, asset, importer_kwargs)
    350         built_objects = importer.build(asset=asset)
    351     else:
--> 352         built_objects = importer.build()
    353     # landmarks are iterable so check for list precisely
    354     # enforce a list to make processing consistent

/data/pythondev/src/menpo/menpo/io/input/image.pyc in build(self)
     54         elif mode in ['L', 'I', 'RGB']:
     55             # Greyscale, Integer and RGB images
---> 56             image = Image(self._pil_to_numpy(self.normalise))
     57         elif mode == '1':
     58             # Can't normalise a binary image

/data/pythondev/src/menpo/menpo/io/input/image.pyc in _pil_to_numpy(self, normalise, convert)
     68         dtype = np.float if normalise else None
     69         p = self._pil_image.convert(convert) if convert else self._pil_image
---> 70         np_pixels = np.array(p, dtype=dtype, copy=True)
     71         return np_pixels / 255.0 if normalise else np_pixels
     72 

/data/installed/anaconda/envs/menpo/lib/python2.7/site-packages/PIL/Image.pyc in __getattr__(self, name)
    603             new['data'] = self.tobytes()
    604             return new
--> 605         raise AttributeError(name)
    606 
    607     def __getstate__(self):

AttributeError: __float__

In [4]:
test_images = test_images[1::2]

In [5]:
from menpo.visualize import visualize_images

visualize_images(test_images)


Unified HDMs and HPDMs

Load Model


In [6]:
from alabortcvpr2015.utils import pickle_load

unified = pickle_load(path + 'PhD/Models/unified_view1_fast_dsift')

AIC + RLMS


In [43]:
sampling_mask = np.require(np.zeros(unified.parts_shape), dtype=np.bool)
sampling_mask[2::5, 2::5] = True

imshow(sampling_mask)


Out[43]:
<matplotlib.image.AxesImage at 0x7fe87275ab10>

In [45]:
sampling_mask[7, 7]


Out[45]:
True

In [51]:
from alabortcvpr2015.unified import PartsUnifiedFitter, AICRLMS
from alabortcvpr2015.utils import pickle_dump
from alabortcvpr2015.result import SerializableResult

fitter = PartsUnifiedFitter(unified, algorithm_cls=AICRLMS, n_shape=[3, 12],
                            n_appearance=[50, 200], sampling_mask=sampling_mask)

fitter_results = []

for seed in xrange(repeat):

    np.random.seed(seed=seed)

    for j, i in enumerate(test_images):

        gt_s = i.landmarks[group].lms
        s = fitter.perturb_shape(gt_s, noise_std=0.05)

        fr = fitter.fit(i, s, gt_shape=gt_s, max_iters=30, prior=False)

        fitter_results.append(fr)
        fr.downscale = 0.5

        print 'Image: ', j
        print fr

results = [SerializableResult('none', fr.shapes(), fr.n_iters, 'AICRLMS', fr.gt_shape) 
           for fr in fitter_results]

pickle_dump(results, path + 'PhD/Results/unified_aicrlms_view1_fast_dsift')


Image:  0
Initial error: 0.2234
Final error: 0.0617
Image:  1
Initial error: 0.1108
Final error: 0.0986
Image:  2
Initial error: 0.0873
Final error: 0.0436
Image:  3
Initial error: 0.0718
Final error: 0.0268
Image:  4
Initial error: 0.0506
Final error: 0.0371
Image:  5
Initial error: 0.1783
Final error: 0.0748
Image:  6
Initial error: 0.0961
Final error: 0.0808
Image:  7
Initial error: 0.0794
Final error: 0.0911
Image:  8
Initial error: 0.1220
Final error: 0.0919
Image:  9
Initial error: 0.0754
Final error: 0.0840
Image:  10
Initial error: 0.1470
Final error: 0.0416
Image:  11
Initial error: 0.0830
Final error: 0.0721
Image:  12
Initial error: 0.1752
Final error: 0.0683
Image:  13
Initial error: 0.0970
Final error: 0.0892
Image:  14
Initial error: 0.0619
Final error: 0.0628
Image:  15
Initial error: 0.1702
Final error: 0.0932
Image:  16
Initial error: 0.0683
Final error: 0.0554
Image:  17
Initial error: 0.0716
Final error: 0.1059
Image:  18
Initial error: 0.0402
Final error: 0.0342
Image:  19
Initial error: 0.0767
Final error: 0.0518
Image:  20
Initial error: 0.1904
Final error: 0.0664
Image:  21
Initial error: 0.0793
Final error: 0.0822
Image:  22
Initial error: 0.0745
Final error: 0.1131
Image:  23
Initial error: 0.0433
Final error: 0.0395
Image:  24
Initial error: 0.0593
Final error: 0.0565
Image:  25
Initial error: 0.1296
Final error: 0.0343
Image:  26
Initial error: 0.1362
Final error: 0.0708
Image:  27
Initial error: 0.1500
Final error: 0.0459
Image:  28
Initial error: 0.0727
Final error: 0.0648
Image:  29
Initial error: 0.1035
Final error: 0.0393
Image:  30
Initial error: 0.1446
Final error: 0.0582
Image:  31
Initial error: 0.1004
Final error: 0.0513
Image:  32
Initial error: 0.0596
Final error: 0.0742
Image:  33
Initial error: 0.0633
Final error: 0.0780
Image:  34
Initial error: 0.0874
Final error: 0.0427
Image:  35
Initial error: 0.0790
Final error: 0.0451
Image:  36
Initial error: 0.1562
Final error: 0.0422
Image:  37
Initial error: 0.0889
Final error: 0.0377
Image:  38
Initial error: 0.1140
Final error: 0.0940
Image:  39
Initial error: 0.0673
Final error: 0.0580
Image:  40
Initial error: 0.0506
Final error: 0.0611
Image:  41
Initial error: 0.1899
Final error: 0.0656
Image:  42
Initial error: 0.0940
Final error: 0.0473
Image:  43
Initial error: 0.1097
Final error: 0.0691
Image:  44
Initial error: 0.0803
Final error: 0.0659
Image:  45
Initial error: 0.1797
Final error: 0.0950
Image:  46
Initial error: 0.0892
Final error: 0.1264
Image:  47
Initial error: 0.0973
Final error: 0.0312
Image:  48
Initial error: 0.1474
Final error: 0.0707
Image:  49
Initial error: 0.1517
Final error: 0.0620
Image:  50
Initial error: 0.0711
Final error: 0.0564
Image:  51
Initial error: 0.0875
Final error: 0.0460
Image:  52
Initial error: 0.0304
Final error: 0.0587
Image:  53
Initial error: 0.0805
Final error: 0.0629
Image:  54
Initial error: 0.0826
Final error: 0.0608
Image:  55
Initial error: 0.0800
Final error: 0.0721
Image:  56
Initial error: 0.0810
Final error: 0.0660
Image:  57
Initial error: 0.1260
Final error: 0.0576
Image:  58
Initial error: 0.0668
Final error: 0.0616

Visualize Results


In [50]:
np.mean([fr.final_error(error_type='rmse') for fr in fitter_results])


Out[50]:
6.4453103507311198

In [47]:
from menpofit.visualize import visualize_fitting_results

visualize_fitting_results(fitter_results)


PIC + RLMS


In [ ]:
sampling_mask = np.require(np.zeros(unified.parts_shape), dtype=np.bool)
sampling_mask[2::6, 2::6] = True

imshow(sampling_mask)

In [ ]:
from alabortcvpr2015.unified import PartsUnifiedFitter, PICRLMS
from alabortcvpr2015.utils import pickle_dump
from alabortcvpr2015.result import SerializableResult

fitter = PartsUnifiedFitter(unified, algorithm_cls=PICRLMS, n_shape=[3, 12],
                            n_appearance=[25, 50], sampling_mask=sampling_mask)

fitter_results = []

for seed in xrange(repeat):

    np.random.seed(seed=seed)

    for j, i in enumerate(test_images):

        gt_s = i.landmarks[group].lms
        s = fitter.perturb_shape(gt_s, noise_std=0.05)

        fr = fitter.fit(i, s, gt_shape=gt_s, max_iters=20, prior=False)

        fitter_results.append(fr)
        fr.downscale = 0.5

        print 'Image: ', j
        print fr


results = [SerializableResult('none', fr.shapes(), fr.n_iters, 'PICRLMS', fr.gt_shape) 
           for fr in fitter_results]

pickle_dump(results, path + 'PhD/Results/unified_picrlms_view1_fast_dsift')

Visualize Results


In [ ]:
np.mean([fr.final_error(error_type='rmse') for fr in fitter_results])

In [ ]:
from menpofit.visualize import visualize_fitting_results

visualize_fitting_results(fitter_results)

In [ ]: