ZCA 白化 (MATLAB) - 内存不足
ZCA whitening (MATLAB) - out of memory
目前,我正在使用卷积神经网络进行纹理分类。我正在尝试使用 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.
有什么建议吗?
我怀疑你的reshape
是错误的...
当您读取图像时,它 returns 一个 512*512*3 的数组 I
。当你用 reshape(I,[],3)
重塑它时,它变成了一个 262144*3 的数组 x
。现在 x*x'
会产生一个 262144*262144 数组,这对你的记忆来说太大了。
编辑:
显然这是 ZCA 白化的正确程序,但您应该将其应用于图像的小块,以保持 size(x,1)*size(x,1)
易于处理...
目前,我正在使用卷积神经网络进行纹理分类。我正在尝试使用 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.
有什么建议吗?
我怀疑你的reshape
是错误的...
当您读取图像时,它 returns 一个 512*512*3 的数组 I
。当你用 reshape(I,[],3)
重塑它时,它变成了一个 262144*3 的数组 x
。现在 x*x'
会产生一个 262144*262144 数组,这对你的记忆来说太大了。
编辑:
显然这是 ZCA 白化的正确程序,但您应该将其应用于图像的小块,以保持 size(x,1)*size(x,1)
易于处理...