|
a |
|
b/functions/computeGradCam.m |
|
|
1 |
function computeGradCam(imagesCellTest_original, imagesCellTest_unsharpened, meanAll_test_original, meanAll_test_unsharp, ... |
|
|
2 |
indexes_test_imUnsharpened, netTransfer_original, netTransfer_unsharp, convLayerName, inputSize, filenameTest, TestLabels, dirResults) |
|
|
3 |
|
|
|
4 |
lgraph = layerGraph(netTransfer_unsharp.Layers); |
|
|
5 |
lgraph = removeLayers(lgraph, lgraph.Layers(end).Name); |
|
|
6 |
dlnet = dlnetwork(lgraph); |
|
|
7 |
% softmaxName = 'softmax'; |
|
|
8 |
softmaxName = 'prob'; |
|
|
9 |
% convLayerName = 'conv5_3'; |
|
|
10 |
|
|
|
11 |
%loop on imgs |
|
|
12 |
%for ind_im = 1 : numel(imagesCellTest_unsharpened) |
|
|
13 |
for ind_im = 1 : 10 %only some images |
|
|
14 |
|
|
|
15 |
%only images unsharpened |
|
|
16 |
if ~indexes_test_imUnsharpened(ind_im) |
|
|
17 |
continue |
|
|
18 |
end %if indexes |
|
|
19 |
|
|
|
20 |
img = imagesCellTest_unsharpened{ind_im}; |
|
|
21 |
|
|
|
22 |
%img = img + meanAll_test_unsharp(ind_im); |
|
|
23 |
|
|
|
24 |
img = imresize(img, inputSize(1:2)); |
|
|
25 |
%img = im2uint8(img); |
|
|
26 |
|
|
|
27 |
[classfn, score] = classify(netTransfer_unsharp, img); |
|
|
28 |
dlImg = dlarray(single(img), 'SSC'); |
|
|
29 |
[convMap, dScoresdMap] = dlfeval(@gradcam, dlnet, dlImg, softmaxName, convLayerName, classfn); |
|
|
30 |
gradcamMap = sum(convMap .* sum(dScoresdMap, [1 2]), 3); |
|
|
31 |
gradcamMap = extractdata(gradcamMap); |
|
|
32 |
gradcamMap = rescale(gradcamMap); |
|
|
33 |
gradcamMap = imresize(gradcamMap, inputSize(1:2), 'Method', 'bicubic'); |
|
|
34 |
|
|
|
35 |
imOriginal = imagesCellTest_original{ind_im}; |
|
|
36 |
|
|
|
37 |
%imOriginal = imOriginal + meanAll_test_original(ind_im); |
|
|
38 |
|
|
|
39 |
imOriginal = imresize(imOriginal, inputSize(1:2)); |
|
|
40 |
%imOriginal = im2uint8(imOriginal); |
|
|
41 |
|
|
|
42 |
[classfn_original, score_original] = classify(netTransfer_unsharp, imOriginal); |
|
|
43 |
dlImg = dlarray(single(imOriginal), 'SSC'); |
|
|
44 |
[convMap, dScoresdMap] = dlfeval(@gradcam, dlnet, dlImg, softmaxName, convLayerName, classfn_original); |
|
|
45 |
gradcamMap_original = sum(convMap .* sum(dScoresdMap, [1 2]), 3); |
|
|
46 |
gradcamMap_original = extractdata(gradcamMap_original); |
|
|
47 |
gradcamMap_original = rescale(gradcamMap_original); |
|
|
48 |
gradcamMap_original = imresize(gradcamMap_original, inputSize(1:2), 'Method', 'bicubic'); |
|
|
49 |
|
|
|
50 |
|
|
|
51 |
resVisFact = 1; |
|
|
52 |
|
|
|
53 |
fsfigure(11); |
|
|
54 |
|
|
|
55 |
subplot(2,2,1) |
|
|
56 |
imshow(imresize(imOriginal, resVisFact)); |
|
|
57 |
title(sprintf('%s; Real: %s; Class.: %s (score: %.2f)', filenameTest{ind_im}, num2str(TestLabels(ind_im)), classfn_original, score_original(classfn_original)), 'Interpreter', 'none'); |
|
|
58 |
subplot(2,2,2) |
|
|
59 |
imshow(imresize(imOriginal, resVisFact)); |
|
|
60 |
hold on; |
|
|
61 |
imagesc(imresize(gradcamMap_original, resVisFact),'AlphaData',0.5); |
|
|
62 |
colormap jet |
|
|
63 |
hold off; |
|
|
64 |
title([filenameTest{ind_im} '; Grad-CAM'], 'Interpreter', 'none'); |
|
|
65 |
|
|
|
66 |
subplot(2,2,3) |
|
|
67 |
imshow(imresize(img, resVisFact)); |
|
|
68 |
title(sprintf('%s; Real: %s; Class.: %s (score: %.2f)', filenameTest{ind_im}, num2str(TestLabels(ind_im)), classfn, score(classfn)), 'Interpreter', 'none'); |
|
|
69 |
subplot(2,2,4) |
|
|
70 |
imshow(imresize(img, resVisFact)); |
|
|
71 |
hold on; |
|
|
72 |
imagesc(imresize(gradcamMap, resVisFact),'AlphaData',0.5); |
|
|
73 |
colormap jet |
|
|
74 |
hold off; |
|
|
75 |
title([filenameTest{ind_im} '; Grad-CAM'], 'Interpreter', 'none'); |
|
|
76 |
|
|
|
77 |
set(gcf, 'color', 'w'); |
|
|
78 |
|
|
|
79 |
export_fig(gcf, [dirResults, filenameTest{ind_im}]); |
|
|
80 |
|
|
|
81 |
if 0 |
|
|
82 |
%write separate |
|
|
83 |
resVisFact = 5; |
|
|
84 |
|
|
|
85 |
[C, ind] = strsplit(filenameTest{ind_im}, '.'); |
|
|
86 |
fileNameGradCAMOriginal = [C{1} '_gradcamOriginal.png']; |
|
|
87 |
fileNameGradCAMsharp = [C{1} '_gradcamUnsharp.png']; |
|
|
88 |
|
|
|
89 |
fileNameGradimOriginal = [C{1} '_Original.png']; |
|
|
90 |
fileNameGradimsharp = [C{1} '_Unsharp.png']; |
|
|
91 |
|
|
|
92 |
imwrite(imOriginal, [dirResults, fileNameGradimOriginal]); |
|
|
93 |
imwrite(img, [dirResults, fileNameGradimsharp]); |
|
|
94 |
|
|
|
95 |
fsfigure(12); |
|
|
96 |
imshow(imresize(imOriginal, resVisFact)); |
|
|
97 |
hold on; |
|
|
98 |
imagesc(imresize(gradcamMap_original, resVisFact),'AlphaData',0.5); |
|
|
99 |
colormap jet |
|
|
100 |
hold off; |
|
|
101 |
%title([filenameTest{ind_im} '; Grad-CAM'], 'Interpreter', 'none'); |
|
|
102 |
export_fig(gcf, [dirResults, fileNameGradCAMOriginal]); |
|
|
103 |
|
|
|
104 |
fsfigure(13); |
|
|
105 |
imshow(imresize(img, resVisFact)); |
|
|
106 |
hold on; |
|
|
107 |
imagesc(imresize(gradcamMap, resVisFact),'AlphaData',0.5); |
|
|
108 |
colormap jet |
|
|
109 |
hold off; |
|
|
110 |
%title([filenameTest{ind_im} '; Grad-CAM'], 'Interpreter', 'none'); |
|
|
111 |
export_fig(gcf, [dirResults, fileNameGradCAMsharp]); |
|
|
112 |
end |
|
|
113 |
|
|
|
114 |
pause(0.1) |
|
|
115 |
%pause |
|
|
116 |
|
|
|
117 |
end %for ind_im |
|
|
118 |
|
|
|
119 |
|