JEon.E
일단 ML 엔지니어 생존일지
JEon.E
전체 방문자
오늘
어제
  • 분류 전체보기 (164)
    • 논문 스터디 (8)
      • 논문 구현 (0)
      • Code-LLM (0)
      • ML attack (6)
      • Fuzzing (2)
    • 동향 및 조사 (3)
    • Stack Overflow (6)
    • Setting Tips (14)
    • ML 엔지니어링 (1)
      • AI Math (0)
      • Pytorch (1)
    • 알고리즘 (132)
      • 이론 (8)
      • 문제풀이 (105)
      • 삼성 기출 문제풀이 (18)
    • Hack (0)
      • 해킹 맛보기 (0)

블로그 메뉴

  • 홈

공지사항

인기 글

태그

  • greedy
  • 구현
  • 크루스칼
  • Adversarial Defense
  • dfs
  • 플로이드-워샬
  • Graph
  • NLP black-box attack
  • keras
  • dp
  • 백트래킹
  • Fuzzing 동향
  • 시뮬레이션
  • 프로그래머스
  • BOJ
  • 네이버 부스트캠프
  • 다시
  • 강화학습
  • BFS
  • 그래프

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
JEon.E
논문 스터디/ML attack

[XAI] CAM과 Grad-CAM 논문 리뷰

[XAI] CAM과 Grad-CAM 논문 리뷰
논문 스터디/ML attack

[XAI] CAM과 Grad-CAM 논문 리뷰

2022. 1. 30. 20:19

 

이번에는 이미지 처리에 관련된 모델이 제대로 작동하고 있는지 획기적으로 파악할 수 있으며 각종 관련 모델들에 시각화로 사용하고 있는 기법인 Class Activation MAP 을 소개하고자 한다. 

 

설명할 논문은 다음과 같으며 실험보다는 원리에 집중하여 작성하였다.

  • CAM : (2016 CVPR) Learning Deep Features for Discriminative Localization 
  • Grad-CAM : (2017 ICCV) Grad-CAM: Visual Explanations from Deep Networks via Gradient-Based Localization

1. CAM 

본 논문은 처음으로 class activation map을 제안하였으며 GAP(Global Average Pooling)레이어를 사용하여 클래스에 특정한 activation map을 추출한다.

 

Q1. 본 논문은 어떤 원리를 사용할까? : Class Activation Mapping 

[그림 1] CAM의 전체 Architecture. 구조에서 보다시피 last convolution layer와 GAP레이어로 인한 weight을 토대로 Class Activation Map을 구성한다.

일반적으로 CNN모델의 last convolution layer의 특징맵은 모든 분류 클래스에 대한 특징맵(feature map)을 추출하게 된다. 

이는 convolution 레이어가 모델의 특징을 추출한 후, 이를 토대로 fully connected 레이어가 클래스를 분류하기 때문이다. FC레이어는 모든 분류에 대한 특징맵에서 클래스와 관련된 feature의 가중치를 높이고 그외의 가중치는 낮추는 방식으로 학습을 진행하게 된다.

그렇다면 모든 분류 클래스에 대한 특징맵에서 원하는 특정 클래스에 대한 특징맵만을 추출할 수는 없을까?

본 논문에서는 GAP레이어(Global Average Pooling layer)를 활용하여 모든 클래스에 대한 특징맵에서 클래스를 특정한 특징맵을 추출할 수 있음을 증명하였다.

 

 

GAP레이어를 사용하는 이유는 무엇일까?

GAP은 마지막 합성곱 레이어에서 각 차원의 특징맵에서 평균을 내어 weight을 생성한다. 이는 역으로 GAP의 각 가중치를 각 차원의 특징맵에 곱하면 자연스럽게 영향을 많이 준 feature은 큰값을, 적게 준 feature은 작은 값을 갖게 됨을 의미한다. 

본 논문에서는 이를 Fk=∑x,yfk(x,y)Fk=∑x,yfk(x,y) (특징맵의 변수)라 부르고 있다.

 

풀링방식에는 GAP뿐만 아니라 GMP(Global Max Pooling)방식 또한 존재하나 GMP는 가장 영향을 주는 값 외에 이미지 전체의 영향을 식별하기가 어려워 CAM 생성에 적합하지 않았다고 서술되어 있다. 

 

 

[그림 2] 모델의 GAP 이후의 레이어 형태

사실 CAM 논문에서 클래스를 특정하는 기법은 가장 처음에 제안된 CAM 논문임에도 잘 쓰이지 않는 이유가 된다. 
클래스를 특정할 때 GAP 레이어의 출력을 사용하다보니 GAP을 사용하는 모델 외에는 사용할 수가 없다. 
어떻게든 사용하려면 기존 모델에 GAP 레이어를 추가하는 방안(last convolution layer 다음에 GAP+1fc layer+softmax layer로 classifer를 재 구성한다.)이 있긴 하나.. 이는 모델을 변형하게 될 뿐만아니라 기존의 가중치와도 달라지게 되어 실제 모델과 달라진다는 문제가 발생한다. 

 

 

Q2. GAP을 이용해서 대체 어떻게 클래스를 특정하는걸까? CAM 과정 

  1. GAP의 한 유닛 k의 변수값은 Fk=∑x,yfk(x,y)Fk=∑x,yfk(x,y) 와 같고, wckwck는 유닛 k에 대하여 클래스와 연관된 가중치 값이다.
  2. 클래스에 대해 softmax의 입력값 ScSc은 Sc=∑kwck∑x,yfk(x,y)=∑x,y∑kwckfk(x,y)Sc=∑kwck∑x,yfk(x,y)=∑x,y∑kwckfk(x,y)와 동일하게 되며 softmax의 출력값인 Pc는exp(Sc)∑cexp(Sc) 가 된다.
  3. Sc을 각 (x, y) 좌표로 세분화해서 살펴보면 결국 ∑x,y를 제외한 ∑kwckfk(x,y) 은 좌표 (x,y)에 대한 class의 score를 살펴볼 수 있게된다. 본 논문에서는 클래스 c에 대한 class activation map을 Mc(x,y)로 정의하고 있다. Mc(x,y)=∑kwckfk(x,y)
  4. 입력 이미지의 크기로 CAM을 upsampling하면 class-activation된 이미지를 표시하는 결과를 확인할 수 있다. 

 

2. Grad-CAM 

Q3. CAM 기법의 한계 

위에서 언급했다시피 CAM은 classifier의 구조가 GAP, fully-connected layer, softmax layer로 이루어져야만 특징맵의 클래스를 특정할 수 있다는 단점이 있었다. 물론 모델의 classifier 구조를 위의 3개의 레이어로 재구성하여 CAM을 추출할 수도 있겠지만 이는 실제 모델의 가중치를 잃어버리는 결과를 낳기 때문에 정확한 class activation map이라고 보기엔 어렵다.

또한 결국 마지막 레이어는 softmax 레이어가 되어야하므로 이미지 분류작업이 아닌 image captioning, visual question answering 등의 다양한 분야에는 적용할 수 없다는 한계도 있었다. 

 

Q4. Grad-CAM은 어떤 원리로 동작하며 기존 CAM과 어떤 점이 다를까? 

Grad-CAM은 모델의 구조가 한정된다는 CAM의 단점을 보완하였으며 더 나아가 이미지 분류모델뿐만 아니라 softmax 레이어가 존재하지 않는 분야에서도 동작하도록 gradient를 활용하는 방법을 제안한다. 

 

Q4:: 1. Using Gradient Information : softmax 레이어 대체

Grad-CAM은 마지막 레이어(softmax layer) 전 레이어 yc에서 마지막 합성곱 레이어 Ak까지 backpropagation하여 gradient를 얻는 것으로 GAP레이어와 softmax레이어의 조합을 통한 weight값 없이도 클래스를 특정할 수 있도록 하였다. 

 

Q4:: 2. No GAP : 수식으로 GAP 레이어를 대체

Grad-CAM은 특징맵 Ak의 한 Ai의 (x, y)를 모두 합하여 평균을 내는 것으로 GAP 레이어를 쓰지 않고도 동일한 성능을 내도록 하였음. 

 

Q4:: 3. ReLU를 통한 의미있는 지역 확대

∑kackAk 에 ReLU를 씌우는 것으로 긍정적인 gradient 값만 남기도록 하였다.

 

반응형
저작자표시 비영리 변경금지 (새창열림)

'논문 스터디 > ML attack' 카테고리의 다른 글

[2020 EMNLP, NLP black-box attack] BERT-Attack Adversarial Attack Against BERT Using BERT  (0) 2023.06.03
[AAAI 2020, NLP black-box attack] TextFooler  (1) 2023.05.16
[2017 NIPS] Attention is All You Need 리뷰  (1) 2022.10.04
[AML Defence][2019 CVPR] Feature Denoising for Improving Adversarial Robustness 논문 리뷰  (0) 2021.08.22
[AML Defence][2018 ICLR] Defense-GAN 논문 리뷰  (0) 2021.04.03
    '논문 스터디/ML attack' 카테고리의 다른 글
    • [AAAI 2020, NLP black-box attack] TextFooler
    • [2017 NIPS] Attention is All You Need 리뷰
    • [AML Defence][2019 CVPR] Feature Denoising for Improving Adversarial Robustness 논문 리뷰
    • [AML Defence][2018 ICLR] Defense-GAN 논문 리뷰
    JEon.E
    JEon.E
    ML Security Engineer로 살아남기 도전중
    일단 ML 엔지니어 생존일지ML Security Engineer로 살아남기 도전중

    티스토리툴바

    개인정보

    • 티스토리 홈
    • 포럼
    • 로그인

    단축키

    내 블로그

    내 블로그 - 관리자 홈 전환
    Q
    Q
    새 글 쓰기
    W
    W

    블로그 게시글

    글 수정 (권한 있는 경우)
    E
    E
    댓글 영역으로 이동
    C
    C

    모든 영역

    이 페이지의 URL 복사
    S
    S
    맨 위로 이동
    T
    T
    티스토리 홈 이동
    H
    H
    단축키 안내
    Shift + /
    ⇧ + /

    * 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.