필터 지우기
필터 지우기

Info

이 질문은 마감되었습니다. 편집하거나 답변을 올리려면 질문을 다시 여십시오.

Activations differ with increased number of input.

조회 수: 1 (최근 30일)
Neon Argentus
Neon Argentus 2020년 7월 25일
마감: MATLAB Answer Bot 2021년 8월 20일
I input the first frame of an image sequence to a pre-trained network and get activation from a certain layer, no problem here. But when I test it in this loop:
% workdat is HxWx3xS image sequence
% extract_from_here is the layer I want to extract activation/feature map from
for i = 1: size(workdat, 4)
tmp = activations(net, workdat(:,:,:,1:i), extract_from_here, 'OutputAs', 'columns');
ac(:,i) = tmp(:,1);
end
Then, the interesting case happens when I do the comparison below:
for k = 1:size(ac,2)
prc(:,k) = 100*abs((ac(:,1)-ac(:,k))./ac(:,1));
end
So what I do is just comparing activation of first frame in the sequence between activations of the same frame when the activations are extracted by giving HxWx3xN to the network where N is running from 1 to S.
In prc array, I've seen errors of 3.4 %. Why is this the case? Why MATLAB extracts activation of the same image different when I input it to CNN alone and when I input it to CNN with more images?
Note: When I input the same image to the network multiple times alone, I get no difference:
ac1 = activations(net, workdat(:,:,:,1), extract_from_here, 'OutputAs', 'columns');
ac2 = activations(net, workdat(:,:,:,1), extract_from_here, 'OutputAs', 'columns');
nnz(ac1-ac2) % always gives 0.

답변 (1개)

Raunak Gupta
Raunak Gupta 2020년 9월 1일
Hi,
I tried to reproduce the same with Example mentioned here which uses Alexnet and MerchData. The percentage error calculated for me was ranging from very low of 10^-7 to 0.1%. This issue is occurring due to the ‘MiniBatch’ Name-Value pair in activations function. If you keep the MiniBatchSize as 1, there is no difference in output with the above approach. Below is the code that I tried.
unzip('MerchData.zip');
imds = imageDatastore('MerchData', ...
'IncludeSubfolders',true, ...
'LabelSource','foldernames');
img = readall(imds);
net = alexnet;
bigImage = zeros(227,227,3,75);
for i=1:75
bigImage(:,:,:,i) = img{i};
end
for i = 1: size(bigImage, 4)
tmp = activations(net, bigImage(:,:,:,1:i), 'fc7', 'OutputAs', 'columns', 'MiniBatchSize',1);
ac(:,i) = tmp(:,1);
end
for k = 1:size(ac,2)
prc(:,k) = 100*abs((ac(:,1)-ac(:,k))./ac(:,1));
end
max(prc(:)) % Gives output 0
I have brought this issue of MiniBatchSize to the notice of our developers. They will investigate the matter further.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by