[Insight-users] Regular Step Gradient Descent optimizer

Luis Ibanez luis.ibanez at kitware.com
Tue May 2 19:13:04 EDT 2006


Hi Ming,


Did you set the optimizer to do Minimization or Maximization ?
that is, did you used any of the following:


       optimizer->MaximizeOn()  ?
       optimizer->MaximizeOff()  ?
       optimizer->MinimizeOn()  ?
       optimizer->MinimizeOff()  ?

How much overlap did the images have at the end of the run
with the RegularStepNormalized Correlation ?

Note that the lasts iterations of the run with
RegularStepGradientDescent are advancing at very
small steps.

You may want to start the optimizer with a larger initial
value of the StepLength, and to change the default relaxation
factor to be 0.7 or 0.9 instead of the default value 0.5.

In this way, the step length will change to 0.7 of the previous
value every time that the gradient changes directions.

You will get a lot of insight about the registration process
by plotting the trace of the translation in 3D. This will
show you how much the Transform is changing at every iteration.
This is not clearly conveyed just by looking at the numbers.

You will find the 2D version of many of these types of plots
in the ITK Software Guide,

     http://www.itk.org/ItkSoftwareGuide.pdf


Note that it is not surprising that you get different
results from different optimizers, but before you attempt
to compare the results you should make sure that you are
actually using both optimizers in their best settings and
conditions. Otherwise it is just a bias and unfair
comparison.



   Regards,


      Luis



=================
Ming Chao wrote:
> Hi,
>  
> When I used Regular Step Gradient Descent optimizer to register two 
> images I saw an abnormal behavior. The metric value first decreased but 
> after some iterations it became larger. See the following output:
>  
> 0   -0.835581   [-0.00321978, -0.0466639, 0.0883861]
> 1   -0.836504   [-0.00422488, -0.0933436, 0.176817]
> 2   -0.83737   [-0.00293453, -0.139983, 0.265265]
> 3   -0.838174   [0.000731481, -0.18652, 0.353701]
> 4   -0.838908   [0.00685175, -0.232884, 0.442092]
> 5   -0.839563   [0.015502, -0.278993, 0.530404]
> 6   -0.840129   [0.0267537, -0.32476, 0.618602]
> 7   -0.840598   [0.0406717, -0.370081, 0.706649]
> 8   -0.84096   [ 0.0573129, -0.414844, 0.794509]
> 9   -0.84121   [0.0767229, -0.458919, 0.882148]
> 10   -0.841343   [0.0989338, -0.50216, 0.969537]
> 11   -0.841358   [0.123961, -0.544401, 1.05665]
> 12   -0.841256   [0.151799, -0.58545 , 1.14349]
> 13   -0.841041   [0.182419, -0.625084, 1.23004]
> 14   -0.840719   [0.215761, -0.663034, 1.31634]
> 15   -0.840298   [0.214669, -0.680096, 1.41487]
> 16   -0.839375   [0.216594, -0.696938, 1.51342]
> 17   - 0.838339   [0.221686, -0.713544, 1.6119]
> 18   -0.837215   [0.230089, -0.729893, 1.7102]
> 19   -0.836032   [0.241937, -0.74596, 1.80819]
> 20   -0.83482   [0.257347, -0.76171, 1.90573]
> 21   -0.833613   [0.276409, - 0.7771, 2.00268]
> 22   -0.832445   [0.299184, -0.792076, 2.09889]
> 23   -0.831349   [0.325688, -0.806571, 2.19422]
> 24   -0.830357   [0.35589, -0.820502, 2.28853]
> 25   -0.829494   [0.389705, -0.833768, 2.3817]
> 26   -0.828783   [0.426981, -0.84624, 2.47365]
> 27   -0.828236   [0.467495, -0.857749, 2.56435]
> 28   -0.827859   [0.510938, -0.868055, 2.65383]
> 29   -0.827633   [0.556896, -0.876774, 2.74221]
> 30   -0.827525   [ 0.60475, -0.883034, 2.8298]
> 31   -0.827502   [0.650812, -0.875321, 2.91822]
> 32   -0.827512   [0.629235, -0.881114, 2.87349]
> 33   -0.827519   [0.603546, -0.883645, 2.83067]
> 34   -0.827483   [0.620407, -0.880267 , 2.84881]
> 35   -0.827564   [0.608674, -0.882388, 2.84506]
> 36   -0.827459   [0.613038, -0.88246, 2.84059]
> 37   -0.827529   [0.610107, -0.882339, 2.84166]
> 38   -0.827493   [0.611332, -0.882386, 2.8407]
>  
> However, if I change the optimizer to the LBFGSB optimizer, I got the 
> following output:
>  
> 0   -0.840282   [-0.0321978, -0.466639, 0.883861]
> 1   -0.840732   [0.0493198, -0.53362, 1.01199]
> 2   -0.840735   [0.0592661, -0.540774, 1.03432]
> 3   -0.840751   [0.100359, -0.570829, 1.11035]
>  
> This looks reasonable. The setup for the registration is the following:
>  
> 
>    typedef itk::BSplineInterpolateImageFunction<ImageType, double >   
> InterpolatorType;
>   typedef itk::ImageRegistrationMethod<ImageType, ImageType >    
> RegistrationType;
> 
>   typedef 
> itk::NormalizedCorrelationImageToImageMetric<ImageType,ImageType >    
> MetricType;
>     
>     typedef itk::TranslationTransform< double, Dimension >     
> TransformType;
> 
> Can anybody tell me why I have so different results with different 
> optimizers?
> 
> Thanks,
> 
> Ming
> 
>  
> 
> 
> ------------------------------------------------------------------------
> 
> _______________________________________________
> Insight-users mailing list
> Insight-users at itk.org
> http://www.itk.org/mailman/listinfo/insight-users




More information about the Insight-users mailing list