<p dir="ltr">Luigi, I assume you are workimg on release mode right?<br>
Would you be able to send the cpp file that you are compiling to test?</p>
<p dir="ltr">Matias</p>
<div class="gmail_quote">On Nov 18, 2015 7:53 AM, "Luigi Riba" <<a href="mailto:ribaluigi@gmail.com">ribaluigi@gmail.com</a>> wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><span style="font-size:12.8px">Dear all,</span><br></div><div><span style="font-size:12.8px"><br></span></div><div><span style="font-size:12.8px">I have tried your suggestions and I have simplified my code. Unfortunately, I still have some issues:</span></div><div><br></div><div><span style="font-size:12.8px">1. </span>I cannot read the two images as unsigned short. If I do like this, VisualStudio compiler returns:</div><div> Error<span style="white-space:pre-wrap">       </span>2<span style="white-space:pre-wrap">       </span>error C2440: 'initializing' : cannot convert from 'itk::Concept::Detail::UniqueType_bool<false>' to 'itk::Concept::Detail::UniqueType_bool<true>'<span style="white-space:pre-wrap">   </span>f:\libs\itk\modules\core\common\include\itkConceptChecking.h<span style="white-space:pre-wrap">    </span>796<span style="white-space:pre-wrap">     </span>1<span style="white-space:pre-wrap">       </span>affine3d</div><div><br></div><div>2. I have decided to read the images directly in float;</div><div><br></div><div>3. <span style="font-size:12.8px">I have set everything to float but I have noticed <b>no</b> memory usage differences between the "dobule" and "float" code. In particular, I have set:</span></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><span style="font-size:12.8px;white-space:pre-wrap"> </span><span style="font-size:12.8px">typedef float InternalComputationValueType;<br></span><span style="font-size:12.8px;white-space:pre-wrap">      </span><span style="font-size:12.8px">typedef itk::AffineTransform< InternalComputationValueType, Dimension> TransformType;<br></span><span style="font-size:12.8px;white-space:pre-wrap">      </span><span style="font-size:12.8px">typedef itk::RegularStepGradientDescentOptimizerv4<InternalComputationValueType> OptimizerType;<br></span><span style="font-size:12.8px;white-space:pre-wrap">    </span><span style="font-size:12.8px">typedef itk::MeanSquaresImageToImageMetricv4<ImageType, ImageType, ImageType, InternalComputationValueType>  MetricType;<br></span><span style="font-size:12.8px;white-space:pre-wrap">  </span><span style="font-size:12.8px">typedef itk::ImageRegistrationMethodv4<ImageType, ImageType, TransformType> RegistrationType;<br></span><span style="white-space:pre-wrap">       </span>typedef float CoordinateType;<br><span style="white-space:pre-wrap"> </span>typedef itk::LinearInterpolateImageFunction<ImageType, CoordinateType> InterpolationType;</blockquote><div><blockquote style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex" class="gmail_quote"></blockquote><blockquote style="margin:0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;border-right-width:1px;border-right-color:rgb(204,204,204);border-right-style:solid;padding-left:1ex;padding-right:1ex" class="gmail_quote"></blockquote><blockquote style="margin:0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;border-right-width:1px;border-right-color:rgb(204,204,204);border-right-style:solid;padding-left:1ex;padding-right:1ex" class="gmail_quote"></blockquote><blockquote style="margin:0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;border-right-width:1px;border-right-color:rgb(204,204,204);border-right-style:solid;padding-left:1ex;padding-right:1ex" class="gmail_quote"></blockquote><blockquote style="margin:0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;border-right-width:1px;border-right-color:rgb(204,204,204);border-right-style:solid;padding-left:1ex;padding-right:1ex" class="gmail_quote"></blockquote><blockquote style="margin:0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;border-right-width:1px;border-right-color:rgb(204,204,204);border-right-style:solid;padding-left:1ex;padding-right:1ex" class="gmail_quote"></blockquote></div><div><span style="font-size:12.8px"><br></span></div><div><span style="font-size:12.8px">RECAP:</span><br></div><div><span style="font-size:12.8px">1. I would like to reduce the memory usage of my registration code. In fact, I work with unsigned short, i.e. 16 bit grayscale images, ~1Gb each and memory usage gets high pretty soon (750MB images -> ~30GB total memory usage)</span></div><div><span style="font-size:12.8px">2. It has been suggested to set the algorithm to work with float instead of double;</span></div><div><span style="font-size:12.8px">3. How can I accomplish point 2.? </span></div><div><span style="font-size:12.8px">4. Is point 2. the only viable solution in order to reduce memory usage?</span></div><div><span style="font-size:12.8px">5  Is there a way to have a finer monitoring of memory usage. For the moment I am using itkMemoryProbe which just gives me the total amount of used memory.</span></div><div><span style="font-size:12.8px"><br></span></div><div><span style="font-size:12.8px">Thank you for your kind support,</span></div><div><span style="font-size:12.8px">Luigi</span></div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">2015-11-16 16:55 GMT+01:00 Luigi Riba <span dir="ltr"><<a href="mailto:ribaluigi@gmail.com" target="_blank">ribaluigi@gmail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Dear Dženan and Matias,<div><br></div><div>thank you very much for the help.</div><div><br></div><div>I'll test your suggestion and I'll post back the results for the community.</div><div><br></div><div>Best,</div><div><br></div><div>Luigi</div></div><div><div><div class="gmail_extra"><br><div class="gmail_quote">2015-11-16 16:53 GMT+01:00 Matias Montroull <span dir="ltr"><<a href="mailto:matimontg@gmail.com" target="_blank">matimontg@gmail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">That was my assumption Luigi</div><div><div><br><div class="gmail_quote"><div dir="ltr">El lun., 16 de nov. de 2015 a la(s) 12:30 p. m., Dženan Zukić <<a href="mailto:dzenanz@gmail.com" target="_blank">dzenanz@gmail.com</a>> escribió:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small">I believe Matias thought that your original pixel type was signed short.</div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small">So just use the images you read as unsigned short (set them as input to the registration), and don't make another copy of the images by casting them to float.</div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small">HTH</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Nov 16, 2015 at 10:17 AM, Luigi Riba <span dir="ltr"><<a href="mailto:ribaluigi@gmail.com" target="_blank">ribaluigi@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Dear Matias,<div><br></div><div>thank you very much for your quick reply. </div><div><br></div><div>Unfortunately, I didn't have time yet to test it. Anyhow, could you please tell me the rationale behind it?</div><div><br></div><div>In my code:</div><div><br></div><div><ol><li>I read two grayscale 16 bit .mhd images. To read them I define the IOPixelTyep as unsigned short;</li><li>I cast them to the "operational" type called PixelType as float </li><li>I define all the registration objects templated on float.</li></ol><div>Why should I cast my images to PixelType == signed short? </div><div><br></div><div>Thanks in advance for the support,</div><div>Luigi </div></div><div><br></div><div><br></div><div><br></div><div><br></div></div><div><div><div class="gmail_extra"><br><div class="gmail_quote">2015-11-10 15:45 GMT+01:00 Matias Montroull <span dir="ltr"><<a href="mailto:matimontg@gmail.com" target="_blank">matimontg@gmail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">try this:<div>typedef  signed short  PixelType;</div><div><br></div></div><div><div><br><div class="gmail_quote"><div dir="ltr">El mar., 10 de nov. de 2015 a la(s) 11:36 a. m., Luigi Riba <<a href="mailto:ribaluigi@gmail.com" target="_blank">ribaluigi@gmail.com</a>> escribió:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Dear Matt,<div><br></div><div>I have tried following your suggestion but, unfortunately, it didn't work out.</div><div><br></div><div>In particular:</div><div><ol><li>I read a pair of uint16 images;</li><li>I cast them to float pixel type via the CastImageFilter;</li><li>I change the TInternalComputationValueType for the metric, the optimizer, the transform and the registration doing something like:</li></ol></div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">const unsigned int Dimension = 3; </blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">typedef float PixelType;</blockquote></div><div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div>typedef unsigned short IOPixelType;</div></blockquote></div><div><div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">typedef itk::Image<IOPixelType, Dimension> IOImageType; </blockquote></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">typedef itk::Image<PixelType, Dimension> ImageType;</blockquote></div><div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">typedef itk::AffineTransform<float, Dimension > TransformType;</blockquote></div><div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">typedef itk::RegularStepGradientDescentOptimizerv4<float> OptimizerType;</blockquote></div><div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">typedef itk::MeanSquaresImageToImageMetricv4<ImageType, ImageType,ImageType,float> MetricType;</blockquote></div><div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">typedef itk::ImageRegistrationMethodv4<ImageType, ImageType, TransformType> RegistrationType;</blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">typedef itk::ResampleImageFilter<IOImageType, IOImageType, float,float> ResampleFilterType;</blockquote><div> </div></div></blockquote><div><br></div><div><div><br></div><div>I have put one memory probe before the registration procedure and one afterwards of it. In the "double" case and in the "float" case I've seen the same memory consumption.</div><div><br></div><div>Am I missing something? Are there other things I should change in my code?</div></div><div><br></div><div>Thanks again for the support,</div><div>Luigi</div><div><br></div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote"></div></div><div class="gmail_extra"><div class="gmail_quote">2015-11-09 17:23 GMT+01:00 Matt McCormick <span dir="ltr"><<a href="mailto:matt.mccormick@kitware.com" target="_blank">matt.mccormick@kitware.com</a>></span>:<br></div></div><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi Luigi,<br>
<br>
The type of optimizer should not have too large of an impact on memory<br>
consumption.  Using a gradient-free optimizer may help slightly, but<br>
try changing the pixel type of the input images or, if possible, the<br>
parameter type of the transformation, from double to float.<br>
<br>
HTH,<br>
Matt<br>
<div><div><br>
On Mon, Nov 9, 2015 at 10:24 AM, Luigi Riba <<a href="mailto:ribaluigi@gmail.com" target="_blank">ribaluigi@gmail.com</a>> wrote:<br>
> Dear all,<br>
><br>
> I am registering a couple of volumes with ITK 4 on windows 7 64 bit.<br>
><br>
> I wrote a code based on the affine transformation, with the mean square<br>
> error metric and the RegularStepGradientDescentOptimizerv4. Unfortunately,<br>
> the memory usage is pretty high.<br>
><br>
> I have checked memory consumption with the itkMemoryProbe and, after looking<br>
> around on previous mailing list messages I have decided to try with a<br>
> gradient free optimizer like the Nelder-Mead one.<br>
><br>
> So I have rewrote the code using the AmoebaOptimizerV4 and I have continued<br>
> monitoring the memory consumption via MemoryProbe. Unfortunately, it seems<br>
> that nothing has changed. Is this working as expected? If this is the case,<br>
> do you have any suggestion to gave me in order to reduce the memory<br>
> consumption of the code?<br>
><br>
> Thanks in advance for the help.<br>
><br>
> Best,<br>
><br>
> Luigi<br>
><br>
</div></div>> _______________________________________________<br>
> Community mailing list<br>
> <a href="mailto:Community@itk.org" target="_blank">Community@itk.org</a><br>
> <a href="http://public.kitware.com/mailman/listinfo/community" rel="noreferrer" target="_blank">http://public.kitware.com/mailman/listinfo/community</a><br>
><br>
</blockquote></div></div>
_______________________________________________<br>
Community mailing list<br>
<a href="mailto:Community@itk.org" target="_blank">Community@itk.org</a><br>
<a href="http://public.kitware.com/mailman/listinfo/community" rel="noreferrer" target="_blank">http://public.kitware.com/mailman/listinfo/community</a><br>
</blockquote></div></div></div><span><font color="#888888"><div dir="ltr">-- <br></div><div dir="ltr">Matias</div>
</font></span></blockquote></div><br></div>
</div></div><br>_______________________________________________<br>
Community mailing list<br>
<a href="mailto:Community@itk.org" target="_blank">Community@itk.org</a><br>
<a href="http://public.kitware.com/mailman/listinfo/community" rel="noreferrer" target="_blank">http://public.kitware.com/mailman/listinfo/community</a><br>
<br></blockquote></div><br></div>
</blockquote></div></div></div><span><font color="#888888"><div dir="ltr">-- <br></div><div dir="ltr">Matias</div>
</font></span></blockquote></div><br></div>
</div></div></blockquote></div><br></div>
</blockquote></div>