공부정리/Computer Vision
[핵심 머신러닝]Class Activation Map (CAM) (2) - GradCAM
sillon
2024. 1. 15. 14:02
728x90
반응형
해당 게시물은 아래의 유튜브 영상을 정리한 글입니다.
https://www.youtube.com/watch?v=rRiygGHjkOQ
이전 게시 글에서는 CAM에 대한 내용을 포스팅 하였음.
이번 게시글을 통해서는 Original CAM의 한계점을 개선하기 위해 만들어진 GradCAM에 대해 이어서 작성 함.
CNN + CAM 구조
CNN + CAM 구조
- Convolution layer와 pooling layer를 활용해서 이미지 내 정보를 요약
- 마지막 convolutional layer 뒤에 global average pooling 구조를 사용
- Global average pooing (GAP) ?
Original CAM 구조의 한계점
- Global average Pooling layer를 반드시 사용해야함
- 따라서 뒷부분에 대한 또 다시 fine tuning 을 해야함
- 마지막 convolutional layer에 대해서만 CAM 추출이 가능
Grad-CAM(2017)
- CAM 방법론 이후 1년 뒤에 등장
- 2017년도 ICCV(International Conference on Computer Vision)에서 소개됨
Grad-CAM 구조
- GAP 사용 안함
- CNN 기본 구조를 변형하지 않고 그대로 사용함 (즉, GAP Layer 필요 없음)
- Gradient는 특정 class에 특정 input이 주는 영향력
만약 아이언맨이면, 아이언맨 클래스에 영향을 주는지에 대한 가중치를 본다
<C Class에 대한 CAM Score>
= 예측 class = c Class 예측하는 K번째 Feature Map에 대한 Weigh = K 번째 Feature Map = Feature Map 내 i,j 위치 값 = Feature Map 별 합
첫번째 피처맵의 값을 모두 더한다. 그리고 피쳐맵의 웨이트를 곱함
만약 Global Average Pooling을 사용하지 않는다면?
- Feature map 별 Weight도 사용하지 못함
- Weight를 정의하는 방식을 바꾸자
Weight를 정의하는 방법을 바꾸는 법
-> Feature map의 각 원소가 특정 class에 주는 영향력
-> Gradient
각각의 feature map 원소를 미분함 -> gradient 값이 얻어짐
각 featrue map의 값들이 아웃풋에 어떤 영향이 있는지 살펴봄
기존에 weight로 구하고 featrue map으로 구해줬던 값들을
오리지널 CAM 에서는 학습으로 구했었음
이제는 각 Feature map에 대해 미분하여 값을 구하게 됨
각 요소의 최종 결과를 미분하여 원소마다 gradient 를 구하게 되어 영향력을 확인하게됨
Grad-CAM 의 예시
1. 강아지 분류
강아지 얼굴을 보고 판단
2. XAI 의료 영상
화살표 부분이 강조되어야하는 부분인데, 이 부분에서 잘 찾았다는 것을 보여줌
3. 대선 후보 분류
다른 후보의 경우 얼굴과 같은 특징을 잘 반영한 모습이 보이지만,
홍준표 후보의 경우엔 빨간 넥타이가 가장 강조 되었던 결과를 보임
이 글은 옵시디언 프로그램을 통해 티스토리에 게시되었습니다.
728x90
반응형