PDF version of this entire document

ICP

It ought to be possible to compare 3 ICP methods based on their groupwise performance, as judged for example by the determinant of the covariance matrix. Clustering of faces is important for Down syndrome detection, but more relevant data is needed.

Based on face statistics one is hoping to correctly detect on a Boolean basis attributes like gender, abnormality/syndrome, ethnicity, etc. There is some work on this in 2-D, where basically one can build models for groups of subject belonging to one group and then build appearance models of shape and intensity for those. The appearance/texture which includes colour makes classification simpler and automated. It performs AAM fitting to a target and scores the match.

We have begun running basic experiments which we reran using the photometric ICP methods (Figure [*]), altering bits of code to make it better adapted at the interfaces level. There are at least 3 types of ICP methods at our disposal now. It's an opportunity for benchmarks.

We have tried different parameters and options; we also attempted different methods, but the C-coded part of the program keeps crashing, even though it's run on a 64-bit machine:

uname -a

Linux 2.6.31-17-generic #54-Ubuntu SMP Thu Dec 10 17:01:44 UTC 2009 x86_64 GNU/Linux

I took a look at the function (ann.m) to see if there's a non-mex option but could not see any such option. Did you build the binary on machines with the same specs?

Figure: Example of an evaluation experiment for photometric ICP
Image icp-test

Typically about 15,000, but spacing can be varied using a slider such that they are sampled from a lesser dense grid, e.g. 10x10 (which would reduce this by two orders ot magnitude to about 150 points). I have spent another hour or so trying all sorts of other points, but it might be a compatibility issue in the binary. It crashes everything in my session, without exception.

We still grapple with segmentation faults in my use of photometric ICP. The binary being accessed just crashes the whole MATLAB session and the shell session too become defunct (it gets intercepted as an exception at a lower level, probably for security reasons), but there may be a substitution for this binary. It ought to be possible to perform systematic ICP benchmarks on large sets once this is working, the sets being either FRGC (e.g. Experiment 3) or GIP data.

Dan wrote: ``Download the ANN code from the SVN. In buildmex.m you will find a matlab code that does the same (for verification). Just use it instead.''

I can reproduce the error. Following recompilation of the ANN code the same crashes persisted, whereas the interpreted implementation worked as expected, by default. By changing the parameters, e.g. k = 15000, the same session crashes occurred:

ANN: ERROR---->Requesting more near neighbors

than data points<-------ERROR pure virtual method

called terminate called without an active exception

./mb: line 1: 3887 Aborted nice -n19 matlab -nodesktop

-nosplash -r addpath(genpath('~/pcafaces')); cd ~/pcafaces;

system('w'); system('uptime'); gmdspca;

And there it hangs.

So despite speed considerations, maybe it's worth using a different set of points or use a non-C implementation if one is available. We gave that a go. Since we did not write the ANN we do not know why it crashes on the production system. So we needed to choose one of three options: 1. write one on one's own. 2. find another one on the web. 3. use the slow/matlab version.

Tests where the function calls are made whilst increasing k from 3 to 30 and then 300 (whereupon one could reproduce the error and realise that it's an unhandled exception-raising issue) help in debugging the issue. It seems like a programming issue and not a compilation issue. Improper number of neighbours where one tries to find the nearest neighbuors of 100 query points in the collection of just 10 points is when the same error (and nasty crash) can be reproduced.

We have been trying to shoehorn the photometric ICP code into the program of choice by modifying some incompatible functions.

We eventually inserted it to the SVN repository. It is possible that other functions are missing. This function is, part of an attempt to add spatially-regularized, partial weights.

We have been trying to grasp the workings of the different methods by going through the code and adjusting it slightly so as to accommodate for different data structures. The code in its current form has been somewhat challenging to work with although it is well structured.

This module was under construction at the time - it still needs tweaking (of the parameters, to say the least), definitely for real data. We're going to add also simpler measures of point rejection. It is satisfactory, but it's not there yet.

The data we are working on comprises faces with a well separated (i.e depth) background.

Additional functions which were missing from the code repository are being brought together to make possible the operation of more cunning ICP code. A lot of small adjustments to the code are needed, either because some traits/attributes do not exist in the raw data or because the scale of the problem exceeds that of proof-of-concept/synthetic data/manageable scale experiments.

We have spent nearly 10 hours learning some of the code and modifying bits of it, but as a whole it is still very hard to use like a black box and simply run to get translation and rotation parameters. Some of the tests contain references to non-existing fields or functions (some might be deprecated, some belong to other parts of the SVN repository). If there exist a way of modifying the function to accept X Y Z matrices and rigidly align two surfaces, that would be excellent. Exploration of other areas might meanwhile make more sense for progress (having recently had a similar setback when UWA said they could not share their experimental data with a lot of expressions for testing purposes).

Geometric ICP is good enough and the photometric part would be an extra. And despite the fact that geometric should be enough, there is less novelty in it and with other directories like icp, icp-quaternions, and icp_lihi, these might there be worth trying too. We already have 2 ICP implementations in the program that operates on face data.

Regarding http://en.wikipedia.org/wiki/Photometry_%28optics%29photometric implementation, I eventually got a fresh copy from the repo with wget. The /Aux directory was gone and I could see some duplicate functions in other ICP directories, along with nice demos that work. I tried to make use of these.



Subsections
Roy Schestowitz 2012-01-08