[Insight-users] ITK 4.0, Amoeba optimizer

Rick Frank rickf at fullspectrumsw.com
Sat Jan 21 22:07:48 EST 2012


I also notice an early stop of the amoeba in 4.0 vs 3.20.1 and using mattes mi metric, linear interpolator.

Same data and code, and parameters stops with slightly "better" metric number in 3.20.1.Perhaps something with the threading? It seems to be making use of more threads in 4.0. I have an 8 core machine.


The data is ct volume with cbct volume.

anyone else seeing this?

Thanks


Rick Frank

On Jan 21, 2012, at 12:01 PM, "insight-users-request at itk.org" <insight-users-request at itk.org> wrote:

> Thanks for ansering !
> 
> I haven't found any solution to my problem. Itk code seems to be the 
> problem.
> I can give my source and images if needed !
> 
> Yann
> 
> 
> Le 18/01/2012 21:46, Cory Quammen a ?crit :
>> Yann,
>> 
>> Ziv Yaniv did a lot of refactoring of this class for the ITK 4.0
>> effort. Ziv, can you comment?
>> 
>> - Cory
>> 
>> On Tue, Jan 17, 2012 at 8:30 AM, asertyuio<asertyuio at yahoo.fr>  wrote:
>>> Hi all,
>>> 
>>>    I'm migrating from ITK 3.2 to ITK 4.0, and after fixing some litle
>>> trouble around cmake, I'm on something that seems more problematic.
>>> I write for ITK 3.2 a registration process, that was, for part of it, using
>>> Amoeba optimizer, and cardinal matching metric.
>>> It worked perfectly.
>>> After migrating to ITK 4.0, Amoeba optimizer seems to stop only at the
>>> maximum iteration number, and do not take account of other stop conditions,
>>> like ParametersConvergenceTolerance or FunctionConvergenceTolerance.
>>> The optimizer is still converging on a good solution.
>>> An other thing that seems to be related, is that when I'm printing the
>>> registration progress,
>>> the metric value is shown as -1.#IND, so Not A Number. I get this value with
>>> the following code :
>>> 
>>>    itk::SingleValuedCostFunction::MeasureType Value;
>>> 
>>>    Value = optimizer->GetCachedValue();
>>> 
>>> 
>>>    if (Value!=Value){
>>>        std::cout<<  "ok";
>>>    }
>>>    if (count>=5) {
>>>        count=0;
>>>        std::cout<<  IterationNumber<<  "   ";
>>>        std::cout<<  Value<<  "   ";
>>>        std::cout<<  parameters<<  std::endl;
>>>    }
>>> 
>>> I've try to set Value as double, to print directly
>>> optimizer->GetCachedValue() but it's giving the same result.
>>> 
>>> Does someone have any idea of where it comes from ?
>>> 
>>> In my code, I also use OnePlusOneEvolutionaryOptimizer, and MI metric
>>> without these problems.
>>> 
>>> Thanks a lot !
>>> 
>>> Yann


More information about the Insight-users mailing list