【问题标题】:ZCA whitening (MATLAB) - out of memoryZCA白化(MATLAB) - 内存不足
【发布时间】:2015-07-22 05:42:54
【问题描述】:

目前,我正在使用卷积神经网络进行纹理分类。我正在尝试使用 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.

有什么建议吗?

【问题讨论】:

    标签: matlab neural-network pca


    【解决方案1】:

    我怀疑你的reshape 是错误的...

    当你读取图片时,它会返回一个 512*512*3 的数组I。当你用reshape(I,[],3) 重塑它时,它变成了一个 262144*3 数组x。现在x*x' 将产生一个 262144*262144 数组,这对于您的内存来说太大了。

    编辑:

    显然这是 ZCA 美白的正确程序,但您应该将其应用于图像的小块,以保持size(x,1)*size(x,1) 易于处理...

    【讨论】:

    • 这是我从website 中发现的:“在这里,我们假设x 是一个数据结构,每个包含一个训练示例(所以,@ 987654329@ 是一个n-by-m 矩阵)”因此,我的列分别是 R、G、B,行应该是每个通道的像素。如果我的想法是错误的,请纠正我。
    • @EdwardSiew 是的,显然你的操作在这种情况下是正确的,但它通常是在图像的补丁上完成的(比如 16*16 的补丁),这会产生易于处理的 n=256
    猜你喜欢
    • 2015-05-23
    • 2014-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多