RuntimeError: stack expects each tensor to be equal size

在调试densenet进行分类任务的代码时,在图像预处理的过程中遇到下列错误:
RuntimeError: stack expects each tensor to be equal size, but got [640, 640] at entry 0 and [560, 560] at entry 2
意思是我加载的张量大小不一致。
经过查找发现应该是我在加载图像时的预处理过程中出现了问题。
以下是训练数据预处理的实例化部分。

train_transform = Compose(
        [
            LoadImaged(keys=keys),
            AddChanneld(keys=keys),
            CropForegroundd(keys=keys[:-1], source_key="tumor"),
            ScaleIntensityd(keys=keys[:-1]),
            # # Orientationd(keys=keys[:-1], axcodes="RAI"),
            Resized(keys=keys[:-1], spatial_size=(64, 64), mode='bilinear'),
            ConcatItemsd(keys=keys[:-1], name="image"),
            RandGaussianNoised(keys=["image"], std=0.01, prob=0.15),
            RandFlipd(keys=["image"], prob=0.5),  # , spatial_axis=[0, 1]
            RandAffined(keys=["image"], mode='bilinear', prob=1.0, spatial_size=[64, 64],    # 这里的3是因为不知道三个模态的图像拼接之后的尺寸如何,因此先使用
                        rotate_range=(0, 0, np.pi / 15), scale_range=(0.1, 0.1)),
            ToTensord(keys=keys),
        ]

    )

我的keys为[“T2_img”, “DWI_img”, “ADC_img”, “tumor”]
报错显示加载之后的tensor存在尺寸 [640, 640]和 [560, 560],这是我原图像的尺寸,那就说明我的裁剪步骤或者resize步骤很可能出现了问题。最后经过筛选发现,是我的resize步骤出现了问题,我在resize那一步,选择的keys是keys=keys[:-1],即不包含"tumor",所以在resize的时候我的tumor图像仍然会保持原图大小,而这一个字典中包含的数据在载入的时候仍然是一个整体,这个整体的各个维度的尺寸会自动的扩展为其中所有对象相应尺寸中最大的一个,所以我加载后的数据仍然会是原图大小,进行以下改正:

 train_transform = Compose(
        [
            LoadImaged(keys=keys),
            AddChanneld(keys=keys),
            CropForegroundd(keys=keys[:-1], source_key="tumor"),
            ScaleIntensityd(keys=keys[:-1]),
            # # Orientationd(keys=keys[:-1], axcodes="RAI"),
            Resized(keys=keys, spatial_size=(64, 64), mode='bilinear'),  # 将[:-1]去掉
            ConcatItemsd(keys=keys[:-1], name="image"),
            RandGaussianNoised(keys=["image"], std=0.01, prob=0.15),
            RandFlipd(keys=["image"], prob=0.5),  # , spatial_axis=[0, 1]
            RandAffined(keys=["image"], mode='bilinear', prob=1.0, spatial_size=[64, 64],    # 这里的3是因为不知道三个模态的图像拼接之后的尺寸如何,因此先使用
                        rotate_range=(0, 0, np.pi / 15), scale_range=(0.1, 0.1)),
            ToTensord(keys=keys),
        ]

    )

运行成功!

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值