trial and error with the min_overlap 10% to 2%

This commit is contained in:
Stefan
2022-04-07 09:13:17 +02:00
parent 82c285b1b0
commit 10cdf43509
14 changed files with 350 additions and 42 deletions

View File

@@ -0,0 +1,2 @@
from .base import *
from .integrated_gradients import *

View File

@@ -1,12 +1,11 @@
import numpy as np
import tensorflow as tf
from tensorflow.keras.applications import densenet
from base import SaliencyMap
from sfransen.Saliency.base import SaliencyMap
class IntegratedGradients(SaliencyMap):
def get_mask(self, image, baseline=None, num_steps=2):
def get_mask(self, image, baseline=None, num_steps=4):
"""Computes Integrated Gradients for a predicted label.
Args:
@@ -28,7 +27,6 @@ class IntegratedGradients(SaliencyMap):
baseline = np.zeros(img_size).astype(np.float32)
else:
baseline = baseline.astype(np.float32)
print(">>>> step ONE completed")
img_input = image
top_pred_idx = self.get_top_predicted_idx(image)
@@ -37,27 +35,20 @@ class IntegratedGradients(SaliencyMap):
for i in range(num_steps + 1)
]
interpolated_image = np.vstack(interpolated_image).astype(np.float32)
print(">>>> step TWO completed")
grads = []
for i, img in enumerate(interpolated_image):
print("number of image:",i)
print("size of image:",np.shape(img))
print(f"interpolation step:",i," out of {num_steps}")
img = tf.expand_dims(img, axis=0)
grad = self.get_gradients(img)
print("size of grad is:",np.shape(grad))
grads.append(grad[0])
grads = tf.convert_to_tensor(grads, dtype=tf.float32)
print(">>>> step THREE completed")
# 4. Approximate the integral using the trapezoidal rule
grads = (grads[:-1] + grads[1:]) / 2.0
avg_grads = tf.reduce_mean(grads, axis=0)
# tf.reduce_mean(grads, axis=(0, 1, 2, 3))
print(">>>> step FOUR completed")
# 5. Calculate integrated gradients and return
integrated_grads = (img_input - baseline) * avg_grads
print(">>>> step FIVE completed")
return integrated_grads