当一个数据集很大时,你如何训练所有图像?

数据挖掘 数据集 美国有线电视新闻网 训练
2022-02-26 23:53:16

我正在使用 Python 3.7.7。

我正在尝试使用来自 [BraTS 2019 数据集][1] 的 SimplyITK 和 Numpy 加载大量 NIFTI 图像。

这是我用来将图像加载到 numpy 数组中的代码。

import SimpleITK as sitk


def read_nifti_images(images_full_path):
    """ 
    Read nifti files from a gziped file.
  
    Read nifti files from a gziped file using SimpleITK library.
  
    Parameters: 
    images_full_path (string): Full path to gziped file including file name.
  
    Returns: 
    SimpleITK.SimpleITK.Image, numpy array: images read as image, images read as numpy array 
  
    """
    # Reads images using SimpleITK.
    images = sitk.ReadImage(images_full_path)
    # Get a numpy array from a SimpleITK Image.
    images_array = sitk.GetArrayFromImage(images)
    
    # More info about SimpleITK images: http://simpleitk.github.io/SimpleITK-Notebooks/01_Image_Basics.html
    
    return images, images_array

此代码适用于最小的数据集,但在这里我尝试加载 518 个 nii.gz 文件,每个文件包含 155 个图像。

要运行代码,我在 Windows 7 上使用 PyCharm 最新版本。

如果由于内存限制,所有图像都不能在内存中,你如何训练所有图像?

2个回答

当你使用 Keras 时,你可以使用生成器功能,它本质上是批量加载图像。

有关如何使用(和预测)数据生成器的讨论,请参阅此帖子:https ://stackoverflow.com/questions/52270177/how-to-use-predict-generator-on-new-images-keras/55991598 #55991598

有关使用预训练模型并结合数据生成器函数的二进制图像分类的完整实现,请参阅此代码片段:https ://github.com/Bixi81/Python-ml/blob/master/keras_pretrained_imagerec_binaryclass.py

可以在 Keras 文档中找到更多详细信息:https ://keras.io/api/preprocessing/image/

几个选项:

  1. 在云服务上租用更大的计算机。
  2. 迁移到分布式计算框架(例如 Spark)。
  3. 使用仅加载所需数据的数据加载功能。

选项#3 是最简单的。大多数训练不需要同时存储内存中的所有数据。

Dask可用于这种类型的图像加载