【复现教程——第一期】数据集过大导致内存溢出的数据集简化教程

时间:2024-04-03 18:21:10

本文是系列文章的补充教程,适用人群:利用NYU-V2数据集进行深度学习,数据集过大内存溢出。

由于原始数据集超出大小,序列化后内存溢出,电脑配置8g内存可能不够,因此把数据集删减来试试代码是否可以继续运行。

  • 之前的尝试:表明擅自把基础代码改了后面的代码还是会出现问题,而且连锁反应,bug更大,在不太懂的时候这么做很害怕。

 

 【复现教程——第一期】数据集过大导致内存溢出的数据集简化教程

  • 解决方式

 【复现教程——第一期】数据集过大导致内存溢出的数据集简化教程极简数据集,先用14个照片组成一组mat来测试

 

 

代码如下:

先把2.8g的mat切了

 【复现教程——第一期】数据集过大导致内存溢出的数据集简化教程

 

 

good.mat 现在20m左右,真舒服

 

 【复现教程——第一期】数据集过大导致内存溢出的数据集简化教程

 

 

 

原本1449张图片,现在截取前14张的(目标是只要depths)

 【复现教程——第一期】数据集过大导致内存溢出的数据集简化教程

因为rawdepth这块, 【复现教程——第一期】数据集过大导致内存溢出的数据集简化教程这个数据集有问题

问题如下:应该是size有误或者??

 【复现教程——第一期】数据集过大导致内存溢出的数据集简化教程

 

 

 【复现教程——第一期】数据集过大导致内存溢出的数据集简化教程

 

官方也说了,这有问题,于是用D代替RD

  • 然后函数把depths图像提取出来,批处理为png格式文件,下面代码刚还可以用,现在不行了,反正已经处理了50张,先试试效果

 【复现教程——第一期】数据集过大导致内存溢出的数据集简化教程

nyufile = fullfile('nyu_depth_v2_labeled.mat');

outDir = fullfile('output/', 'sgupta', 'datasets', 'nyud2', 'datacopy');

mkdir(fullfile(outDir, 'rawdepth'));

mkdir(fullfile(outDir, 'depth'));

mkdir(fullfile(outDir, 'images'));

dt = load(nyufile, 'rawDepths');

for i = 1:14,

  imwrite(uint16((dt.rawDepths(:,:,i))*1000), fullfile(outDir,  'rawdepth', sprintf('img_%04d.png', i + 5000)));

end

dt = load(nyufile, 'depths');

for i = 1:14,

  imwrite(uint16((dt.depths(:,:,i))*1000), fullfile(outDir, 'depth',  sprintf('img_%04d.png', i + 5000)));

end

dt = load(nyufile, 'images');

for i = 1:14,

  imwrite(uint8((dt.images(:,:,:,i))), fullfile(outDir, 'images',  sprintf('img_%04d.png', i + 5000)));

end

  • 用函数把depth+depth格式编码为hha

图为正在运行hha的test.m代码

clc;

addpath('./utils/nyu-hooks');

addpath('./utils/depth_features');

% matrix_filename = 'camera_rotations_NYU.txt';

depth_image_root = './test/depth'         % dir where depth and raw depth  images are in.

% camera_matrix = textread(matrix_filename);     % import matrix data

C = getCameraParam('color');

for i=1447:1449

    i

    matrix = C;    %camera_matrix(1+(i-1)*3:i*3,:);        % matrix of this  image, 3*3

    D = imread(fullfile(depth_image_root, '/',  ['img_',mat2str(i+5000),'.png']));

    % here, RD is the same as D, because there is some problem about NYU  Depth V2 raw-depth-images

    RD = imread(fullfile(depth_image_root, '/',  ['img_',mat2str(i+5000),'.png']));

    

    D = double(D)/10000;

    missingMask = RD==0;

    [pc, N, yDir, h, pcRot, NRot] = processDepthImage(D*100, missingMask,  C);

    [X, Y, Z] = getPointCloudFromZ(D*100, C, 1);    

    fid = fopen('demo-data/pd.txt', 'w');

    for ii=1:size(X, 1)

        for jj = 1:size(X, 2)

            fprintf(fid,'%f\t%f\t%f\n',X(ii, jj), Y(ii, jj), Z(ii, jj));

        end

    end

    hha = saveHHA([mat2str(i), '_hha'], matrix, depth_image_root, D, RD);

end

 

 

 【复现教程——第一期】数据集过大导致内存溢出的数据集简化教程

  • 展示最后数据

彩色是hha,黑色是depths。

通过depth->hha + good.mat,再试试内存会不会溢出

 【复现教程——第一期】数据集过大导致内存溢出的数据集简化教程