Pytorch Conv3D尺寸不小于’;NIFTI数据是否有意义?

Pytorch Conv3D尺寸不小于’;NIFTI数据是否有意义?,pytorch,conv-neural-network,medical,nifti,niftynet,Pytorch,Conv Neural Network,Medical,Nifti,Niftynet,因此,我正在使用.nii(NIFTI1格式)为医学图像编写自定义数据集,但存在一个混乱 My dataloader返回形状torch.Size(1,1256256,51)。但是NIFTI体积使用解剖轴,不同的坐标系,因此排列轴没有任何意义,我通常会使用由2D图像组成的体积,每个图像单独存储在本地驱动器中,带有51个切片图像(或深度),因为Conv3D遵循惯例(N,C,D,H,W)。 因此,torch.Size(1,1256256,51)(通常51是深度)不符合约定(N,C,D,H,W),但我不应

因此,我正在使用.nii(NIFTI1格式)为医学图像编写自定义数据集,但存在一个混乱

My dataloader返回形状
torch.Size(1,1256256,51)
。但是NIFTI体积使用解剖轴,不同的坐标系,因此排列轴没有任何意义,我通常会使用由2D图像组成的体积,每个图像单独存储在本地驱动器中,带有51个切片图像(或深度),因为Conv3D遵循惯例
(N,C,D,H,W)。


因此,
torch.Size(1,1256256,51)
(通常51是深度)不符合约定
(N,C,D,H,W)
,但我不应该排列轴,因为数据使用完全不同的坐标系?

在pytorch 3d卷积层中,进行卷积的3个维度的命名并不重要(例如,与高度相比,该层实际上没有对深度进行特殊处理)。所有差异都来自内核大小参数(如果使用该参数,还包括填充)。如果您排列维度并相应地排列内核大小参数,则不会发生任何变化。因此,您可以使用例如
x.permute(0,1,4,2,3)
来排列输入的维度,或者继续使用初始张量,深度作为最后一个维度

只是想澄清一下-如果您想在DxHxW图像上使用
kernel\u size=(2,10,10)
,现在您可以在HxWxD图像上使用
kernel\u size=(10,10,2)
。如果您想让所有代码显式地假设维度顺序始终是D,H,W,那么您可以使用
x.permute创建具有置换维度的张量(0,1,4,2,3)


如果我误解了您的问题,请告诉我。

不太清楚您所说的“完全不同的坐标系”是什么意思。你能详细说明问题是什么吗?也不清楚你的意图是什么:你有一个预先训练好的模型,你想应用到新数据上,它与模型训练的内容不同吗?或者你想从头训练一个新模型吗?我想从头训练一个新模型。因为我的模型使用卷积层,所以遵循(N,C,D,H,W)的约定,但从数据加载器返回的形状不同(N,C,W,H,D)…但由于数据是NIFTI体积,我认为我不应该更改轴,因为数据遵循解剖坐标系。现有数据的具体问题是什么?它有3维,正如您希望的三维卷积。我缺少什么?我应该保持轴的原样吗?还是应该将其置换为(n,c,d,h,w)来自(n,c,w,h,d)?请考虑接受答案(除了回答)(在答案的左边按一个复选标记)。