ludwig image size issue with inmemory = false

pexxcrt2  于 4个月前  发布在  其他
关注(0)|答案(3)|浏览(71)

当输入特征类型为image,inmemory = false时,期望图像能够及时加载。然而,意外的是,图像被保存到hdf5文件中,当大量大图像数量需要训练时,这个文件永远不会结束。是否有计划修复或发布这些特征的路线图?
谢谢

wwwo4jvm

wwwo4jvm1#

对不起,我很难理解用来描述问题的语言,你能尝试重新表述一下吗?

qlfbtfca

qlfbtfca2#

我正在寻找一个可以处理大于400x400像素的图像分类任务。输入特征有一个参数in_memory,文档中提到:

in_memory (默认值:true):定义在训练过程中图像数据集是否驻留在内存中,还是从磁盘动态获取(对于大型数据集很有用)。在后一种情况下,每个训练迭代都会从磁盘获取一个训练批次的输入图像。

ludwig/features/image_feature.py第105行显示,当in_memory=false时,数据将写入磁盘上的hdf5文件。这将永远进行,即使使用resize,并且根据输入有限制。动态获取的过程不清楚。对于大型图像的训练,推荐的方法是什么?

data_train_csv应该在所有迭代中都有,这是正确的吗?

我正在使用integration_tests中的experiment函数。

input_features_template = Template(
"[{type: image, name: random_image, width: 299, in_memory: false,"
" height: 299, num_channels: 1, encoder: ${encoder},"
" resnet_size: 8, destination_folder: ${folder}}]")
experiment(
model_definition,
model_definition_file=None,
data_csv=None,
data_train_csv=None,
data_validation_csv=None,
data_test_csv=None,
data_hdf5=None,
data_train_hdf5=None,
data_validation_hdf5=None,
data_test_hdf5=None,
train_set_metadata_json=None,
experiment_name='experiment',
model_name='run',
model_load_path=None,
model_resume_path=None,
skip_save_progress_weights=False,
skip_save_processed_input=False,
skip_save_unprocessed_output=False,
output_directory='results',
gpus=None,
gpu_fraction=1.0,
use_horovod=False,
random_seed=default_random_seed,
debug=False,
**kwargs)

mhd8tkvw

mhd8tkvw3#

Ludwig将预处理的输出保存在hdf5文件中。你可以跳过保存它,有一个特定的参数--skip_savw_processed_input可以实现这一点,但是这样你就无法从磁盘中读取数据,因为in_memory参数假设有一个hdf5文件可以读取。预处理图像是一项耗时的任务,在训练之前进行一次预处理是一种常见的做法,否则你每次训练都需要进行预处理,这会使训练速度非常慢。

最后,根据任务的不同,400x400的图像可能非常大且不太有用,可以考虑使用调整大小的功能。

目前,预处理图像和文本(目前预处理中最耗时的两个部分)的过程是由单个线程执行的。我们已经在路线图上添加了一个并行实现,这将使创建hdf5文件的速度大大提高。但请再次考虑,如果你不提前支付这个成本,那么在训练过程中你会支付更多的费用。

@ydudin3,你能调查一下是否有一个in_memory=False可以直接从csv文件中工作,而不需要中间的hdf5吗?我认为这是一个功能请求。

相关问题