【问题标题】:2D convolution along three orthogonals (axis) for 3D volumetric image3D 体积图像沿三个正交(轴)的 2D 卷积
【发布时间】:2021-05-29 10:40:59
【问题描述】:

由于 3D 卷积需要太多的计算成本,所以我更喜欢使用 2D 卷积。我的动机是使用 2D conv 处理体积图像来降低成本。

我想沿三个正交应用 2D 卷积以获得 3 个结果,每个结果都属于这些正交之一。更清楚地说,假设我有一个 3D 体积图像。我不想应用 3D conv,而是想同时使用 xy、xz、yz 轴的 2D conv。然后,我希望有 3 种不同的体积结果。每个结果代表三个不同的正交。

有没有办法做到这一点?感谢您的帮助。

【问题讨论】:

    标签: deep-learning conv-neural-network convolution medical-imaging 2d-3d-conversion


    【解决方案1】:

    您可以排列图像。 (一些框架如numpy 称其为transpose)。

    假设我们使用3 x 3 一个卷积核。

    # A batch of 16 3 channel images (channels first)
    a = tensor(shape=[16,3,1920,1080])
    
    # 2D conv will slide over a `1920 x 1080` image, kernel size is `3 x 3 x 3`
    a.shape is (16,3,1920,1080)
    
    # 2D conv will slide over a `3 x 1080` image, kernel size is `1920 x 3 x 3`
    a.permute(0,2,1,3)
    a.shape is (16,1920,3,1080)
    
    # 2D conv will slide over a `1920 x 3` image, kernel size is `1080 x 3 x 3`
    a.permute(0,3,2,1)
    a.shape is (16,1080,1920,3)
    

    【讨论】:

    • 如果我最初有 5 个元素的张量(批次、通道、深度、高度、宽度)怎么办?假设我的初始张量形状是:[1,1,5,192,192],那么我的 2d conv 参数的输入应该是什么?我将使用 PyTorch 框架 torch.nn.Conv2d(in_channels, out_channels, kernel_size,...)
    • 大体思路是一样的,只需要适应另一个维度,四次置换。但是,在 PyTorch 的文档中指出 Conv2d 输入形状为 (N,C,H,W) 的张量,所以我认为它不能原生处理您的额外维度。
    • 您最初的反应不好,谢谢。但我对形状感到困惑。 1)您的初始高度宽度为 32x32。那么它是怎么变成1080和1920的。是什么原因造成的?
    • 哦!这是一个错误,我的错。我最初尝试使用32 x 32,但中途将其更改为1920 x 1080,以获得不同大小的轴。它应该以a = tensor(shape=[16,3,1920,1080]) 开头。我会编辑我的帖子!
    • 好吧,我会尽力告诉你我的结果。感谢您的宝贵时间。
    猜你喜欢
    • 1970-01-01
    • 2020-05-26
    • 2011-07-10
    • 2016-12-09
    • 2016-07-02
    • 2012-05-25
    • 2021-11-12
    • 1970-01-01
    • 2019-01-20
    相关资源
    最近更新 更多