2024-09-30 18:17:32 发布
网友
给定批量图像张量,如B x C x W x H(批量大小、通道、宽度、高度)
我想创建一个新的张量,其中新通道是来自附近像素的通道(用0填充)
例如,如果我选择附近的像素大小为3x3(如3x3过滤器),那么附近总共有9个像素,最终的张量大小为bx(9*C)xwxh
对此有什么建议吗,还是我只需要通过迭代使用蛮力方法
如果要缩短边(img是图像张量):
img
from skimage.util import view_as_windows B,C,W,H = img.shape img_ = view_as_windows(img,(1,1,3,3)).reshape(B,C,W-2,H-2,-1).transpose(0,1,4,2,3).reshape(B,C*9,W-2,H-2)
如果要将其填充为0,请执行以下操作:
from skimage.util import view_as_windows img = np.pad(img,((0,0),(0,0),(1,1),(1,1))) B,C,W,H = img.shape img_ = view_as_windows(img,(1,1,3,3)).reshape(B,C,W-2,H-2,-1).transpose(0,1,4,2,3).reshape(B,C*9,W-2,H-2)
对于未来的读者,如果您不想破坏计算图(使用skimage),或者不想通过不将数据从GPU移动到GPU来使用更高效的实现,那么您可能需要一个本机PyTorch解决方案
这个问题非常接近逆PixelShuffle,并且有一个当前活动的feature request。不同之处在于,海报希望保持图像分辨率,而此解决方案不希望
我在这里复制请求者的初始代码(非常有效):
out_channel = c*(r**2) out_h = h//r out_w = w//r fm_view = fm.contiguous().view(b, c, out_h, r, out_w, r) fm_prime = fm_view.permute(0,1,3,5,2,4).contiguous().view(b,out_channel, out_h, out_w)
如果要缩短边(
img
是图像张量):如果要将其填充为0,请执行以下操作:
对于未来的读者,如果您不想破坏计算图(使用skimage),或者不想通过不将数据从GPU移动到GPU来使用更高效的实现,那么您可能需要一个本机PyTorch解决方案
这个问题非常接近逆PixelShuffle,并且有一个当前活动的feature request。不同之处在于,海报希望保持图像分辨率,而此解决方案不希望
我在这里复制请求者的初始代码(非常有效):
相关问题 更多 >
编程相关推荐