실습 | 설명 가능한 딥러닝
from tensorflow.keras.preprocessing.image import load_img, img_to_array from tensorflow.keras.applications import VGG16 # XAI 알고리즘을 불러오는 부분입니다. from tf_explain.core.grad_cam import GradCAM from tf_explain.core.occlusion_sensitivity import OcclusionSensitivity # 이미지를 불러와 보여 주는 데 쓰는 라이브러리를 불러옵니다. import glob import matplotlib.pyplot as plt import matplotlib.image as mpimg # 깃허브에 준비된 데이터를 가져옵니다. !git clone https://github.com/taehojo/data.git # 원본 이미지가 들어갈 리스트를 만듭니다. = [] # 원본 이미지가 저장된 폴더에서 하나씩 불러와 리스트에 넣습니다. for in glob.glob('./data/img/*_0.jpg'): .append(mpimg.imread( )) # 코랩에서 보여 줄 이미지의 크기 plt.figure( =(20,20)) # 원본 이미지를 코랩에서 보이게 하기 for , in enumerate( ): plt.subplot(5, 5, +1) plt.imshow( ) # 사전에 학습된 딥러닝 모델 불러오기 = VGG16( ="imagenet", = ) # 원본 이미지 이름과 Imagenet에서의 해당 이미지 인덱스 = ["maltese", "persian_cat", "squirrel_monkey", "grand_piano", "yawl"] = ["153", "283", "382", "579", "914"] # 그레이디언트 CAM 알고리즘 선택 = GradCAM() # 그레이디언트 CAM 알고리즘이 적용된 이미지가 들어갈 빈 리스트 만들기 = [] # 그레이디언트 CAM 알고리즘 실행 for , in zip( , ): # 이미지를 불러오고 내부에서 처리될 이미지의 크기를 설정합니다. = load_img('./data/img/_0.jpg'.format( ), =(224,224)) = img_to_array( ) # 이미지를 넘파이 배열로 바꿉니다. = ([ ], ) # 그레이디언트 CAM이 실행되는 부분입니다. = .explain( , , int( )) # 실행 후 저장되는 이름입니다. .save( , ".", './data/img/_cam.jpg'.format( )) # 그레이디언트 CAM 알고리즘이 적용된 이미지를 불러오는 부분의 시작입니다. plt.figure( =(20,20)) for in glob.glob('./data/img/*_cam.jpg'): .append(mpimg.imread( )) for , in enumerate( ): plt.subplot(5, 5, +1) plt.imshow( ) # 오클루전 알고리즘 선택 = OcclusionSensitivity() # 알고리즘이 적용된 이미지가 들어갈 빈 리스트 만들기 = [] # 패치 크기를 정합니다. = 40 # 오클루전 알고리즘 실행 for , in zip( , ): = load_img('./data/img/_0.jpg'.format( ), =(224,224)) = img_to_array( ) = ([ ], ) # 패치 크기 설정이 추가됩니다. = .explain( , , int( ), ) .save( , ".", './data/img/_occ1.jpg'.format( )) # 오클루전 알고리즘이 적용된 이미지를 불러오는 부분의 시작입니다. plt.figure( =(20,20)) for in glob.glob('./data/img/*_occ1.jpg'): .append(mpimg.imread( )) for , in enumerate( ): plt.subplot(5, 5, +1) plt.imshow( )