License: MIT
Build Status
Downloads
Downloads
PyTorch를 위한 고급 AI 설명 가능성(Explainability)
pip install grad-cam
고급 튜토리얼이 포함된 문서: https://jacobgil.github.io/pytorch-gradcam-book
이 패키지는 컴퓨터 비전 분야의 설명 가능한 AI(Explainable AI)를 위한 최신 방법론을 담고 있습니다.
이를 모델 개발 중이거나 실제 운영 환경에서 모델 예측을 진단하는 데 사용할 수 있습니다.
또한 새로운 설명 가능성 방법을 연구하기 위한 알고리즘 및 지표의 벤치마크 역할을 하도록 설계되었습니다.
⭐ 컴퓨터 비전 분야를 위한 포괄적인 픽셀 기여도(Pixel Attribution) 방법론 모음.
⭐ 많은 일반 CNN 네트워크와 Vision Transformer에서 테스트됨.
⭐ 고급 사용 사례: 분류(Classification), 객체 탐지(Object Detection), 시맨틱 분할(Semantic Segmentation), 임베딩 유사도 등과 함께 작동합니다.
⭐ CAM을 보기 좋게 만드는 스무딩 방법론 포함.
⭐ 높은 성능: 모든 방법에서 이미지 배치(batches of images)를 완벽하게 지원합니다.
⭐ 설명의 신뢰도를 확인하고 최적의 성능으로 조정할 수 있는 지표 포함.
visualization
| 방법 (Method) | 설명/기능 (What it does) |
|---|
| GradCAM | 평균 기울기를 사용하여 2D 활성화 값에 가중치를 부여합니다. |
| ... | |
| FEM | 활성화 값이 '평균 + k * 표준편차' 규칙을 통해 이진화되는 기울기 없는(gradient free) 방법입니다. |
| ShapleyCAM | 기울기와 헤세 행렬-벡터 곱(Hessian-vector product)을 사용하여 활성화 값에 가중치를 부여합니다. |
| FinerCAM | 유사한 클래스를 비교하고 공유되는 특징은 억제하며 판별적인 세부 사항을 강조함으로써 미세 분류(fine-grained classification)를 개선합니다. |
| ... | ## 시각적 예시 (Visual Examples) |
| 네트워크가 이미지 레이블을 'pug, pug-dog'라고 생각하게 만드는 요소 | 네트워크가 이미지 레이블을 'tabby, tabby cat'이라고 생각하게 만드는 요소 | 'pug, pug-dog' 클래스에 대한 Grad-CAM과 Guided Backpropagation의 결합 |
|---|
| <img src="https://raw.githubusercontent.com/jacobgil/pytorch-grad-cam/master/examples/dog.jpg" width="256" height="256"> | <img src="https://raw.githubusercontent.com/jacobgil/pytorch-grad-cam/master/examples/cat.jpg" width="256" height="256"> | <img src="https://raw.githubusercontent.com/jacobgil/pytorch-grad-cam/master/examples/cam_gb_dog.jpg" width="256" height="256"> |
객체 탐지 및 시맨틱 분할 (Object Detection and Semantic Segmentation)
| 객체 탐지 (Object Detection) | 시맨틱 분할 (Semantic Segmentation) |
|---|
| <img src="https://raw.githubusercontent.com/jacobgil/pytorch-grad-cam/HEAD/examples/both_detection.png" width="256" height="256"> | <img src="https://raw.githubusercontent.com/jacobgil/pytorch-grad-cam/HEAD/examples/cars_segmentation.png" width="256" height="200"> |
| 3D 의료 시맨틱 분할 (3D Medical Semantic Segmentation) |
|---|
| <img src="https://raw.githubusercontent.com/jacobgil/pytorch-grad-cam/HEAD/examples/multiorgan_segmentation.gif" width="539"> |
다른 이미지/임베딩과의 유사성 설명 (Explaining similarity to other images / embeddings)
<img src="https://raw.githubusercontent.com/jacobgil/pytorch-grad-cam/HEAD/examples/embeddings.png">
딥 피처 분해 (Deep Feature Factorization)
<img src="https://raw.githubusercontent.com/jacobgil/pytorch-grad-cam/HEAD/examples/dff1.png">
<img src="https://raw.githubusercontent.com/jacobgil/pytorch-grad-cam/HEAD/examples/dff2.png">
CLIP
| 텍스트 프롬프트 "a dog" 설명 | 텍스트 프롬프트 "a cat" 설명 |
|---|
| <img src="https://raw.githubusercontent.com/jacobgil/pytorch-grad-cam/master/examples/clip_dog.jpg" width="256" height="256"> | <img src="https://raw.githubusercontent.com/jacobgil/pytorch-grad-cam/master/examples/clip_cat.jpg" width="256" height="256"> |
분류 (Classification)
Resnet50:
| 카테고리 | 이미지 | GradCAM | AblationCAM | ScoreCAM |
|---|
| Dog | | | | |
| Cat | | | | |
| 카테고리 | 이미지 | GradCAM | AblationCAM | ScoreCAM |
|---|
| Dog | | | | |
| Cat | | | | |
| Category | Image | GradCAM | AblationCAM | ScoreCAM |
|---|
| Dog | | | | |
| Cat | | | | |
XAI를 위한 지표 및 평가 (Metrics and Evaluation for XAI)
<img src="https://raw.githubusercontent.com/jacobgil/pytorch-grad-cam/HEAD/examples/metrics.png">
<img src="https://raw.githubusercontent.com/jacobgil/pytorch-grad-cam/HEAD/examples/road.png">
사용 예시 (Usage examples)
from pytorch_grad_cam import GradCAM, HiResCAM, ScoreCAM, GradCAMPlusPlus, AblationCAM, XGradCAM, EigenCAM, FullGrad
from pytorch_grad_cam.utils.model_targets import ClassifierOutputTarget
from pytorch_grad_cam.utils.image import show_cam_on_image
...
cam.py에 더 자세한 사용 예시가 있습니다.
CAM을 계산하기 위해 타겟 레이어를 선택해야 합니다.
일반적인 선택지는 다음과 같습니다:
- FasterRCNN: model.backbone
- Resnet18 및 50: model.layer4[-1]
- VGG, densenet161 및 mobilenet: model.features[-1]
- mnasnet1_0: model.layers[-1]
- ViT: model.blocks[-1].norm1
- SwinT: model.layers[-1].blocks[-1].norm1
여러 레이어를 포함하는 리스트를 전달하면, CAM이 해당 레이어들 전체에 걸쳐 평균화됩니다.
어떤 레이어가 가장 잘 작동할지 확신하지 못할 때 유용합니다.
새로운 아키텍처 및 작업에 맞게 조정하기 (Adapting for new architectures and tasks)
GradCAM과 같은 방법들은 분류 모델, 특히 CNN 분류 모델을 위해 설계되었고 원래 주로 적용되었습니다.
하지만 Vision Transformer와 같은 새로운 아키텍처나 객체 탐지(Object Detection) 또는 시맨틱 분할(Semantic Segmentation)과 같은 비분류 작업에도 이 패키지를 사용할 수 있습니다.
비표준 케이스에 적응할 수 있도록, 저희는 두 가지 개념을 마련했습니다.
- reshape transform: 활성화(activations)를 공간 이미지로 표현하려면 어떻게 해야 할까요?
- model targets: 설명 가능성 방법론이 정확히 무엇을 설명하려고 노력해야 할까요?
CNN의 경우, 모델 내부의 중간 활성화는 채널 x 행 x 열(channel x rows x cols) 차원을 가진 다중 채널 이미지입니다.
그리고 다양한 설명 가능성 방법론은 이들을 사용하여 새로운 이미지를 생성합니다.
Vision Transformer와 같은 다른 아키텍처의 경우, 모양이 (rows x cols + 1) x channels 또는 그 외의 형태로 다를 수 있습니다.
reshape transform은 활성화(activations)를 다시 다중 채널 이미지로 변환하며, 예를 들어 Vision Transformer에서 클래스 토큰을 제거하는 방식으로 작동합니다.
예시로는 여기를 확인해 보세요.
model_target 인자
모델 타겟(model target)은 모델 출력을 가져와 우리가 설명하고자 하는 특정 스칼라 출력으로 필터링할 수 있는 호출 가능한 함수(callable)입니다.
분류 작업(classification tasks)의 경우, 모델 타겟은 일반적으로 특정 카테고리의 출력값이 됩니다.
이때 CAM 방법론에 전달되는 targets 매개변수는 ClassifierOutputTarget을 사용할 수 있습니다:
targets = [ClassifierOutputTarget(281)]
하지만 더 진보된 케이스에서는 다른 동작을 원할 수도 있습니다.
더 많은 예시는 여기를 확인해 보세요.
튜토리얼
여기에서는 객체 탐지(object detection)와 같은 다양한 사용자 정의 사용 사례에 이 기능을 사용하는 방법에 대한 상세한 예시를 찾을 수 있습니다:
이 링크들은 빠른 렌더링을 위한 새로운 jupyter-book 문서로 연결됩니다.
실제 jupyter 노트북은 git 저장소의 tutorials 폴더에서 찾을 수 있습니다.
• 노트북 튜토리얼: 더 나은 모델 설명 가능성을 위한 깊은 특징 인수분해 (Deep Feature Factorizations)
• 노트북 튜토리얼: Faster-RCNN을 사용한 객체 탐지(Object Detection)를 위한 클래스 활성화 지도 (Class Activation Maps)
• 노트북 튜토리얼: YOLO5를 위한 클래스 활성화 지도 (Class Activation Maps)
• 노트북 튜토리얼: 시맨틱 분할(Semantic Segmentation)을 위한 클래스 활성화 지도 (Class Activation Maps)
• 노트북 튜토리얼: 모델의 임베딩 출력에 대한 픽셀 기여도 방법 적용 (Pixel Attribution for embeddings)