目前,我面临的问题是如何提高点云对象检测算法的训练速度/效率。
输入数据为8000,100,9 float32张量,每个样本的大小约为27 is。在批处理规模为5的情况下,数据加载成为训练的瓶颈,因为大多数情况下,数据到达前GPU的化率为0%。
我尝试了以下方法来提高数据加载速度。
.map API中使用num_parallel_calls,并使用多线程读取这个大张量。问题是.map封装了一个受全局解释器锁约束的py_fun,因此多线程并不能改善I/O、tf.Dataset、.interleave、API。由于它也是基于多线程的,所以它有与2相同的问题。tf.convert_to_tensor().测量的数据需要很长的时间
任何如何向前推进的建议都将是有益的。谢谢!
跟进评论
发布于 2020-06-03 17:52:03
一些想法:
TFRecords,您可以并行读取它们,这就是设计它们的目的。然后,您将能够使用num_parallel_calls和interleave,因为这样您就不必包装py_func。.map不必包装.py_func,例如可以使用tf.keras.utils.get_file。这样,您还可以避免使用py_func并有效地使用num_parallel_calls。我仍然推荐使用TFRecords,它们是为这个用例设计的。tf.Dataset API的.cache函数。也许您可以尝试加载数据的随机子集,在此基础上训练多个eopchs,同时获取数据的另一个子集(使用tf.prefetch),然后训练多个时代,等等。这个想法可能会影响性能,但在您的情况下可能会奏效。。
https://stackoverflow.com/questions/62178275
复制相似问题