考虑创建从高分辨率图像目录中采样随机小图像块的数据集的问题.Tensorflow数据集API通过构建图像名称数据集,对其进行混洗,将其映射到加载的图像,然后映射到随机裁剪的补丁,可以非常简单地实现此目的.
然而,这种天真的实现效率非常低,因为将加载和裁剪单独的高分辨率图像以生成每个补丁.理想情况下,图像可以加载一次并重新使用以生成许多补丁.
之前讨论过的一种简单方法是从图像生成多个补丁并将其展平.然而,这有太多偏差数据的不幸影响.我们希望每个培训批次都来自不同的图像.
理想情况下,我想要的是一个"随机缓存过滤器"转换,它采用底层数据集并将其N个元素缓存到内存中.它的迭代器将从缓存中返回一个随机元素.此外,使用预定义的频率,它将使用基础数据集中的新元素替换缓存中的随机元素.该过滤器将允许更快的数据访问,代价是更少的随机化和更高的内存消耗.
有这样的功能吗?
如果不是,它应该实现为新的数据集转换还是仅仅是新的迭代器?似乎只需要一个新的迭代器.有关如何创建新数据集迭代器的任何指针,理想情况下是在C++中?