Introduction About Site Map

XML
RSS 2 Feed RSS 2 Feed
Navigation

Main Page | Blog Index

Archive for the ‘Research’ Category

Ramble About GMDS and GPCA (Ongoing Research)


OVER the past few months I have been running many experiments and compiling about 200 pages of text and graphs to document this. Today I made a short explanatory video that was unplanned and totally unscripted (I tend to prefer spontaneity, I loathe staging or reading from outlines/talking points/scripts).

This video is a bit of a test intended to get the hang of the recording software. These are some preliminary thoughts on the approach taken by GMDS (generalised multidimensional scaling) and the one adopted by GPCA (generalised principal component analysis) proponents. Admittedly, I am only at the early stages of properly learning about both. However, the basic principles as they are applied to distances (in space, not within data instances embedded in the shown hyperspace) are analogous at some underlying level, i.e. they measure something which is theoretically a surrogate of one another. The premises are hinged upon unification or use of one method to complement another, perhaps just comparing the results of each one in isolation.

Expressions Data in FRGC 2.0 (3-D)

I recently needed to gather 3-D data of different people’s faces, in order to perform experiments on these and test new algorithms that I had developed. The problem was, without some metadata regarding expressions, how might I find correct pairs suiting a particular criterion/ia? Two universities that I contacted had some data of this kind, but they were unwilling to share it (Open Data principles betrayed). So I had to do it myself using a dataset I mentioned here before [1, 2]. So far I have covered smiles and since it takes a lot of time to achieve this, I would like to share my work with those pursuing similar data.

To proactively remove allegations of the set being too easy to deal with (picky-ness in peer review), the most difficult partition when it comes to acquisition quality is taken. The figure below shows some examples of pairs that are being used after being selected as not many images contain expression variation. The selection process of very tedious as very few 3-D images exist with expressions in them, especially ones from the same person (required for consistent training assuming intra-subject residues are alike for common expressions).

Face expressions
Examples of the faces used tor training and recognition, with neutrals on the left and smiles on the right (note: this is just the texture of 3-D images)

About 5 hours were spent classifying the NIST datasets for future experiments. An initial subset of it is put in loader files. From the whole 3-D data of the Face Recognition Grand Challenge, one can only find a few hundreds of distinct individuals. Not all of them have an acquisition with a smile. I found just over 80 by manually browsing everything and some will be hard to work with due to obvious cases of degraded signal. The criteria was that all parts of the face (mouth upwards) must be visible and the expression one of happiness, not necessarily a smile.

The program works reasonably well (see the figure below) with new implementations of ICP (there are two main ones from my research group) and the new data which comprises 86 pairs, or 172 images in total.

Expressions data

Examples of the program with the new data and methods in place

Here is the statement for loading the pairs of expressions in GNU Octave or in MATLAB, in case someone needs a large pile of gigabytes of consistent expressions data.

    images_list={'neutral' 
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04471d273.abs' 


  ;'smile' 
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04471d271.abs' 


  ;'neutral' 
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04472d226.abs' 


  ;'smile' 
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04472d230.abs' 


  ;'neutral' 
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04473d185.abs' 


  ;'smile' 
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04473d193.abs' 


  ;'neutral' 
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04479d222.abs' 


  ;'smile' 
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04479d224.abs' 


  ;'neutral' 
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04484d189.abs' 


  ;'smile'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04484d191.abs'


  ;'neutral'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04485d290.abs'


  ;'smile'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04485d292.abs'

  ;'neutral'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04488d286.abs'

  ;'smile'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04488d288.abs'


  ;'neutral'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04495d313.abs'

  ;'smile'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04495d317.abs'


  ;'neutral'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04496d246.abs'

  ;'smile'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04496d250.abs'


  ;'neutral'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04502d60.abs'

  ;'smile'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04502d58.abs'




































  ;'neutral'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04505d218.abs'

  ;'smile'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04505d224.abs'


  ;'neutral'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04507d309.abs'

  ;'smile'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04507d305.abs'


  ;'neutral'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04509d276.abs'

  ;'smile'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04509d282.abs'


  ;'neutral'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04508d83.abs'

  ;'smile'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04508d85.abs'


  ;'neutral'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04511d178.abs'

  ;'smile'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04511d176.abs'


  ;'neutral'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04514d326.abs'

  ;'smile'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04514d328.abs'


  ;'neutral'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04513d303.abs'

  ;'smile'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04513d309.abs'


  ;'neutral'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04530d321.abs'

  ;'smile'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04530d323.abs'


  ;'neutral'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04519d204.abs'

  ;'smile'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04519d210.abs'

  ;'neutral'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04531d297.abs'

  ;'smile'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04531d295.abs'





























  ;'neutral'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04537d328.abs'

  ;'smile'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04537d330.abs'



  ;'neutral'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04535d213.abs'

  ;'smile'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04535d217.abs'


  ;'neutral'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04546d75.abs'

  ;'smile'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04546d71.abs'



  ;'neutral'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04542d118.abs'

  ;'smile'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04542d114.abs'


  ;'neutral'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04556d311.abs'

  ;'smile'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04556d315.abs'



  ;'neutral'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04557d337.abs'


  ;'smile'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04557d339.abs'

  ;'neutral'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04559d314.abs'



  ;'smile'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04559d320.abs'

  ;'neutral'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04560d273.abs'


  ;'smile'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04560d275.abs'


  ;'neutral'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04569d288.abs'

  ;'smile'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04569d286.abs'


  ;'neutral'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04577d290.abs'

  ;'smile'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04577d292.abs'































  ;'neutral'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04580d299.abs'

  ;'smile'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04580d307.abs'


  ;'neutral'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04581d200.abs'

  ;'smile'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04581d202.abs'



  ;'neutral'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04588d137.abs'

  ;'smile'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04588d135.abs'


  ;'neutral'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04589d246.abs'

  ;'smile'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04589d248.abs'



  ;'neutral'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04593d200.abs'

  ;'smile'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04593d202.abs'


  ;'neutral'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04595d93.abs'

  ;'smile'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04595d95.abs'



  ;'neutral'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04596d78.abs'

  ;'smile'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04596d84.abs'


  ;'neutral'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04600d249.abs'

  ;'smile'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04600d251.abs'



  ;'neutral'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04603d141.abs'

  ;'smile'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04603d143.abs'


  ;'neutral'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04605d243.abs'

  ;'smile'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04605d239.abs'








































  ;'neutral'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04609d98.abs'

  ;'smile'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04609d100.abs'


  ;'neutral'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04606d180.abs'

  ;'smile'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04606d182.abs'



  ;'neutral'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04605d255.abs'

  ;'smile'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04605d253.abs'


  ;'neutral'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04622d238.abs'

  ;'smile'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04622d240.abs'



  ;'neutral'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04619d163.abs'

  ;'smile'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04619d161.abs'


  ;'neutral'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04629d144.abs'

  ;'smile'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04629d146.abs'



  ;'neutral'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04644d204.abs'

  ;'smile'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04644d206.abs'


  ;'neutral'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04645d95.abs'

  ;'smile'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04645d93.abs'



  ;'neutral'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04697d80.abs'

  ;'smile'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04697d78.abs'


  ;'neutral'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04696d40.abs'

  ;'smile'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04696d42.abs'











































  ;'neutral'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04691d50.abs'

  ;'smile'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04691d48.abs'


  ;'neutral'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04688d40.abs'

  ;'smile'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04688d36.abs'



  ;'neutral'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04684d232.abs'

  ;'smile'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04684d234.abs'


  ;'neutral'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04682d122.abs'

  ;'smile'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04682d128.abs'




  ;'neutral'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04675d251.abs'

  ;'smile'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04675d253.abs'


  ;'neutral'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04673d188.abs'

  ;'smile'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04673d190.abs'




  ;'neutral'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04699d42.abs'

  ;'smile'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04699d44.abs'


  ;'neutral'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04700d18.abs'

  ;'smile'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04700d20.abs'




  ;'neutral'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04703d46.abs'

  ;'smile'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04703d42.abs'


  ;'neutral'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04704d22.abs'

  ;'smile'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04704d18.abs'





























































  ;'neutral'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04711d53.abs'

  ;'smile'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04711d47.abs'


  ;'neutral'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04715d12.abs'

  ;'smile'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04715d14.abs'



  ;'neutral'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04717d49.abs'

  ;'smile'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04717d43.abs'


  ;'neutral'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04719d86.abs'

  ;'smile'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04719d88.abs'




  ;'neutral'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04721d48.abs'

  ;'smile'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04721d46.abs'


  ;'neutral'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04728d44.abs'

  ;'smile'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04728d42.abs'




  ;'neutral'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04737d38.abs'

  ;'smile'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04737d36.abs'


  ;'neutral'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04737d38.abs'

  ;'smile'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04737d36.abs'




  ;'neutral'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04749d80.abs'

  ;'smile'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04749d82.abs'


  ;'neutral'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04750d54.abs'

  ;'smile'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04750d56.abs'




























































  ;'neutral'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04754d78.abs'

  ;'smile'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04754d80.abs'


  ;'neutral'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04756d73.abs'

  ;'smile'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04756d75.abs'



  ;'neutral'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04762d43.abs'

  ;'smile'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04762d41.abs'


  ;'neutral'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04763d68.abs'

  ;'smile'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04763d70.abs'




  ;'neutral'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04766d24.abs'

  ;'smile'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04766d30.abs'


  ;'neutral'  
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04767d38.abs'

  ;'smile'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04767d36.abs'



  ;'neutral'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04768d76.abs'

  ;'smile'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04768d74.abs'


  ;'neutral'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04773d84.abs'

  ;'smile'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04773d78.abs'




  ;'neutral'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04775d80.abs'

  ;'smile'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04775d82.abs'


  ;'neutral'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04777d88.abs'

  ;'smile'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04777d84.abs'


























































  ;'neutral'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04779d52.abs'

  ;'smile'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04779d48.abs'


  ;'neutral'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04805d60.abs'

  ;'smile'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04805d62.abs'



  ;'neutral'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04808d32.abs'

  ;'smile'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04808d30.abs'


  ;'neutral'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04821d44.abs'

  ;'smile'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04820d36.abs'




  ;'neutral'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04836d47.abs'

  ;'smile'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04836d49.abs'


  ;'neutral'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04853d50.abs'

  ;'smile'
  ;'~/NIST/FRGC-2.0-dist/nd1/Fall2003range/04853d48.abs'};

Later on I am going to publish all the code and about 100 pages of text. It needs tidying up first.

Experiments Time

It has been a very long time since I last blogged about research, but things are going well and inactivity in the blog typically implies a lot of progress elsewhere. At the moment I am just putting the final touches, improving the program that I developed to run future experiments. Here is a new screenshot.

PCA modes

Now comes the CPU-heavy part, requiring perhaps weeks of runtime. The memory footprint of the program sometimes exceeds 3 GB of RAM.

A lot more material, including technical explanations, will be released at a later date when it’s more tidy.

Outperforming PCA, Revisiting MATLAB

Post-denoising small

I currently work on a very fascinating project which deals with 3-D face recognition, as already stated back in January. Progress has been noticeable recently (easier to get coding done when the Internet is mostly unavailable due to Bad Telecom [1, 2, 3]) and the accompanying text is now about 50 pages long.

A few observations about MATLAB: the programming framework has not really developed much since 2003. It’s either quite stagnant or improved only in unseen places. I did not forget how to develop a GUI environment very rapidly.

A few observations about PCA: the method is a little antiquated and it can probably be outperformed by more problem-specific implementations of algorithms we explore.

A few observations about Bad Telecom (or Bastards Telecom, although some people view the word bastard as too strong): they only ever serve the customer properly if he/she becomes a threat to the reputation of the business. It is sad that customers must be seen as a risk before they can actually get progress made.

Contracting for Scientific Betterment

Tourists checking a map

Helping hand for Free software entrants in science

Earlier this month I wrote about a new ‘umbrella’ under which I’ll be able to accept contracts, as I’ve been doing for about a decade now. The banner chosen for it is “Scientific Freedom” and the official site for it is still not finished even though I’m reasonably happy with the state that it’s in, so it’s now public. I’m fortunate enough to have met skilled people around the Web — people with whom I can share work in case it’s geographically suitable or in cases where workload is high. So even though there’s nothing too new here, the site is new and it makes it abundantly clear that I only ever code for freedom (preferably GPLv3) because it’s beneficial to everyone, the client included.

Working With the FRGC 3-D Faces Database – Part I

Massive dataset explored

Raw face image with holes left

Example face with holes remaining in the data

Face - Phong method
Another example

Smoothed face with no holes or spikes
Same as above, different angle

Summary: Notes, tips, code samples, and pointers relating to FRGC (an ongoing series of posts)

THIS post provides some information of interest to those who may find themselves working with 70 GB of data and some programs [1, 2]. The latter is a FRGC Web site. The package comes with associated applications and scripts written in Java, C++, Perl, etc. The previous post about the dataset (FRGC ver2.0) offers a bit of background that is research-specific (relating to Dr. Ajmal Mian and his Ph.D. student Faisal R. Al-Osaimi), whereas the notes below are a bit more generic. This series of posts is not about statistical models of faces but only about the dataset. This recent message from Face Recognition Research Community contains MATLAB/Octave loader code for a data instance from the dataset, where each 3-D face weighs about 13 MB (compressed):

function [x, y, z, fl] = absload(fname) 
%ABSLOAD Read a UND database range image from file.
%   [X,Y,Z,FL] = ABSLOAD(FILENAME) reads the range image in FILENAME
%   into the variables X,Y,Z,FL.
%   FILENAME is a string that specifies the name of the file
%            to be openned
%   X,Y,Z are matrices representing the 3D co-ords of each point
%   FL    is the flags vector specifying if a point is valid

% open the file
fid = fopen(fname);

% read number of rows
r = fgetl(fid);
r = sscanf(r, '%d');

% read number of columns
c = fgetl(fid);
c = sscanf(c, '%d');

% read junk line
t = fgetl(fid); clear t;

% get flags
fl = fscanf(fid,'%d',[c r])';

% get x
x = fscanf(fid,'%f',[c r])';
% get y
y = fscanf(fid,'%f',[c r])';
% get z
z = fscanf(fid,'%f',[c r])';

% close the file
fclose(fid); 

This just handles one single image. There are many in the current collection:

find | grep .abs | wc
   4950    4950  257215

All of which are compressed:

find | grep .abs.gz | wc
   4950    4950  257215

To get a list of the 3-D faces:

find | grep .abs.gz | awk '/{print $1}' 1>~/files_list.txt

It yields something like the following:

(more…)

3-D Face Recognition

Al-Osaimi paper

From Al-Osaimi et al., IJCV 2008

Summary: My attempt to reproduce some of the results of F. Al-Osaimi et al. and furthermore improve them using other methods and different datasets (with a 3-D scanner at our disposal)

THIS post provides some background about my next (current) research project, which deals with non-medical applications. The previous project dealt with cardiac imaging and I’ve packaged that code and published it along with other data that may be useful.

The group of A. Mian has done some fantastic work recently on 3-D face recognition and I shall attempt to reproduce some results with a NIST database. In their paper “An Expression Deformation Approach to Non-rigid 3D Face Recognition,” F. Al-Osaimi, M. Bennamoun, and A. Mian explain some good results from experiements that apply PCA to face images (paper published online in September 2008 by a leading computer vision journal, but access is restricted, so there is no link, either… unless one uses this copy).

Since I have extensive experience with NRR, PCA, and statistical models in general, this project suits me better than some previous ones. I have done limited work on analysis applied to sets of face images that are only rigidly or affinely registered.

The paper from the group in question is 22 pages long in the raw form and about 15 in IJCV. The abstract describes an idea and quantifies some results using known benchmarks and the “FRGC v2.0 dataset”. Then, the method is alluded to vaguely and not formalised until later. The phrasing could be improved somewhat to avoid repetition, e.g. in the following paragraph containing parts like: “2D face recognition has been extensively researched in the last two decades. However, unlike 3D face recognition its accuracy is adversely affected by many factors such as illumination and scale variations. In addition, 2D images undergoes affine transformations during acquisition. Moreover, handling pose variations in 3D scans is more feasible than 2D images. It is believed that 3D face recognition has the potential for more accuracy than 2D face recognition (Bowyer et al. 2006). On the other hand, the acquisition of 2D images is less intrusive than 3D acquisition. However, 3D acquisition technologies are continuously becoming cheaper and less intrusive (The International Conference on 3D Digital Imaging and Modeling, 1997–2007).”

“Most of the approaches in the literature are rigid,” says the text in page 2, just before the overview which states: “The main contribution of this paper is a non-rigid 3D face recognition approach. This approach robustly models the expression patterns of the human face and applies the model to morph out facial expressions from a 3D scan of a probe face before matching. Robust expression modeling and subsequent morphing gives our approach a better ability in differentiating between expression deformations and interpersonal disparities. Consequently, more interpersonal disparities are preserved for the matching stage leading to better recognition performance.”

The background section is followed by some classification of existing work, concluding with: “Our approach also falls into this category i.e. non-rigid 3D face recognition.”

1.1 presents a very good summary of related work and 1.2 a clear overview of the method and the ideas behind it, accompanied by a helpful diagram at the bottom of page 3 (Figure 1). The strategy is to use pairs of image of the same individuals, normalising them a bit, and then applying PCA to reduce the dimensionality that characterises expression variation.

Section 2 in page 4 starts by describing pre-processing steps that are essential yet specific to the limitation of the FRGC v.20 dataset. Page 5 starts presenting some visual examples of the approach, with some equations relating to PCA (along with more visual examples) in pages 6 and 7.

Section 3 begins to deal with some other experiments that are not just dealing with models in synthesis mode. The same dataset is being used (with about 5,000 3-D faces), but more data gets added to it. To quote, “The dataset is composed of two partitions: the training partition (943 scans) and the evaluation partition (4007 scans). [..] The FRGC dataset was augmented by 3006 scans that were acquired using a Minolta vivid scanner in our laboratory.”

Parameters and set sizes (those which are included) get tested in very large-scale experiments that yield ROC curves. These curves help show how to set the different parameters and enable one to measure advantages of one algorithm over another. Page 13 has some comparisons to other methods from the literature, with numbers summarised in a chart.

This is truly inspiring work and I shall spend the next few weeks learning from it as well as implementing something similar.

Retrieval statistics: 21 queries taking a total of 0.596 seconds • Please report low bandwidth using the feedback form
Original styles created by Ian Main (all acknowledgements) • PHP scripts and styles later modified by Roy Schestowitz • Help yourself to a GPL'd copy
|— Proudly powered by W o r d P r e s s — based on a heavily-hacked version 1.2.1 (Mingus) installation —|