我不明白torchvision的这种转换是如何工作的。最终,我想要构建一个自定义的normalize类,所以我需要首先弄清楚这是如何工作的。
在文档中,它是这样描述init的:
def __init__(self, mean, std, inplace=False):
self.mean = mean
self.std = std
self.inplace = inplace当我传递这些参数时(通常不是自定义类),我会将它们作为每个通道的列表或元组传递:
transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
但如果我看一下这个电话:
return F.normalize(tensor, self.mean, self.std, self.inplace)
所有这些都将元组传递给F.normalize(),后者只接受p参数的单个值。
这个类必须以某种方式遍历通道才能实现它,但是它如何做到这一点,以及我如何在自定义类中实现它?
基于this tutorial,我会这样描述它:
class Normalize(object):
"""Convert ndarrays in sample to Tensors."""
def __init__(self, mean, std, inplace=False):
self.mean = mean
self.std = std
self.inplace = inplace
def __call__(self, sample):
image, landmarks = sample['image'], sample['landmarks']
return {'image': F.normalize(image, self.mean, self.std, self.inplace),
'landmarks': landmarks}但这不起作用,因为它不会通过每个通道。
发布于 2019-09-09 21:29:26
在那里调用的normalize函数是这样一个https://github.com/pytorch/vision/blob/master/torchvision/transforms/functional.py#L191
输入是形状为(C, H, W)的张量,mean和std可以是序列,这些序列在内部转换为张量。规范化是通过广播in this way完成的
tensor.sub_(mean[:, None, None]).div_(std[:, None, None])
https://stackoverflow.com/questions/57849289
复制相似问题