sak*_*agi 10 python machine-learning image-processing neural-network
我正在与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
Run Code Online (Sandbox Code Playgroud)
你能告诉我"减去平均数"是什么意思吗?告诉我这些步骤是否正确(这是我所理解的)1)计算整个图像的红色通道,绿色通道和蓝色通道的平均值2)对于每个像素,从红色值中减去红色通道的平均值,从绿色值绿色通道的平均值和蓝色通道的平均值3)具有负值是否正确或者我是否使用了abs?
谢谢大家!!
你应该仔细阅读论文,但最可能的是它们意味着补丁的平均值,所以你有N
矩阵61x61
像素,相当于长度的矢量61^2
(如果有三个通道那么3*61^2
).他们做了什么 - 他们简单地计算每个维度的平均值,因此他们根据每个维度计算这些N
向量的平均值3*61^2
.结果,他们获得了长度的平均向量3*61^2
(或者如果您愿意,则为平均矩阵/平均值补丁),并且它们从所有这些N
补丁中减去它.得到的补丁将有负值,完全没问题,你不应该取abs值,神经网络更喜欢这种数据.
我假设文中提到的平均值是训练集中使用的所有图像的平均值(为每个通道单独计算).
几个迹象:
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,他们也使用训练集的平均值.
这当然只是间接证据,因为我无法解释你为什么会这样.事实上,我在试图弄清楚这个问题时偶然发现了这个问题.
//编辑:
与此同时,我找到了一个确认我声明的消息来源(由我添加的突出显示):
有三种常见形式的数据预处理数据矩阵X [...]
平均减法是最常见的预处理形式.它涉及减去数据中每个特征的均值,并具有几何解释,即沿着每个维度围绕原点围绕数据云.在numpy中,此操作将实现为:X - = np.mean(X,axis = 0).对于图像,为方便起见,通常从所有像素中减去单个值(例如X - = np.mean(X)),或者在三个颜色通道中分别执行此操作.
我们可以看到,整个数据用于计算均值.