tf-keras-vis를 사용하여 GradCAM, GradCAM++, ScoreCAM, Faster-ScoreCAM
소개
딥 러닝에서의 예측 결과에 있어서의 특징 부위 가시화로 자주 사용되는 GradCAM등을 출력해 주는 툴 tf-keras-vis입니다만, 굉장히 간단하게 출력할 수 있는 데다 GradCAM 뿐만이 아니라 GradCAM++, ScoreCAM, Faster-ScoreCAM, Vanilla Saliency , SmoothGrad와 다양한 종류의 시각화를 할 수 있습니다
그런 tf-keras-vis입니다만, 공식의 샘플 그렇다면 loss 함수의 클래스 인덱스를 재기록해 이용하는 방식이므로, 클래스 인덱스·예측 화상·인식 모델의 3개의 인수로 취득하는 샘플을 만들었습니다
tf-keras-vis
htps : // 기주 b. 코 m / 케이센 / tf 케라 s - ぃ s
검증 환경
이 기사의 내용은 다음 환경에서 검증되었습니다.
파이썬 3.6.9
TensorFlow 2.4.0-rc0
tf-keras-vis 0.5.3
환경 준비
이미 필요한 모듈이 들어 있다면 건너 뛰십시오.
pip install --upgrade tf-keras-vis matplotlib
모듈 로드
import os
import glob
import numpy as np
import matplotlib.pyplot as plt
import tensorflow as tf
모델용 모듈
from tensorflow.keras.applications.vgg16 import VGG16 as Model
from tensorflow.keras.applications.vgg16 import preprocess_input
모델 로드
model = VGG16(include_top=False, weights='imagenet')
#model = tf.keras.models.load_model('mymodel.h5')
model.summary()
tf-keras-vis용 모듈
from tf_keras_vis.saliency import Saliency
from tf_keras_vis.gradcam import Gradcam
from tf_keras_vis.gradcam import GradcamPlusPlus
from tf_keras_vis.scorecam import ScoreCAM
from tf_keras_vis.utils import normalize
from matplotlib import cm
특징 시각화 맵 취득 함수
SmoothGrad
def GetSmoothGrad(cls_index, img, model):
def loss(output):
return (output[0][cls_index])
def model_modifier(m):
m.layers[-1].activation = tf.keras.activations.linear
return m
saliency = Saliency(model,model_modifier=model_modifier,clone=False)
cam = saliency(loss, img, smooth_samples=20, smooth_noise=0.20)
cam = normalize(cam)
heatmap = np.uint8(cm.jet(cam[0])[..., :3] * 255)
return heatmap
GradCAM
def GetGradCAM(cls_index, img, model):
def loss(output):
return (output[0][cls_index])
def model_modifier(m):
m.layers[-1].activation = tf.keras.activations.linear
return m
gradcam = Gradcam(model,model_modifier=model_modifier,clone=False)
cam = gradcam(loss, img, penultimate_layer=-1)
cam = normalize(cam)
heatmap = np.uint8(cm.jet(cam[0])[..., :3] * 255)
return heatmap
GradCAM++
def GetGradCAMPlusPlus(cls_index, img, model):
def loss(output):
return (output[0][cls_index])
def model_modifier(m):
m.layers[-1].activation = tf.keras.activations.linear
return m
gradcam = GradcamPlusPlus(model,model_modifier=model_modifier,clone=False)
cam = gradcam(loss, img, penultimate_layer=-1)
cam = normalize(cam)
heatmap = np.uint8(cm.jet(cam[0])[..., :3] * 255)
return heatmap
ScoreCAM
def GetScoreCAM(cls_index, img, model):
def loss(output):
return (output[0][cls_index])
def model_modifier(m):
m.layers[-1].activation = tf.keras.activations.linear
return m
scorecam = ScoreCAM(model,model_modifier=model_modifier,clone=False)
cam = scorecam(loss, img, penultimate_layer=-1)
cam = normalize(cam)
heatmap = np.uint8(cm.jet(cam[0])[..., :3] * 255)
return heatmap
Faster ScoreCAM
def GetFasterScoreCAM(cls_index, img, model):
def loss(output):
return (output[0][cls_index])
def model_modifier(m):
m.layers[-1].activation = tf.keras.activations.linear
return m
scorecam = ScoreCAM(model,model_modifier=model_modifier,clone=False)
cam = scorecam(loss, img, penultimate_layer=-1, max_N=10)
cam = normalize(cam)
heatmap = np.uint8(cm.jet(cam[0])[..., :3] * 255)
return heatmap
취득 테스트
from tensorflow.keras.preprocessing.image import load_img
IMAGE_PATH = 'Image.JPG'
CAT_CLASS_INDEX = 0
# Load image
img = load_img(IMAGE_PATH, target_size=(224, 224))
# Preparing input data
X = preprocess_input(np.array(img))
#Get SmoothGrad
heatmap = GetSmoothGrad(CAT_CLASS_INDEX, X, model)
plt.figure(figsize=(20,20))
plt.subplot(1, 3, 1)
plt.title('SmoothGrad')
plt.imshow(heatmap)
#Get GradCAM++
heatmap = GetGradCAMPlusPlus(CAT_CLASS_INDEX, X, model)
plt.subplot(1, 3, 2)
plt.title('GradCAMPlusPlus')
plt.imshow(heatmap)
#Get FasterScoreCAM
heatmap = GetFasterScoreCAM(CAT_CLASS_INDEX, X, model)
plt.subplot(1, 3, 3)
plt.title('FasterScoreCAM')
plt.imshow(heatmap)
plt.show()
주의점
CAT_CLASS_INDEX는 분류의 클래스 id가 아닌 index입니다.
또한 각 함수에 던지는 이미지는 샘플에 있습니다.
img = load_img(IMAGE_PATH, target_size=(224, 224))
X = preprocess_input(np.array(img))
학습시와 같은 크기와 상태의 이미지를 던져주세요.
Reference
이 문제에 관하여(tf-keras-vis를 사용하여 GradCAM, GradCAM++, ScoreCAM, Faster-ScoreCAM), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Anadreline/items/a51767ebc515c14cf511
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
이 기사의 내용은 다음 환경에서 검증되었습니다.
파이썬 3.6.9
TensorFlow 2.4.0-rc0
tf-keras-vis 0.5.3
환경 준비
이미 필요한 모듈이 들어 있다면 건너 뛰십시오.
pip install --upgrade tf-keras-vis matplotlib
모듈 로드
import os
import glob
import numpy as np
import matplotlib.pyplot as plt
import tensorflow as tf
모델용 모듈
from tensorflow.keras.applications.vgg16 import VGG16 as Model
from tensorflow.keras.applications.vgg16 import preprocess_input
모델 로드
model = VGG16(include_top=False, weights='imagenet')
#model = tf.keras.models.load_model('mymodel.h5')
model.summary()
tf-keras-vis용 모듈
from tf_keras_vis.saliency import Saliency
from tf_keras_vis.gradcam import Gradcam
from tf_keras_vis.gradcam import GradcamPlusPlus
from tf_keras_vis.scorecam import ScoreCAM
from tf_keras_vis.utils import normalize
from matplotlib import cm
특징 시각화 맵 취득 함수
SmoothGrad
def GetSmoothGrad(cls_index, img, model):
def loss(output):
return (output[0][cls_index])
def model_modifier(m):
m.layers[-1].activation = tf.keras.activations.linear
return m
saliency = Saliency(model,model_modifier=model_modifier,clone=False)
cam = saliency(loss, img, smooth_samples=20, smooth_noise=0.20)
cam = normalize(cam)
heatmap = np.uint8(cm.jet(cam[0])[..., :3] * 255)
return heatmap
GradCAM
def GetGradCAM(cls_index, img, model):
def loss(output):
return (output[0][cls_index])
def model_modifier(m):
m.layers[-1].activation = tf.keras.activations.linear
return m
gradcam = Gradcam(model,model_modifier=model_modifier,clone=False)
cam = gradcam(loss, img, penultimate_layer=-1)
cam = normalize(cam)
heatmap = np.uint8(cm.jet(cam[0])[..., :3] * 255)
return heatmap
GradCAM++
def GetGradCAMPlusPlus(cls_index, img, model):
def loss(output):
return (output[0][cls_index])
def model_modifier(m):
m.layers[-1].activation = tf.keras.activations.linear
return m
gradcam = GradcamPlusPlus(model,model_modifier=model_modifier,clone=False)
cam = gradcam(loss, img, penultimate_layer=-1)
cam = normalize(cam)
heatmap = np.uint8(cm.jet(cam[0])[..., :3] * 255)
return heatmap
ScoreCAM
def GetScoreCAM(cls_index, img, model):
def loss(output):
return (output[0][cls_index])
def model_modifier(m):
m.layers[-1].activation = tf.keras.activations.linear
return m
scorecam = ScoreCAM(model,model_modifier=model_modifier,clone=False)
cam = scorecam(loss, img, penultimate_layer=-1)
cam = normalize(cam)
heatmap = np.uint8(cm.jet(cam[0])[..., :3] * 255)
return heatmap
Faster ScoreCAM
def GetFasterScoreCAM(cls_index, img, model):
def loss(output):
return (output[0][cls_index])
def model_modifier(m):
m.layers[-1].activation = tf.keras.activations.linear
return m
scorecam = ScoreCAM(model,model_modifier=model_modifier,clone=False)
cam = scorecam(loss, img, penultimate_layer=-1, max_N=10)
cam = normalize(cam)
heatmap = np.uint8(cm.jet(cam[0])[..., :3] * 255)
return heatmap
취득 테스트
from tensorflow.keras.preprocessing.image import load_img
IMAGE_PATH = 'Image.JPG'
CAT_CLASS_INDEX = 0
# Load image
img = load_img(IMAGE_PATH, target_size=(224, 224))
# Preparing input data
X = preprocess_input(np.array(img))
#Get SmoothGrad
heatmap = GetSmoothGrad(CAT_CLASS_INDEX, X, model)
plt.figure(figsize=(20,20))
plt.subplot(1, 3, 1)
plt.title('SmoothGrad')
plt.imshow(heatmap)
#Get GradCAM++
heatmap = GetGradCAMPlusPlus(CAT_CLASS_INDEX, X, model)
plt.subplot(1, 3, 2)
plt.title('GradCAMPlusPlus')
plt.imshow(heatmap)
#Get FasterScoreCAM
heatmap = GetFasterScoreCAM(CAT_CLASS_INDEX, X, model)
plt.subplot(1, 3, 3)
plt.title('FasterScoreCAM')
plt.imshow(heatmap)
plt.show()
주의점
CAT_CLASS_INDEX는 분류의 클래스 id가 아닌 index입니다.
또한 각 함수에 던지는 이미지는 샘플에 있습니다.
img = load_img(IMAGE_PATH, target_size=(224, 224))
X = preprocess_input(np.array(img))
학습시와 같은 크기와 상태의 이미지를 던져주세요.
Reference
이 문제에 관하여(tf-keras-vis를 사용하여 GradCAM, GradCAM++, ScoreCAM, Faster-ScoreCAM), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Anadreline/items/a51767ebc515c14cf511
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
pip install --upgrade tf-keras-vis matplotlib
import os
import glob
import numpy as np
import matplotlib.pyplot as plt
import tensorflow as tf
모델용 모듈
from tensorflow.keras.applications.vgg16 import VGG16 as Model
from tensorflow.keras.applications.vgg16 import preprocess_input
모델 로드
model = VGG16(include_top=False, weights='imagenet')
#model = tf.keras.models.load_model('mymodel.h5')
model.summary()
tf-keras-vis용 모듈
from tf_keras_vis.saliency import Saliency
from tf_keras_vis.gradcam import Gradcam
from tf_keras_vis.gradcam import GradcamPlusPlus
from tf_keras_vis.scorecam import ScoreCAM
from tf_keras_vis.utils import normalize
from matplotlib import cm
특징 시각화 맵 취득 함수
SmoothGrad
def GetSmoothGrad(cls_index, img, model):
def loss(output):
return (output[0][cls_index])
def model_modifier(m):
m.layers[-1].activation = tf.keras.activations.linear
return m
saliency = Saliency(model,model_modifier=model_modifier,clone=False)
cam = saliency(loss, img, smooth_samples=20, smooth_noise=0.20)
cam = normalize(cam)
heatmap = np.uint8(cm.jet(cam[0])[..., :3] * 255)
return heatmap
GradCAM
def GetGradCAM(cls_index, img, model):
def loss(output):
return (output[0][cls_index])
def model_modifier(m):
m.layers[-1].activation = tf.keras.activations.linear
return m
gradcam = Gradcam(model,model_modifier=model_modifier,clone=False)
cam = gradcam(loss, img, penultimate_layer=-1)
cam = normalize(cam)
heatmap = np.uint8(cm.jet(cam[0])[..., :3] * 255)
return heatmap
GradCAM++
def GetGradCAMPlusPlus(cls_index, img, model):
def loss(output):
return (output[0][cls_index])
def model_modifier(m):
m.layers[-1].activation = tf.keras.activations.linear
return m
gradcam = GradcamPlusPlus(model,model_modifier=model_modifier,clone=False)
cam = gradcam(loss, img, penultimate_layer=-1)
cam = normalize(cam)
heatmap = np.uint8(cm.jet(cam[0])[..., :3] * 255)
return heatmap
ScoreCAM
def GetScoreCAM(cls_index, img, model):
def loss(output):
return (output[0][cls_index])
def model_modifier(m):
m.layers[-1].activation = tf.keras.activations.linear
return m
scorecam = ScoreCAM(model,model_modifier=model_modifier,clone=False)
cam = scorecam(loss, img, penultimate_layer=-1)
cam = normalize(cam)
heatmap = np.uint8(cm.jet(cam[0])[..., :3] * 255)
return heatmap
Faster ScoreCAM
def GetFasterScoreCAM(cls_index, img, model):
def loss(output):
return (output[0][cls_index])
def model_modifier(m):
m.layers[-1].activation = tf.keras.activations.linear
return m
scorecam = ScoreCAM(model,model_modifier=model_modifier,clone=False)
cam = scorecam(loss, img, penultimate_layer=-1, max_N=10)
cam = normalize(cam)
heatmap = np.uint8(cm.jet(cam[0])[..., :3] * 255)
return heatmap
취득 테스트
from tensorflow.keras.preprocessing.image import load_img
IMAGE_PATH = 'Image.JPG'
CAT_CLASS_INDEX = 0
# Load image
img = load_img(IMAGE_PATH, target_size=(224, 224))
# Preparing input data
X = preprocess_input(np.array(img))
#Get SmoothGrad
heatmap = GetSmoothGrad(CAT_CLASS_INDEX, X, model)
plt.figure(figsize=(20,20))
plt.subplot(1, 3, 1)
plt.title('SmoothGrad')
plt.imshow(heatmap)
#Get GradCAM++
heatmap = GetGradCAMPlusPlus(CAT_CLASS_INDEX, X, model)
plt.subplot(1, 3, 2)
plt.title('GradCAMPlusPlus')
plt.imshow(heatmap)
#Get FasterScoreCAM
heatmap = GetFasterScoreCAM(CAT_CLASS_INDEX, X, model)
plt.subplot(1, 3, 3)
plt.title('FasterScoreCAM')
plt.imshow(heatmap)
plt.show()
주의점
CAT_CLASS_INDEX는 분류의 클래스 id가 아닌 index입니다.
또한 각 함수에 던지는 이미지는 샘플에 있습니다.
img = load_img(IMAGE_PATH, target_size=(224, 224))
X = preprocess_input(np.array(img))
학습시와 같은 크기와 상태의 이미지를 던져주세요.
Reference
이 문제에 관하여(tf-keras-vis를 사용하여 GradCAM, GradCAM++, ScoreCAM, Faster-ScoreCAM), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Anadreline/items/a51767ebc515c14cf511
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
from tensorflow.keras.applications.vgg16 import VGG16 as Model
from tensorflow.keras.applications.vgg16 import preprocess_input
model = VGG16(include_top=False, weights='imagenet')
#model = tf.keras.models.load_model('mymodel.h5')
model.summary()
tf-keras-vis용 모듈
from tf_keras_vis.saliency import Saliency
from tf_keras_vis.gradcam import Gradcam
from tf_keras_vis.gradcam import GradcamPlusPlus
from tf_keras_vis.scorecam import ScoreCAM
from tf_keras_vis.utils import normalize
from matplotlib import cm
특징 시각화 맵 취득 함수
SmoothGrad
def GetSmoothGrad(cls_index, img, model):
def loss(output):
return (output[0][cls_index])
def model_modifier(m):
m.layers[-1].activation = tf.keras.activations.linear
return m
saliency = Saliency(model,model_modifier=model_modifier,clone=False)
cam = saliency(loss, img, smooth_samples=20, smooth_noise=0.20)
cam = normalize(cam)
heatmap = np.uint8(cm.jet(cam[0])[..., :3] * 255)
return heatmap
GradCAM
def GetGradCAM(cls_index, img, model):
def loss(output):
return (output[0][cls_index])
def model_modifier(m):
m.layers[-1].activation = tf.keras.activations.linear
return m
gradcam = Gradcam(model,model_modifier=model_modifier,clone=False)
cam = gradcam(loss, img, penultimate_layer=-1)
cam = normalize(cam)
heatmap = np.uint8(cm.jet(cam[0])[..., :3] * 255)
return heatmap
GradCAM++
def GetGradCAMPlusPlus(cls_index, img, model):
def loss(output):
return (output[0][cls_index])
def model_modifier(m):
m.layers[-1].activation = tf.keras.activations.linear
return m
gradcam = GradcamPlusPlus(model,model_modifier=model_modifier,clone=False)
cam = gradcam(loss, img, penultimate_layer=-1)
cam = normalize(cam)
heatmap = np.uint8(cm.jet(cam[0])[..., :3] * 255)
return heatmap
ScoreCAM
def GetScoreCAM(cls_index, img, model):
def loss(output):
return (output[0][cls_index])
def model_modifier(m):
m.layers[-1].activation = tf.keras.activations.linear
return m
scorecam = ScoreCAM(model,model_modifier=model_modifier,clone=False)
cam = scorecam(loss, img, penultimate_layer=-1)
cam = normalize(cam)
heatmap = np.uint8(cm.jet(cam[0])[..., :3] * 255)
return heatmap
Faster ScoreCAM
def GetFasterScoreCAM(cls_index, img, model):
def loss(output):
return (output[0][cls_index])
def model_modifier(m):
m.layers[-1].activation = tf.keras.activations.linear
return m
scorecam = ScoreCAM(model,model_modifier=model_modifier,clone=False)
cam = scorecam(loss, img, penultimate_layer=-1, max_N=10)
cam = normalize(cam)
heatmap = np.uint8(cm.jet(cam[0])[..., :3] * 255)
return heatmap
취득 테스트
from tensorflow.keras.preprocessing.image import load_img
IMAGE_PATH = 'Image.JPG'
CAT_CLASS_INDEX = 0
# Load image
img = load_img(IMAGE_PATH, target_size=(224, 224))
# Preparing input data
X = preprocess_input(np.array(img))
#Get SmoothGrad
heatmap = GetSmoothGrad(CAT_CLASS_INDEX, X, model)
plt.figure(figsize=(20,20))
plt.subplot(1, 3, 1)
plt.title('SmoothGrad')
plt.imshow(heatmap)
#Get GradCAM++
heatmap = GetGradCAMPlusPlus(CAT_CLASS_INDEX, X, model)
plt.subplot(1, 3, 2)
plt.title('GradCAMPlusPlus')
plt.imshow(heatmap)
#Get FasterScoreCAM
heatmap = GetFasterScoreCAM(CAT_CLASS_INDEX, X, model)
plt.subplot(1, 3, 3)
plt.title('FasterScoreCAM')
plt.imshow(heatmap)
plt.show()
주의점
CAT_CLASS_INDEX는 분류의 클래스 id가 아닌 index입니다.
또한 각 함수에 던지는 이미지는 샘플에 있습니다.
img = load_img(IMAGE_PATH, target_size=(224, 224))
X = preprocess_input(np.array(img))
학습시와 같은 크기와 상태의 이미지를 던져주세요.
Reference
이 문제에 관하여(tf-keras-vis를 사용하여 GradCAM, GradCAM++, ScoreCAM, Faster-ScoreCAM), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Anadreline/items/a51767ebc515c14cf511
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
from tf_keras_vis.saliency import Saliency
from tf_keras_vis.gradcam import Gradcam
from tf_keras_vis.gradcam import GradcamPlusPlus
from tf_keras_vis.scorecam import ScoreCAM
from tf_keras_vis.utils import normalize
from matplotlib import cm
SmoothGrad
def GetSmoothGrad(cls_index, img, model):
def loss(output):
return (output[0][cls_index])
def model_modifier(m):
m.layers[-1].activation = tf.keras.activations.linear
return m
saliency = Saliency(model,model_modifier=model_modifier,clone=False)
cam = saliency(loss, img, smooth_samples=20, smooth_noise=0.20)
cam = normalize(cam)
heatmap = np.uint8(cm.jet(cam[0])[..., :3] * 255)
return heatmap
GradCAM
def GetGradCAM(cls_index, img, model):
def loss(output):
return (output[0][cls_index])
def model_modifier(m):
m.layers[-1].activation = tf.keras.activations.linear
return m
gradcam = Gradcam(model,model_modifier=model_modifier,clone=False)
cam = gradcam(loss, img, penultimate_layer=-1)
cam = normalize(cam)
heatmap = np.uint8(cm.jet(cam[0])[..., :3] * 255)
return heatmap
GradCAM++
def GetGradCAMPlusPlus(cls_index, img, model):
def loss(output):
return (output[0][cls_index])
def model_modifier(m):
m.layers[-1].activation = tf.keras.activations.linear
return m
gradcam = GradcamPlusPlus(model,model_modifier=model_modifier,clone=False)
cam = gradcam(loss, img, penultimate_layer=-1)
cam = normalize(cam)
heatmap = np.uint8(cm.jet(cam[0])[..., :3] * 255)
return heatmap
ScoreCAM
def GetScoreCAM(cls_index, img, model):
def loss(output):
return (output[0][cls_index])
def model_modifier(m):
m.layers[-1].activation = tf.keras.activations.linear
return m
scorecam = ScoreCAM(model,model_modifier=model_modifier,clone=False)
cam = scorecam(loss, img, penultimate_layer=-1)
cam = normalize(cam)
heatmap = np.uint8(cm.jet(cam[0])[..., :3] * 255)
return heatmap
Faster ScoreCAM
def GetFasterScoreCAM(cls_index, img, model):
def loss(output):
return (output[0][cls_index])
def model_modifier(m):
m.layers[-1].activation = tf.keras.activations.linear
return m
scorecam = ScoreCAM(model,model_modifier=model_modifier,clone=False)
cam = scorecam(loss, img, penultimate_layer=-1, max_N=10)
cam = normalize(cam)
heatmap = np.uint8(cm.jet(cam[0])[..., :3] * 255)
return heatmap
취득 테스트
from tensorflow.keras.preprocessing.image import load_img
IMAGE_PATH = 'Image.JPG'
CAT_CLASS_INDEX = 0
# Load image
img = load_img(IMAGE_PATH, target_size=(224, 224))
# Preparing input data
X = preprocess_input(np.array(img))
#Get SmoothGrad
heatmap = GetSmoothGrad(CAT_CLASS_INDEX, X, model)
plt.figure(figsize=(20,20))
plt.subplot(1, 3, 1)
plt.title('SmoothGrad')
plt.imshow(heatmap)
#Get GradCAM++
heatmap = GetGradCAMPlusPlus(CAT_CLASS_INDEX, X, model)
plt.subplot(1, 3, 2)
plt.title('GradCAMPlusPlus')
plt.imshow(heatmap)
#Get FasterScoreCAM
heatmap = GetFasterScoreCAM(CAT_CLASS_INDEX, X, model)
plt.subplot(1, 3, 3)
plt.title('FasterScoreCAM')
plt.imshow(heatmap)
plt.show()
주의점
CAT_CLASS_INDEX는 분류의 클래스 id가 아닌 index입니다.
또한 각 함수에 던지는 이미지는 샘플에 있습니다.
img = load_img(IMAGE_PATH, target_size=(224, 224))
X = preprocess_input(np.array(img))
학습시와 같은 크기와 상태의 이미지를 던져주세요.
Reference
이 문제에 관하여(tf-keras-vis를 사용하여 GradCAM, GradCAM++, ScoreCAM, Faster-ScoreCAM), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Anadreline/items/a51767ebc515c14cf511
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
from tensorflow.keras.preprocessing.image import load_img
IMAGE_PATH = 'Image.JPG'
CAT_CLASS_INDEX = 0
# Load image
img = load_img(IMAGE_PATH, target_size=(224, 224))
# Preparing input data
X = preprocess_input(np.array(img))
#Get SmoothGrad
heatmap = GetSmoothGrad(CAT_CLASS_INDEX, X, model)
plt.figure(figsize=(20,20))
plt.subplot(1, 3, 1)
plt.title('SmoothGrad')
plt.imshow(heatmap)
#Get GradCAM++
heatmap = GetGradCAMPlusPlus(CAT_CLASS_INDEX, X, model)
plt.subplot(1, 3, 2)
plt.title('GradCAMPlusPlus')
plt.imshow(heatmap)
#Get FasterScoreCAM
heatmap = GetFasterScoreCAM(CAT_CLASS_INDEX, X, model)
plt.subplot(1, 3, 3)
plt.title('FasterScoreCAM')
plt.imshow(heatmap)
plt.show()
CAT_CLASS_INDEX는 분류의 클래스 id가 아닌 index입니다.
또한 각 함수에 던지는 이미지는 샘플에 있습니다.
img = load_img(IMAGE_PATH, target_size=(224, 224))
X = preprocess_input(np.array(img))
학습시와 같은 크기와 상태의 이미지를 던져주세요.
Reference
이 문제에 관하여(tf-keras-vis를 사용하여 GradCAM, GradCAM++, ScoreCAM, Faster-ScoreCAM), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Anadreline/items/a51767ebc515c14cf511텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)