在 Caffe 中尝试从通道中减去平均值时获得"ValueError: operands could not be broadcast together with shapes"



这是后续问题。基本上我想做的是简单地从平均值中减去每个图像。

基于GitHub上的这个问题和其他类似的问题,以及这个分类示例 当我们将裁剪后的图像版本馈送到网络时,我们需要使用如下方法减去平均像素:

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])

替换

mu = mean_file.mean(1).mean(1)

mu = mean_file.mean(1).mean(1)[:,None,None]

似乎您正在尝试从 3D 数组(shapeof(3,224,224)(中减去 1D 向量((3,)shape(。为了做到这一点,numpy需要将1D向量广播到3D数组的维度中(很像Matlab的bsxfun(。为了帮助 numpy 了解要广播的维度,需要将单例维度添加到 1D 向量:

mu[:,None,None]

现在的形状为(3,1,1),这应该使 numpy 能够正确执行减法。

我注意到,由于我正在从 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) 

相关内容

最新更新