Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从pytorch中的附近像素创建新通道_Python_Numpy_Pytorch_Torch - Fatal编程技术网

Python 从pytorch中的附近像素创建新通道

Python 从pytorch中的附近像素创建新通道,python,numpy,pytorch,torch,Python,Numpy,Pytorch,Torch,给定批量图像张量,如B x C x W x H(批量大小、通道、宽度、高度) 我想创建一个新的张量,其中新通道是来自附近像素的通道(用0填充) 例如,如果我选择附近的像素大小为3x3(如3x3过滤器),那么附近总共有9个像素,最终的张量大小为bx(9*C)xwxh 有什么建议吗,或者我只需要通过迭代使用蛮力方法吗?如果你想缩短边缘(img是你的图像张量): 如果要将其填充为0,请执行以下操作: from skimage.util import view_as_windows img = np.p

给定批量图像张量,如B x C x W x H(批量大小、通道、宽度、高度)

我想创建一个新的张量,其中新通道是来自附近像素的通道(用0填充)

例如,如果我选择附近的像素大小为3x3(如3x3过滤器),那么附近总共有9个像素,最终的张量大小为bx(9*C)xwxh


有什么建议吗,或者我只需要通过迭代使用蛮力方法吗?

如果你想缩短边缘(
img
是你的图像张量):

如果要将其填充为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解决方案

这个问题非常接近于逆问题,并且具有一个当前活跃的问题。不同之处在于,海报希望保持图像分辨率,而此解决方案不希望

我在这里复制请求者的初始代码(非常有效):


你当然可以做到,但是你想如何处理这些边缘呢?用0填充或裁剪边?是的,边上用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)
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)