如何从3D体数据中提取重叠的补丁并从补丁中重建输入形状?

Pytorch提供了torch.Tensor.unfold操作,可以链接到任意多个维度以提取重叠的补丁。我们如何逆转补丁提取操作,使得补丁可以组合回输入形状?

重点是具有1个通道(生物医学)的3D体数据图像。使用unfold可以提取补丁,如果这些补丁重叠,如何将它们组合起来?


回答:

为了提取(重叠)补丁并重建输入形状,我们可以使用torch.nn.functional.unfold和其逆操作torch.nn.functional.fold。这些方法只能处理4D张量或2D图像,但是您可以一次处理一个维度来使用这些方法。

几个注意事项:

  1. 这种方法需要使用来自pytorch的fold/unfold方法,不幸的是,我还没有在TF API中找到类似的方法。

  2. 我们从2D开始,然后是3D,然后是4D,以展示增量差异,您可以扩展到任意多个维度(可能编写一个循环而不是像我这样硬编码每个维度)

  3. 我们可以通过两种方式提取补丁,它们的输出是相同的。方法被称为extract_patches_Xdextract_patches_Xds,其中X是维度的数量。后者使用torch.Tensor.unfold(),代码行数更少。(输出是相同的,除了它不能使用膨胀)

  4. 方法extract_patches_Xdcombine_patches_Xd方法,组合器一步一步地逆转提取器的步骤。

  5. 代码行后面跟随一个注释,声明维度如(B, C, T, D, H, W)。以下是使用的符号:

    1. B:批量大小
    2. C:通道
    3. T:时间维度
    4. D:深度维度
    5. H:高度维度
    6. W:宽度维度
    7. x_dim_in:在提取方法中,这是维度x的输入像素数。在组合方法中,这是维度x的滑动窗口数量。
    8. x_dim_out:在提取方法中,这是维度x的滑动窗口数量。在组合方法中,这是维度x的输出像素数。
  6. 我有一个公开的笔记本可以尝试代码

  7. 我已经尝试了基本的2D、3D和4D张量,如下所示。然而,我的代码并非无懈可击,我希望在其他输入上测试时能得到反馈。

  8. get_dim_blocks()方法是pytorch文档网站上给出的函数,用于计算卷积层的输出形状。

  9. 请注意,如果您有重叠的补丁并且您将它们组合起来,重叠的元素将被求和。如果您想再次获得初始输入,有一种方法可以做到这一点。

    1. 使用torch.ones_like(patches_tensor)创建与补丁大小相似的全1张量。
    2. 将补丁组合成具有相同输出形状的完整图像。(这会为重叠元素创建一个计数器)。
    3. 用组合的全1张量除以组合的图像,这应该可以逆转任何元素的双重求和。

首先(2D):

可以直接使用torch.nn.functional.foldtorch.nn.functional.unfold方法。

...

输出(2D)

...

其次(3D):

现在变得有趣了:我们需要使用两个foldunfold,我们首先对D维度应用fold,并通过设置内核为1、填充为0、步长为1和膨胀为1来保持WH不变。然后我们查看张量并对HW维度进行折叠。展开操作以相反的顺序进行,首先是HW,然后是D

...

输出(3D)

(我不得不限制字符数,请查看笔记本

第三(4D)

我们在3D体数据中增加一个时间维度。我们从仅对T维度进行折叠开始,类似于3D版本,保持DHW不变。然后我们对D进行折叠,保持HW不变。最后我们对HW进行折叠。展开操作再次以相反的顺序进行。希望您现在已经注意到一个模式,并且您可以添加任意多个维度,并开始一个接一个地折叠。展开操作再次以相反的顺序进行。

...

输出(4D)

(我不得不限制字符数,请查看笔记本

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注