File load error: not enough storage available with 1.7TB storage free
File load error: not enough storage available with 1.7TB storage free
我正在使用以下代码将我的文件以 NiFTI 格式加载到 Python。
import nibabel as nib
img_arr = []
for i in range(len(datadir)):
img = nib.load(datadir[i])
img_data = img.get_fdata()
img_arr.append(img_data)
img.uncache()
少量图片工作正常,但如果我想加载更多图片,我会收到以下错误:
OSError Traceback (most recent call last)
<ipython-input-55-f982811019c9> in <module>()
10 #img = nilearn.image.smooth_img(datadir[i],fwhm = 3) #Smoothing filter for preprocessing (necessary?)
11 img = nib.load(datadir[i])
---> 12 img_data = img.get_fdata()
13 img_arr.append(img_data)
14 img.uncache()
~\AppData\Roaming\Python\Python36\site-packages\nibabel\dataobj_images.py in get_fdata(self, caching, dtype)
346 if self._fdata_cache.dtype.type == dtype.type:
347 return self._fdata_cache
--> 348 data = np.asanyarray(self._dataobj).astype(dtype, copy=False)
349 if caching == 'fill':
350 self._fdata_cache = data
~\AppData\Roaming\Python\Python36\site-packages\numpy\core\_asarray.py in asanyarray(a, dtype, order)
136
137 """
--> 138 return array(a, dtype, copy=False, order=order, subok=True)
139
140
~\AppData\Roaming\Python\Python36\site-packages\nibabel\arrayproxy.py in __array__(self)
353 def __array__(self):
354 # Read array and scale
--> 355 raw_data = self.get_unscaled()
356 return apply_read_scaling(raw_data, self._slope, self._inter)
357
~\AppData\Roaming\Python\Python36\site-packages\nibabel\arrayproxy.py in get_unscaled(self)
348 offset=self._offset,
349 order=self.order,
--> 350 mmap=self._mmap)
351 return raw_data
352
~\AppData\Roaming\Python\Python36\site-packages\nibabel\volumeutils.py in array_from_file(shape, in_dtype, infile, offset, order, mmap)
507 shape=shape,
508 order=order,
--> 509 offset=offset)
510 # The error raised by memmap, for different file types, has
511 # changed in different incarnations of the numpy routine
~\AppData\Roaming\Python\Python36\site-packages\numpy\core\memmap.py in __new__(subtype, filename, dtype, mode, offset, shape, order)
262 bytes -= start
263 array_offset = offset - start
--> 264 mm = mmap.mmap(fid.fileno(), bytes, access=acc, offset=start)
265
266 self = ndarray.__new__(subtype, shape, dtype=descr, buffer=mm,
OSError: [WinError 8] Not enough storage is available to process this command
我认为 img.uncache() 会从内存中删除图像,这样它就不会占用太多存储空间,但仍然能够使用图像数组。将此位添加到代码中并没有改变任何东西。
有谁知道我能帮上什么忙吗?我正在使用的计算机有 24 个核心 2.6 GHz CPU,内存超过 52 GB,工作目录有超过 1.7 TB 的可用存储空间。我正在尝试从 ADNI 数据库加载大约 1500 张 MRI 图像。
非常感谢任何建议。
此错误不是因为 1.7TB
硬盘驱动器 已满而引起的,这是因为您 运行 超出了 内存,又名RAM。 It's going to be important to understand how those two things differ。
uncache()
不会 完全从内存中删除项目,如记录 here,但 link 还包含更多内存节省技巧.
如果你想从内存中完全删除一个对象,你可以使用Garbage Collector interface,像这样:
import nibabel as nib
import gc
img_arr = []
for i in range(len(datadir)):
img = nib.load(datadir[i])
img_data = img.get_fdata()
img_arr.append(img_data)
img.uncache()
# Delete the img object and free the memory
del img
gc.collect()
这应该有助于减少您使用的内存量。
How to fix "not enough storage available.."?
尝试执行以下步骤:
同时按下键盘上的Windows+R键,然后在运行window中输入Regedit.exe,点击好的。
然后展开HKEY_LOCAL_MACHINE,然后是SYSTEM,然后是CurrentControlSet,然后是services,然后是LanmanServer,然后是Parameters。
找到IRPStackSize(如果找到跳到第5步),如果不存在则右击Window选择New > Dword Value (32)
现在在名称下输入 IRPStackSize,然后按回车键。
右键单击 IRPStackSize 并单击“修改”,然后设置任何大于 15 但小于 50 的值并单击“确定”
重新启动系统并尝试重复发生错误时的相同操作。
或:
将以下注册表项 HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\LargeSystemCache 设置为值“1”
设置以下注册表
HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters\Size 为值“3”
另一种在 "nibabel" 中节省内存的方法:
除了 uncache() 方法还有其他节省内存的方法,您可以使用:
我正在使用以下代码将我的文件以 NiFTI 格式加载到 Python。
import nibabel as nib
img_arr = []
for i in range(len(datadir)):
img = nib.load(datadir[i])
img_data = img.get_fdata()
img_arr.append(img_data)
img.uncache()
少量图片工作正常,但如果我想加载更多图片,我会收到以下错误:
OSError Traceback (most recent call last)
<ipython-input-55-f982811019c9> in <module>()
10 #img = nilearn.image.smooth_img(datadir[i],fwhm = 3) #Smoothing filter for preprocessing (necessary?)
11 img = nib.load(datadir[i])
---> 12 img_data = img.get_fdata()
13 img_arr.append(img_data)
14 img.uncache()
~\AppData\Roaming\Python\Python36\site-packages\nibabel\dataobj_images.py in get_fdata(self, caching, dtype)
346 if self._fdata_cache.dtype.type == dtype.type:
347 return self._fdata_cache
--> 348 data = np.asanyarray(self._dataobj).astype(dtype, copy=False)
349 if caching == 'fill':
350 self._fdata_cache = data
~\AppData\Roaming\Python\Python36\site-packages\numpy\core\_asarray.py in asanyarray(a, dtype, order)
136
137 """
--> 138 return array(a, dtype, copy=False, order=order, subok=True)
139
140
~\AppData\Roaming\Python\Python36\site-packages\nibabel\arrayproxy.py in __array__(self)
353 def __array__(self):
354 # Read array and scale
--> 355 raw_data = self.get_unscaled()
356 return apply_read_scaling(raw_data, self._slope, self._inter)
357
~\AppData\Roaming\Python\Python36\site-packages\nibabel\arrayproxy.py in get_unscaled(self)
348 offset=self._offset,
349 order=self.order,
--> 350 mmap=self._mmap)
351 return raw_data
352
~\AppData\Roaming\Python\Python36\site-packages\nibabel\volumeutils.py in array_from_file(shape, in_dtype, infile, offset, order, mmap)
507 shape=shape,
508 order=order,
--> 509 offset=offset)
510 # The error raised by memmap, for different file types, has
511 # changed in different incarnations of the numpy routine
~\AppData\Roaming\Python\Python36\site-packages\numpy\core\memmap.py in __new__(subtype, filename, dtype, mode, offset, shape, order)
262 bytes -= start
263 array_offset = offset - start
--> 264 mm = mmap.mmap(fid.fileno(), bytes, access=acc, offset=start)
265
266 self = ndarray.__new__(subtype, shape, dtype=descr, buffer=mm,
OSError: [WinError 8] Not enough storage is available to process this command
我认为 img.uncache() 会从内存中删除图像,这样它就不会占用太多存储空间,但仍然能够使用图像数组。将此位添加到代码中并没有改变任何东西。
有谁知道我能帮上什么忙吗?我正在使用的计算机有 24 个核心 2.6 GHz CPU,内存超过 52 GB,工作目录有超过 1.7 TB 的可用存储空间。我正在尝试从 ADNI 数据库加载大约 1500 张 MRI 图像。
非常感谢任何建议。
此错误不是因为 1.7TB
硬盘驱动器 已满而引起的,这是因为您 运行 超出了 内存,又名RAM。 It's going to be important to understand how those two things differ。
uncache()
不会 完全从内存中删除项目,如记录 here,但 link 还包含更多内存节省技巧.
如果你想从内存中完全删除一个对象,你可以使用Garbage Collector interface,像这样:
import nibabel as nib
import gc
img_arr = []
for i in range(len(datadir)):
img = nib.load(datadir[i])
img_data = img.get_fdata()
img_arr.append(img_data)
img.uncache()
# Delete the img object and free the memory
del img
gc.collect()
这应该有助于减少您使用的内存量。
How to fix "not enough storage available.."?
尝试执行以下步骤:
同时按下键盘上的Windows+R键,然后在运行window中输入Regedit.exe,点击好的。
然后展开HKEY_LOCAL_MACHINE,然后是SYSTEM,然后是CurrentControlSet,然后是services,然后是LanmanServer,然后是Parameters。
找到IRPStackSize(如果找到跳到第5步),如果不存在则右击Window选择New > Dword Value (32)
现在在名称下输入 IRPStackSize,然后按回车键。
右键单击 IRPStackSize 并单击“修改”,然后设置任何大于 15 但小于 50 的值并单击“确定”
重新启动系统并尝试重复发生错误时的相同操作。
或:
将以下注册表项 HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\LargeSystemCache 设置为值“1”
设置以下注册表 HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters\Size 为值“3”
另一种在 "nibabel" 中节省内存的方法:
除了 uncache() 方法还有其他节省内存的方法,您可以使用: