当输入特征类型为image,inmemory = false时,期望图像能够及时加载。然而,意外的是,图像被保存到hdf5文件中,当大量大图像数量需要训练时,这个文件永远不会结束。是否有计划修复或发布这些特征的路线图?谢谢
wwwo4jvm1#
对不起,我很难理解用来描述问题的语言,你能尝试重新表述一下吗?
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)
mhd8tkvw3#
Ludwig将预处理的输出保存在hdf5文件中。你可以跳过保存它,有一个特定的参数--skip_savw_processed_input可以实现这一点,但是这样你就无法从磁盘中读取数据,因为in_memory参数假设有一个hdf5文件可以读取。预处理图像是一项耗时的任务,在训练之前进行一次预处理是一种常见的做法,否则你每次训练都需要进行预处理,这会使训练速度非常慢。
--skip_savw_processed_input
in_memory
最后,根据任务的不同,400x400的图像可能非常大且不太有用,可以考虑使用调整大小的功能。
目前,预处理图像和文本(目前预处理中最耗时的两个部分)的过程是由单个线程执行的。我们已经在路线图上添加了一个并行实现,这将使创建hdf5文件的速度大大提高。但请再次考虑,如果你不提前支付这个成本,那么在训练过程中你会支付更多的费用。
@ydudin3,你能调查一下是否有一个in_memory=False可以直接从csv文件中工作,而不需要中间的hdf5吗?我认为这是一个功能请求。
in_memory=False
3条答案
按热度按时间wwwo4jvm1#
对不起,我很难理解用来描述问题的语言,你能尝试重新表述一下吗?
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)
mhd8tkvw3#
Ludwig将预处理的输出保存在hdf5文件中。你可以跳过保存它,有一个特定的参数
--skip_savw_processed_input
可以实现这一点,但是这样你就无法从磁盘中读取数据,因为in_memory
参数假设有一个hdf5文件可以读取。预处理图像是一项耗时的任务,在训练之前进行一次预处理是一种常见的做法,否则你每次训练都需要进行预处理,这会使训练速度非常慢。最后,根据任务的不同,400x400的图像可能非常大且不太有用,可以考虑使用调整大小的功能。
目前,预处理图像和文本(目前预处理中最耗时的两个部分)的过程是由单个线程执行的。我们已经在路线图上添加了一个并行实现,这将使创建hdf5文件的速度大大提高。但请再次考虑,如果你不提前支付这个成本,那么在训练过程中你会支付更多的费用。
@ydudin3,你能调查一下是否有一个
in_memory=False
可以直接从csv文件中工作,而不需要中间的hdf5吗?我认为这是一个功能请求。