开胸手术有点像开胸手术吗?

2024-05-29 05:10:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我通过网络做了几个面具。这些掩码存储在torch.tensor变量中。我想在tensor的每个通道上执行cv2.dilate类似的操作。在

我知道有一种方法可以将tensor转换为numpy.ndarray,然后使用for循环将cv2.dilate应用到每个通道。但是由于有大约32个信道,这种方法可能会减慢网络中的转发操作。在


Tags: 方法网络numpyfortorchcv2tensorndarray
1条回答
网友
1楼 · 发布于 2024-05-29 05:10:25

我认为扩张本质上就是火炬中的conv2d操作。请参阅下面的代码

import cv2
import numpy as np
import torch

im = np.array([ [0, 0, 0, 0, 0],
                [0, 1, 0, 0, 0],
                [0, 1, 1, 0, 0],
                [0, 0, 0, 1, 0],
                [0, 0, 0, 0, 0] ], dtype=np.float32)
kernel = np.array([ [1, 1, 1],
                    [1, 1, 1],
                    [1, 1, 1] ], dtype=np.float32)
print(cv2.dilate(im, kernel))
# [[1. 1. 1. 0. 0.]
#  [1. 1. 1. 1. 0.]
#  [1. 1. 1. 1. 1.]
#  [1. 1. 1. 1. 1.]
#  [0. 0. 1. 1. 1.]]
im_tensor = torch.Tensor(np.expand_dims(np.expand_dims(im, 0), 0)) # size:(1, 1, 5, 5)
kernel_tensor = torch.Tensor(np.expand_dims(np.expand_dims(kernel, 0), 0)) # size: (1, 1, 3, 3)
torch_result = torch.clamp(torch.nn.functional.conv2d(im_tensor, kernel_tensor, padding=(1, 1)), 0, 1)
print(torch_result)
# tensor([[[[1., 1., 1., 0., 0.],
#           [1., 1., 1., 1., 0.],
#           [1., 1., 1., 1., 1.],
#           [1., 1., 1., 1., 1.],
#           [0., 0., 1., 1., 1.]]]])

相关问题 更多 >

    热门问题