2017-01-31 3 views
0

저는 이미지 데이터 세트의 일부 기능을 계산하고 나중에 사용할 수 있도록 기능을 저장하려고합니다. 아래의 코드이다이 코드의 계산 시간을 줄이는 방법은 무엇입니까?

tic 
l = 9907 % size of image data set 
% pre-allocating space for variables in the for loop 
Icolor = cell(1,l); 
Iwave = cell(1,l); 
IglrlFeatures = cell(1,l); 
for i = 1:l % l = size of image data set = 9907 
    IDB{1,i} = imread(strcat(path,strcat(num2str(i),'.jpg'))); 
    Icolor{1,i} = colorMoments(IDB{1,i}); % 6-features in each cell 
    Iwave{1,i} = waveletTransform(IDB{1,i}); % 8-features in each cell 
    IglrlFeatures{1,i} = textureFeatures(IDB{1,i}); % 44-features in each cell 
    ICW{1,i} = [Icolor{1,i} Iwave{1,i} IglrlFeatures{1,i}]; 
end 
toc 

여기서 계산 시간 단일 이미지의 각 기능이다

colorMoments (single_image) = 0.009689 경과 시간 (초)이다.

waveletTransform (single_image) = 경과 시간은 0.018069 초입니다.

textureFeatures (single_image) = 경과 시간은 0.022902 초입니다.

L = 데이터 집합 크기 = 9907 개 이미지

다른 데이터

계산 시간이 설정된 사이즈 (L)

리터 = 10; 경과 시간은 0.402629 초입니다.

1 = 100; 경과 시간은 2.233971 초입니다.

1 = 1000; 경과 시간은 21.178395 초입니다.

1 = 2000; 경과 시간은 44.510071 초입니다.

1 = 5000; 경과 시간은 111.393866 초입니다.

1 = 9907; 경과 시간은 238.924998 초입니다. 대략 (~ 4 분)

나는이 계산 시간, 어떤 제안을 줄이려고합니까?

감사

Gopi

+0

제목에 시간을 늘리고 싶다고 말하면 시간을 줄이겠다는 메시지가 나타납니다. 무엇 이니? – Suever

+0

유감스럽게도 Compuatation 시간을 줄이겠다는 뜻입니다. – Gopi

답변

0

측정 된 시간 순서 O (N)의 계산 복잡성을 나타낼 것으로 보인다. 나는 이런 종류의 문제에 대해 그 순서가 더 축소 될 수 있을지는 의문이다. 그래서 저는 기껏해야 선형적인 성능 향상을 기대할 수 있다고 믿습니다.

코드에서 여러 개의 프로세서 코어를 사용하는지 여부를 조사해야합니다. 그렇지 않은 경우 for -loop을 재구성하여 parfor을 대신 사용할 수 있습니다.

+0

parfor와 parallel pool을 모두 사용하고 계산이 크게 향상되었습니다. 9907 이미지의 데이터 세트에 대한 비교를 위해 238 초에서 32 초로 증가했습니다. 변수 이름을 "path" "다른 사람이 제안한대로 다른 사람에게 .. 그것은 공연을 크게 향상 시켰습니다. – Gopi