这是来自this的后续问题。基本上我想做的是简单地从平均值中减去每个图像。
基于GitHub和this other similar question上的此问题以及this classification example当我们将裁剪后的图片版本提供给网络时,我们需要使用类似的内容减去平均像素:
mu = mean_file.mean(1).mean(1)
但具有讽刺意味的是我想要这样做:
.. = (img[:,0:224,0:224] - mu)
我得到ValueError: operands could not be broadcast together with shapes (3,224,224) (3,)
。我不熟悉Python和Numpy,也无法弄清楚错误信息试图传达的内容。
目前,我正在裁剪平均文件,这不是理想的,但总比没有好。
.. = (img[:,0:224,0:224] - mean_image[:,0:224,0:224])
答案 0 :(得分:1)
替换
mu = mean_file.mean(1).mean(1)
与
mu = mean_file.mean(1).mean(1)[:,None,None]
您似乎试图从3D数组(shape
的{{1}})中减去1D向量((3,)
shape
)。为了做到这一点,需要{1}将1D矢量broadcast放入3D数组的维度(很像Matlab的bsxfun)。为了帮助numpy了解要广播的维度,需要在1D向量中添加单例维度:
(3,224,224)
现在是mu[:,None,None]
形状,这应该使numpy能够正确执行减法。
答案 1 :(得分:0)
我注意到,因为我正在读取lmdb上的图像,所以我必须执行以下操作以使一切正常工作!:
img = np.array(img.transpose(2,1,0),dtype=np.float32)
img -= mean_image[0].mean(1).mean(1)
#transpose back to the original state
img = img.transpose(2,1,0)