[ITK] Determinism & Registration v4

Lowekamp, Bradley (NIH/NLM/LHC) [C] blowekamp at mail.nih.gov
Wed Mar 15 13:04:03 EDT 2017


Hi,

You approach looks reasonable, but you must do the testing and experimentation to verify the behavior meets your requirements.

Brad

> On Mar 15, 2017, at 9:33 AM, Timothee Evain <tevain at telecom-paristech.fr> wrote:
> 
> @Dženan
> It was the 4.10.0! I guess that said commits are posterior to this release.
> 
> @Brad
> Many thanks for this complete answer, it's a bit more clear for me now.
> 
> So, to sum up, the way to get deterministic behavior is to:
> -get the 4.11 release (or there are some other useful commits since the tag?)
> -manually set the seed for pseudo-random number generation
> -run on single-threaded mode
> 
> That's it ?
> 
> Tim
> 
> ----- Mail original -----
> De: "Bradley Lowekamp (NIH/NLM/LHC) [C]" <blowekamp at mail.nih.gov>
> À: "Timothee Evain" <tevain at telecom-paristech.fr>
> Cc: community at itk.org
> Envoyé: Mercredi 15 Mars 2017 14:05:54
> Objet: Re: [ITK] Determinism & Registration v4
> 
> Hello,
> 
>> Is it possible to get a determinist pipeline ? 
> 
> Yes. There are two known sources of non-determinism. The first is where pseudo-random number generation is used and the second can be more subtle with multi-threading and non-commutative floating point operations.
> 
> With the recent 4.11 release there has been significant improvements in the available usage of seed for pseudo-random number generation. With the 4.11 release the seeds are now initialized with the wall-clock, which would give non-deterministic behavior. Additionally, methods were added to registration components which used the MersenneTwisterRandomVariateGenerator fro pseudo-random number generation to allow manually setting the seed for deterministic behavior.
> 
> Specifically, in the ImageRegistrationMethodv4 a seed was exposed for sampling for the metric[1]. This is used for both the REGULAR and RANDOM sampling[2].
> 
> Also, there is some usage of the pseudo-random number generation for the sampling certain cases. Recently the method used for affine transforms changed to be deterministic [3].
> 
> Lastly regarding multi-threading non-determinism, just using one thread is the simple work around. But there is also an experimental method SetFloaringPointCorrectionResolution which may help [4] determinism and portability.
> 
> HTH,
> Brad
> 
> 
> [1] https://itk.org/Doxygen/html/classitk_1_1ImageRegistrationMethodv4.html#ab1ae25c0b7ef720a7743c3c828eeca6c
> [2] https://github.com/InsightSoftwareConsortium/ITK/blob/1b666d295bdb39ba174b381f20c91df4ecb00849/Modules/Registration/RegistrationMethodsv4/include/itkImageRegistrationMethodv4.hxx#L954-L1032
> [3] https://github.com/InsightSoftwareConsortium/ITK/commit/99a7ac8f3ab88cdc508084e4921f0f4c9678468b
> [4] https://itk.org/Doxygen/html/classitk_1_1ImageToImageMetricv4.html#a341ca404fc872698f3225e3e8361149b
> 
>> On Mar 15, 2017, at 5:54 AM, Timothee Evain <tevain at telecom-paristech.fr> wrote:
>> 
>> Hi everyone,
>> 
>> A small question about the registration v4 framework:
>> Is it possible to get a determinist pipeline ? 
>> I use the Mattes mutual information combined with the Regular step gradient descent and my problem is that each run produce a different parameter set.
>> The deviation is really small, but I expected to see same results with same inputs. 
>> I was testing with the REGULAR sampling strategy at first, but there is a random perturbation of the point picking in the code, so I tried with dense sampling, but here again, the results are varying. 
>> Is that an expected behavior ? 
>> 
>> Tim
>> _______________________________________________
>> Community mailing list
>> Community at itk.org
>> http://public.kitware.com/mailman/listinfo/community
> 



More information about the Community mailing list