【问题标题】:How can I do the centercrop of 3D volumes inside the network model with pytorch如何使用 pytorch 在网络模型中进行 3D 体积的中心裁剪
【发布时间】:2019-08-15 22:55:31
【问题描述】:

在keras 中,有Cropping3D 层用于在神经网络内部对 3D 体积的张量进行中心裁剪。但是,我在 pytorch 中没有找到类似的东西,尽管他们有 torchvision.transforms.CenterCrop(size) 用于 2D 图像。

如何在网络内进行裁剪?否则我需要在预处理中进行,这是出于特定原因我最不想做的事情。

我是否需要编写自定义层,例如沿每个轴对输入张量进行切片?希望能对此有所启发

【问题讨论】:

    标签: python 3d conv-neural-network pytorch crop


    【解决方案1】:

    在 PyTorch 中,您不一定需要为所有内容编写层,通常您可以在前向传递期间直接做您想做的事情。在需要计算梯度的火炬张量上操作时需要牢记的基本规则是

    1. 不要将 torch 张量转换为其他类型进行计算(例如,使用 torch.sum 而不是转换为 numpy 并使用 numpy.sum)。
    2. 不要执行就地操作(例如,更改张量的一个元素或使用就地运算符,因此请使用 x = x + ... 而不是 x += ...)。

    也就是说,你可以只使用切片,也许它看起来像这样

    def forward(self, x):
        ...
        x = self.conv3(x)
        x = x[:, :, 5:20, 5:20]    # crop out part of the feature map
        x = self.relu3(x)
        ...
    

    【讨论】:

    • 谢谢!我将测试 tmr 然后接受答案。顺便说一句,我对 pytorch 中的 inplace 操作有点困惑。当我使用self.relu = nn.ReLU(inplace=True) 和self.dropout = nn.Dropout(inpalce=True) 时会不会有问题,因为inplace 在这种情况下也会出现多次。
    • 那些是在 pytorch API 中专门实现的,所以应该没问题。该 api 竭尽全力确保您不会搞砸,所以如果事情运行没有错误,那么您应该没问题。这在on the pytorch website有更详细的描述。
    猜你喜欢
    • 2019-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-10
    • 2015-12-26
    • 1970-01-01
    • 2023-01-28
    • 1970-01-01
    相关资源
    最近更新 更多