[Insight-users] regularStepGradientDescent problem

Luis Ibanez luis.ibanez at kitware.com
Wed, 28 Apr 2004 20:12:40 -0400


Hi Christos,

MutualInformation may be too noisy in nature for being a good
candidate for the ReguglarStepGradientDescent optimizer.

One good exercise that you should do is to create some plots
of the Metric profile.  For example, take a simple translation
transform and using for displacing the moving image over the
fixed image.  Compute the MI metric form let's say 100 different
positions of the translation. Plot this values and you will
probably see how irregular the output of MI may be.

One option is to use MattesMutualInformation since this metric
is a bit smoother than the Viola-Wells implementation.

In any case, the best way to start figuring out parameters for
the registration is to plot the metric for a certain range of
transform parameters.  Do the same for a rotation around an
axis.  The reason why this exercise may be so illuminating is
that in practice you are asking the optimizer to walk over
such landscape in the quest of a minimum (or maximum).

One natural optimizer for MI is the OnePlusOne evolutionary
algorithm. This algorithm is best suited for dealing with noisy
cost functions and do not rely on the derivatives of the metric.

You can actually play with the application:

   /InsightApplications/
     LandmarkInitializedMutualInformationRegistration

that implements this exact combination.


   Regards,


     Luis


-----------------------------
Christos Panagiotou wrote:

> 
> Dear Luis
> 
> I have succeeded to register an optical tomography volume (100x120x136) 
> against an MRI volume (256x256x138) using the gradient descent 
> optimizer, the MIimage2image metric and a multi resolution pyramid scheme.
> 
> I am trying now to optimize what results would i get by using the 
> regular step gradient descent optimizer.
> 
> However until now, the results i am getting are totaly inaccurate. The 
> moving volume is distorted vastly and I get matrices such as the following:
> 
> Final parameters: [3.61106, -0.433306, 0.583373, 1.82901, 1.01833, 
> -0.833603, 0.664394, -0.187408, 2.08654, 0.00177591, -0.000700402, 
> 0.00196778]
> Overall transform matrix:
> 0.664394 -0.187408 2.08654
> -3.61106 0.433306 -0.583373
> 1.82901 1.01833 -0.833603
> 
> Overall transform offset:
> -152.155  504.039  -238.269
> 
> i ve tried various step lengths such as 0.01 - 0.2, 0.5 - 10 (my voxel 
> spacing is 1.0 so the ideal would be 0.5-10 (according to the min=1/2 
> max= 10x rule)
> 
> the optimizer->GetValue() in the observer returns almost always 
> descending values which is wrong as I am trying to maximize the MI metric.
> 
> In addition the application just runs for 10 - 15 iterations and the 
> terminates either because of //GradientMagnitudeTolerance// or 
> //StepTooSmall//
> i am not sure if by altering the step sizes (min max) at run time would 
> help (and if it would how do i do this?)
> 
> some results:
> 
> step 0.1 - 2
> Optimizer Stop due to condition:  1
> 
> 0.0926519
> 0.177582
> 0.0988912
> 0.079914
> 0.0488402
> 0.0477253
> 0.0776582
> 0.0281974]
> 0.0926519
> 0.177683
> 0.0988989
> 0.0799157
> 0.048839
> 0.0477213
> 0.0776582
> 0.0281464
> 0.0926519
> 0.177683
> 0.0988989
> 0.0799157
> 0.048839
> 0.0477213
> 0.0776582
> 0.0281464
> 0.0926519
> 0.105355
> 0.0762144
> 0.00489387
> 
> 
> Overall transform matrix:
> 0.664394 -0.187408 2.08654
> -3.61106 0.433306 -0.583373
> 1.82901 1.01833 -0.833603
> 
> Overall transform offset:
> -152.155  504.039  -238.269
> 
> ----------------------------
> 
> step 0.02 - 0.4
> Optimizer Stop due to condition:  2
> 
> 
> 0.0926519
> 0.177582
> 0.0988912
> 0.079914
> 0.0488402
> 0.0477253
> 0.0776582
> 0.0281974
> 
> Overall transform matrix:
> -0.177125 0.0773208 0.895595
> -1.08434 -0.237067 0.12067
> 0.201707 1.05051 0.0713326
> 
> Overall transform offset:
> 1.77245  219.833  -95.9724
> Generating output ...
> 
> 
> 
> i dont have any idea why my results come out so bad..
> i use the same translation scale i used in the gradientdescent optimizer 
> which gave me good results
> 
> 1.0 / 10*sqrt( x^2+y^2+z^2 )
> 
> any suggestions?
> thanks
> christos
> 
> 
> 
> 
> 
> _______________________________________________
> Insight-users mailing list
> Insight-users at itk.org
> http://www.itk.org/mailman/listinfo/insight-users
>