ZCA美白(MATLAB) - 内存不足

时间:2015-07-22 05:42:55

标签: matlab neural-network pca

目前,我正在使用卷积神经网络进行纹理分类。我正在尝试使用Matlab代码here来实现ZCA白化以预处理我的图像。

请注意,我的图像尺寸为512x512,RGB JPEG格式会导致矩阵乘法内存不足。 (但是,我有自己的理由在研究中无法缩小图像尺寸)

以下是我的代码实现,例如,以lena.jpg(512x512)为例。

I = double(imread('lena.jpg')); % image size of 512x512
x = reshape(I, [], 3); % RGB vectors
avg = mean(x, 1);     % Compute the mean pixel intensity value separately for each channel. 
sigma = x * x' / size(x, 2); % <== I get error here
x = x - repmat(avg, size(x, 1), 1);
[U,S,V] = svd(sigma);
xZCAwhite = U * diag(1./sqrt(diag(S) + epsilon)) * U' * x;

以下是我的memory状态

Maximum possible array:        4338 MB (4.548e+09 bytes) *
Memory available for all arrays:        4338 MB (4.548e+09 bytes) *
Memory used by MATLAB:        1363 MB (1.429e+09 bytes)
Physical Memory (RAM):        8052 MB (8.443e+09 bytes)

*  Limited by System Memory (physical + swap file) available.

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

我怀疑你的reshape错了......

当您阅读图像时,它会返回512 * 512 * 3阵列I。当您使用reshape(I,[],3)对其进行整形时,它将变为262144 * 3阵列x。现在x*x'会产生一个262144 * 262144数组,这个数组对于你的记忆来说太大了。

<强> 编辑:

显然这是ZCA美白的正确程序,但你应该在图像的小片上应用它,以保持size(x,1)*size(x,1)易于处理......

相关问题