[Insight-users] Re: SetMaxIterations(0) still computes

Luis Ibanez luis.ibanez at kitware.com
Tue Aug 14 13:17:30 EDT 2007


Hi Emma,

A fix for bug 5476 has been committed to the CVS repository.

    http://public.kitware.com/Bug/view.php?id=5476

The code changes are:

http://www.itk.org/cgi-bin/viewcvs.cgi/Code/Numerics/itkRegularStepGradientDescentBaseOptimizer.cxx?root=Insight&sortby=date&r2=1.23&r1=1.22
http://www.itk.org/cgi-bin/viewcvs.cgi/Code/Numerics/itkRegularStepGradientDescentBaseOptimizer.h?root=Insight&sortby=date&r2=1.22&r1=1.21

and a check for this condition was added to the Test:
http://www.itk.org/cgi-bin/viewcvs.cgi/Testing/Code/Numerics/itkRegularStepGradientDescentOptimizerTest.cxx?r2=1.22&root=Insight&sortby=date&sortdir=down&r1=1.21


A new "StopCondition" was added to the enum,
with the name "Unknown". This is now the condition
used to initialize m_StopCondition.



Please let us know if you find any other issues.


    Thanks


       Luis



----------------
Emma Ryan wrote:
> Hi Luis,
> 
>   Yes, I see the value of m_StopCondition in the debugger and it does 
> not get initialized to 0, if the MaxNumberofIterations is 0.
> I haven't checked whether this occurs for 0 value alone.
> 
> Emma
> 
> 
> 
> ----- Original Message ----
> From: Luis Ibanez <luis.ibanez at kitware.com>
> To: Emma Ryan <eryanvtk at yahoo.com>
> Cc: insight-users at itk.org
> Sent: Friday, August 10, 2007 9:18:58 AM
> Subject: Re: [Insight-users] Re: SetMaxIterations(0) still computes
> 
> 
> Hi Emma,
> 
>          You are right, this is a bug.
> 
> 
>       If Number of Iterations is set to zero,
>       then the optimizer will runs forever.
> 
> 
> We have logged this and Bug #5476
> http://public.kitware.com/Bug/view.php?id=5476
> 
> 
> The changes should be easy to put in place.
> 
> 
> 
> A couple of questions first:
> 
>     How are you looking at the value of m_StopCondition ?
>     by using a debugger ?
>     by using print outs ?
> 
> StopCondition is *initialized* with "MaximumNumberOfIterations",
> that's probably the reason why you see that value when you
> (I assume "manually") stop the optimizer.
> 
> We probably should add a "Unknown" to the enum, and initialize
> the StopCondition to that value.
> 
> 
> 
>    Please let us konw,
> 
> 
>        Thanks
> 
> 
>           Luis
> 
> 
> 
> ------------------
> Emma Ryan wrote:
>  > Hi,
>  >
>  >    With reference to my earlier email ( below), I think ITK does not
>  > allow the MaxNumberOfIterations to be zero.  It needs to be a minimum of
>  > one because the check
>  > if (m_currentIteration = = m_NumberOfIterations) then quit; is done in a
>  > sort-of 'do-while' loop rather than 'while'. So this condition is never
>  > true for m_NumberofIterations=0.
>  >
>  > I am still confused about Stop_Condition getting a value of 5.
>  >
>  > Also, if Stop_Condition is defined by NumberofIterations, then why
>  > doesn't the optimizer continue iterating till it reaches the number,
>  > rather than terminating at a 'decent' metric value ?
>  >
>  > Obviously there is another hidden condition for termination which I dont
>  > see.  Could anyone point to me the location ?
>  >
>  > Thank you,
>  > Emma
>  >
>  > ----- Original Message ----
>  > From: Emma Ryan <eryanvtk at yahoo.com>
>  > To: insight-users at itk.org
>  > Sent: Thursday, August 9, 2007 1:35:23 AM
>  > Subject: SetMaxIterations(0) still computes
>  >
>  > Hi,
>  >
>  >   I'm trying to debug my rigid registration program and the first step
>  > is to reduce the number of iterations.
>  > So I set it to 0, but when I execute my program it still shows me
>  > several iterations.  Any clue as to why this might be happening ?
>  >
>  > Here is the output of the optimizer (segment 1).  As you can see,
>  > NumberOfIterations = 0 . The StopCondition which I thought would be 0 is
>  > 5. So based on this and other experiments, I have a few questions.
>  >
>  > 1. Shouldn't the StopCondition be 0 ?
>  > 2. If optimizer->SetNumberOfIterations(0), then what do the following
>  > iterations represent  and where do they come from ?
>  > 3. Also, it I set the NumberOfIterations to some otehr number such as
>  > 100000, it still performs 500 iterations (the default value from the
>  > example programs)
>  > 4. The Mean Square error metric that I compute on Binarized input images
>  > is the same as that computed on grayscale images. So what I am doing
>  > here is that I convert the grayscale images to binary. ie. Every tissue,
>  > except bone is black. Then I use these binary images for registration.
>  > The metric value returned by the registration process is compared
>  > against the metric value obtained by applying the same transform on
>  > original grayscale images and checking the mean squared error.
>  > Surprisingly these two values are EXACTLY the same. I expect them to be
>  > different for obvious reasons.
>  > The way I compute the metric on the original grayscale images is shown
>  > below under segment 2
>  >
>  >
>  > What is going on ?
>  >
>  > Any clue ?
>  >
>  > Thanks in advance
>  > Emma
>  >
>  >
>  > SEGMENT 1
>  > ---------------
>  > VersorRigid3DTransformOptimizer (019220B8)
>  >   RTTI typeinfo:   class itk::VersorRigid3DTransformOptimizer
>  >   Reference Count: 2
>  >   Modified Time: 874
>  >   Debug: Off
>  >   Observers:
>  >     none
>  >   InitialPosition: []
>  >   CurrentPosition: []
>  >   Scales: [1, 1, 1, 0.001, 0.001, 0.001]
>  >   MaximumStepLength: 0.2
>  >   MinimumStepLength: 0.001
>  >   RelaxationFactor: 0.5
>  >   GradientMagnitudeTolerance: 0.1
>  >   NumberOfIterations: 0
>  >   CurrentIteration: 0
>  >   Value: 0
>  >   Maximize: 0
>  >   CostFunction: (None)
>  >   CurrentStepLength: 0
>  >   StopCondition: 5
>  >   Gradient: []
>  > 0   1976.47   [0.000460224, -0.0157202, -0.041473, -6.58714, -9.17326,
>  > 0.231981]
>  >
>  > 1   669.48   [0.00152886, 0.00402301, -0.0345613, -6.60421, -9.36806,
>  > 0.229234]
>  > 2   576.079   [-0.000710302, -0.0100887, -0.0583703, -6.5576, -9.55443,
>  > 0.227974
>  > ]
>  > 3   895.329   [0.0024751, 0.017149, -0.0188799, -6.6526, -9.70157, 
> 0.236332]
>  > 4   1454.49   [0.000779181, 0.00262768, -0.0415692, -6.57818, -9.73974,
>  > 0.226865
>  > ]
>  > 5   208.619   [-0.000462126, -0.00352645, -0.0488536, -6.56913,
>  > -9.83714, 0.2190
>  > 21]
>  > 6   320.494   [0.00156166, 0.00864248, -0.0314357, -6.61138, -9.91627,
>  > 0.207684]
>  >
>  > 7   724.278   [0.000322199, -0.00121238, -0.0455856, -6.58293, -9.93788,
>  > 0.20247
>  > 4]
>  > 8   143.422   [0.000259716, 0.00266556, -0.0399937, -6.59857, -9.98223,
>  > 0.192322
>  > ]
>  > 9   223.3   [-0.000310048, -0.004876, -0.0507685, -6.57875, -10.018,
>  > 0.180773]
>  > 10   419.74   [0.00029441, 5.14277e-005, -0.0436893, -6.59453, -10.026,
>  > 0.177275
>  > ]
>  > 1
>  > .......
>  >
>  >
>  >
>  >
>  > SEGMENT 2
>  >
>  > MetricType::Pointer         metricOrig           = MetricType::New();  
>  >
>  >         metricOrig->SetInterpolator(interpolator);
>  >         metricOrig->SetTransform(transform);
>  >         metricOrig->SetFixedImage(fixedImageReaderOrig->GetOutput());
>  >         metricOrig->SetMovingImage(movingImageReaderOrig->GetOutput());
>  >         metricOrig->SetTransformParameters(finalParameters);  
>  >         MetricType::TransformParametersType finalParam =
>  > registration->GetLastTransformParameters();
>  >        
>  >         std::cout<<" MetricOnOriginalImage =
>  > "<<metric->GetValue(finalParam)<<std::endl;
>  >
>  >
>  >
>  >
>  >
>  >
>  > ------------------------------------------------------------------------
>  > Fussy? Opinionated? Impossible to please? Perfect. Join Yahoo!'s user
>  > panel
>  > 
> <http://us.rd.yahoo.com/evt=48516/*http://surveylink.yahoo.com/gmrs/yahoo_panel_invite.asp?a=7%20> 
> 
>  > and lay it on us.
>  >
>  >
>  > ------------------------------------------------------------------------
>  > Be a better Heartthrob. Get better relationship answers
>  > 
> <http://us.rd.yahoo.com/evt=48255/*http://answers.yahoo.com/dir/_ylc=X3oDMTI5MGx2aThyBF9TAzIxMTU1MDAzNTIEX3MDMzk2NTQ1MTAzBHNlYwNCQUJwaWxsYXJfTklfMzYwBHNsawNQcm9kdWN0X3F1ZXN0aW9uX3BhZ2U-?link=list&sid=396545433>from 
> <http://us.rd.yahoo.com/evt=48255/*http://answers.yahoo.com/dir/_ylc=X3oDMTI5MGx2aThyBF9TAzIxMTU1MDAzNTIEX3MDMzk2NTQ1MTAzBHNlYwNCQUJwaWxsYXJfTklfMzYwBHNsawNQcm9kdWN0X3F1ZXN0aW9uX3BhZ2U-?link=list&sid=396545433%3Efrom> 
> 
>  > someone who knows.
>  > Yahoo! Answers - Check it out.
>  >
>  >
>  > ------------------------------------------------------------------------
>  >
>  > _______________________________________________
>  > Insight-users mailing list
>  > Insight-users at itk.org
>  > http://www.itk.org/mailman/listinfo/insight-users
> 
> 
> ------------------------------------------------------------------------
> Boardwalk for $500? In 2007? Ha!
> Play Monopoly Here and Now 
> <http://us.rd.yahoo.com/evt=48223/*http://get.games.yahoo.com/proddesc?gamekey=monopolyherenow> 
> (it's updated for today's economy) at Yahoo! Games.


More information about the Insight-users mailing list