我正在与Theano实施CNN。在论文中,我必须在训练CNN之前进行此图像预处理
We extracted RGB patches of 61x61 dimensions associated with each poselet activation, subtracted the mean and used this data to train the convnet model shown in Table 1
你能告诉我“减去平均数”是什么意思吗?告诉我这些步骤是否正确(这是我所理解的) 1)计算整个图像的红色通道,绿色通道和蓝色通道的平均值 2)对于每个像素,从红色值中减去红色通道的平均值,从绿色值中减去绿色通道的平均值,对于蓝色通道相同 3)具有负值是否正确或者我是否使用了abs?
谢谢大家!!
答案 0 :(得分:6)
你应该仔细阅读论文,但最可能的是它们的意思是补丁的平均值,所以你有N
矩阵61x61
像素,这相当于一个长度为61^2
的向量(如果有三个频道,那么3*61^2
)。他们做了什么 - 他们简单计算每个维度的平均值,因此他们根据N
维度计算每个3*61^2
向量的平均值。结果他们获得长度为3*61^2
的平均向量(或平均矩阵 / 平均补丁,如果您愿意)并且它们减去来自所有这些N
补丁。得到的补丁将有负值,完全没问题,你不应该取abs值,神经网络更喜欢这种数据。
答案 1 :(得分:6)
我认为论文中提到的平均值是训练集中使用的所有图像的平均值(为每个通道单独计算)。
有几个迹象:
Caffe是ConvNets的lib。在他们的教程中,他们提到了计算图像的平均值部分:http://caffe.berkeleyvision.org/gathered/examples/imagenet.html 为此,他们使用以下脚本:https://github.com/BVLC/caffe/blob/master/examples/imagenet/make_imagenet_mean.sh 这就是我所说的。
Google与ConvNets一起玩,并在此处发布了他们的代码:https://github.com/google/deepdream/blob/master/dream.ipynb他们也使用训练集的平均值。
这当然只是间接证据,因为我无法解释你为什么会这样。事实上,我在试图弄清楚这个问题时偶然发现了这个问题。
//编辑:
与此同时,我发现source确认了我的声明(我突出显示):
有三种常见形式的数据预处理数据矩阵X [...]
平均减法是最常见的预处理形式。它 涉及减去每个特征中的平均值 数据,并具有以云为中心的几何解释 每个维度的原点周围的数据。在numpy,这个操作 将实现为:X - = np.mean(X,axis = 0)。随着图像 具体而言,为方便起见,减去单个数据通常是常见的 所有像素的值(例如 X - = np.mean(X)),或单独执行此操作 穿过三个颜色通道。
正如我们所看到的,整个数据用于计算平均值。