[Insight-users] Some error happens : Failed to allocate memory for image

Luis Ibanez luis.ibanez at kitware.com
Sat Jan 11 12:15:38 EST 2014


Zhq,

It is useful to do the estimation of memory for all the components
of the pipeline.

Let's do this, following the FastMarchingImageFilter.cxx example:

Input Image 512*512*390 = 195 Mb  (assuming 16-bits pixel type),

    but the reader takes : 400Mb because it keeps a buffer internally.
    in the ImageIO class, something that we probably should fix..)

Smoothing filter:  will take  additional: 400 Mb

Gradient Magnitude ( with its internal helpers ) takes: 800Mb

Sigmoid (since used float pixel type) takes: 400Mb

...etc



A good way to do all this accounting is by using the class

              itk::MemoryProbesCollectorBase

as in

     itk::MemoryProbesCollectorBase mcollecter;

     mcollecter.Start("smoothing");
     smoothing->Update();
     mcollecter.Stop("smoothing");
     mcollecter.Report();


and then do this for every intermediate Update() call to a
filter in the pipeline (you will have to add such calls).

This will give you a summary such as:

reader        400296  = 400Mb
smoothing     799156  = 800Mb
gradient      798860  = 800Mb
sigmoid       399364  = 400Mb
fastMarching  541604  = 540Mb

by the time we count all the memory consumption,
it is:

all          3040580  =   3Gb


To this, one should add the memory allocations of any other
program running in your computer (including the OS).


Please find attached the example:
https://github.com/InsightSoftwareConsortium/ITK/blob/master/Examples/Segmentation/FastMarchingImageFilter.cxx

but, modified with calls to the MemoryProbes collector.

Introducing the memory probes in a similar way your code,
may help to track where the memory consumption is going.


As Jon pointed out, using the ReleaseDataFlagOn() will help,
by releasing intermediate memory as the pipeline progresses.

You may want to add the calls

reader->ReleaseDataFlagOn();
smoothing->ReleaseDataFlagOn();
gradient->ReleaseDataFlagOn();

...etc...



    Regards,


           Luis



On Fri, Jan 10, 2014 at 4:19 AM, Jon Haitz Legarreta <
jhlegarreta at vicomtech.org> wrote:

> Dear zhq,
> I'd dare to say that evein if your image fits into your memory, you may
> have multiple copies already in memory that prevent your last filter to
> have enough room for it to run.
>
> You may want to check the available meory before that step, or you may try
> releasing the upstream filters' allocated memory turning on the
> ReleaseDataFlag (ReleaseDataFlagOn).
>
> HTH,
> JON HAITZ
>
>
>
> On 10 January 2014 03:26, zhq <15891495523 at 126.com> wrote:
>
>> Dear all :
>>
>>         Using the FastMarchingImageFilter to segment a vessel , I meet a
>> error : Failed to allocate memory for image
>>
>>         I find the wrong place using try-catch :
>>  When the sentence : gradientMagnitude->Update(); is run , the error
>> happens !
>>         My computer's memory is 12G , and the volume data is :
>> 512*512*390  . I believe the memory is enough ! And the code has
>> successfully been run once using the other data .
>>         Could somebody give me some advices ? Thanks vary much in advance
>> !
>> zhq
>>
>>
>> 来自网易手机号码邮箱了解更多 <http://shouji.163.com>
>>
>> _____________________________________
>> Powered by www.kitware.com
>>
>> Visit other Kitware open-source projects at
>> http://www.kitware.com/opensource/opensource.html
>>
>> Kitware offers ITK Training Courses, for more information visit:
>> http://www.kitware.com/products/protraining.php
>>
>> Please keep messages on-topic and check the ITK FAQ at:
>> http://www.itk.org/Wiki/ITK_FAQ
>>
>> Follow this link to subscribe/unsubscribe:
>> http://www.itk.org/mailman/listinfo/insight-users
>>
>>
>
> _____________________________________
> Powered by www.kitware.com
>
> Visit other Kitware open-source projects at
> http://www.kitware.com/opensource/opensource.html
>
> Kitware offers ITK Training Courses, for more information visit:
> http://www.kitware.com/products/protraining.php
>
> Please keep messages on-topic and check the ITK FAQ at:
> http://www.itk.org/Wiki/ITK_FAQ
>
> Follow this link to subscribe/unsubscribe:
> http://www.itk.org/mailman/listinfo/insight-users
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.itk.org/pipermail/insight-users/attachments/20140111/7d140af7/attachment-0001.html>
-------------- next part --------------
# This is the root ITK CMakeLists file.
cmake_minimum_required(VERSION 2.4)
if(COMMAND CMAKE_POLICY)
  cmake_policy(SET CMP0003 NEW)
endif()


# This project is designed to be built outside the Insight source tree.
project(FastMarching)

# Find ITK.
find_package(ITK REQUIRED)
include(${ITK_USE_FILE})

add_executable(FastMarching FastMarching.cxx )
target_link_libraries(FastMarching ${ITK_LIBRARIES})

add_executable(Image3 Image3.cxx )
target_link_libraries(Image3 ${ITK_LIBRARIES})
-------------- next part --------------
A non-text attachment was scrubbed...
Name: FastMarching.cxx
Type: text/x-c++src
Size: 10434 bytes
Desc: not available
URL: <http://www.itk.org/pipermail/insight-users/attachments/20140111/7d140af7/attachment-0001.cxx>


More information about the Insight-users mailing list