Python 构建从3D图像加载(未知数量)切片的PyTorch数据集的好方法是什么?
我正在尝试构建一个PyTorch数据集,该数据集返回形状为Python 构建从3D图像加载(未知数量)切片的PyTorch数据集的好方法是什么?,python,dataset,pytorch,dataloader,Python,Dataset,Pytorch,Dataloader,我正在尝试构建一个PyTorch数据集,该数据集返回形状为?x512x512的三维图像的21x512x512切片。我知道有多少图像,但我不知道每个图像中有多少个切片。因此,我会直观地让数据集的\uuu len\uuu()函数返回我拥有的图像总数。我可以事先从技术上检查所有图像的形状,但数据集可能会随着时间的推移而变化,因此我更喜欢可伸缩的软件解决方案 有了这个,我需要一些功能,将图像分割成片(上面提到的大小),并返回这些片,而不是整个图像。这也不是问题,我有一个函数可以做到这一点 问题来了。如果
?x512x512
的三维图像的21x512x512
切片。我知道有多少图像,但我不知道每个图像中有多少个切片。因此,我会直观地让数据集的\uuu len\uuu()
函数返回我拥有的图像总数。我可以事先从技术上检查所有图像的形状,但数据集可能会随着时间的推移而变化,因此我更喜欢可伸缩的软件解决方案
有了这个,我需要一些功能,将图像分割成片(上面提到的大小),并返回这些片,而不是整个图像。这也不是问题,我有一个函数可以做到这一点
问题来了。如果我在数据集的\uuu getitem\uuuu()
函数中添加此切片功能,那么每个图像只会获得一个切片,因为PyTorch数据加载器会认为存在len(数据集)
数据点,现在不再是这样了。但我也不能指定正确的样本数量,因为我事先不知道
我尝试了一些解决方案:
\uuuu getitem\uuuuu()
中返回一个生成器函数,该函数为每个图像生成切片。这不起作用,因为\uu getitem\uuu()
需要返回类型为列表
、元组
、张量
等的内容批次大小
,另外95个批次具有较少的每批次样本。解决这一问题需要进行一些丑陋的检查,以查看是否需要加载另一个图像,我再次希望将其隐藏在数据集中\uuu getitem\uuuuuu()
函数中产生for
循环。这与第1点的原因不同:无法在数据集中返回生成器简而言之,从PyTorch数据集中的3D图像中加载未知数量的切片的干净方法是什么?为什么不提前计算切片的数量?因为这是一个可能随时间变化的相当大的数据集。这并不是不可能做到的(并且在添加新数据时重做),但我更喜欢可扩展的软件解决方案。好的一点,我会更新这个问题。对我来说,这是一个很好的例子