일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 중학1-1
- 정보처리기사실기
- 운영체제
- 정수와유리수
- 컴퓨터비전
- 정보처리기사필기
- 파이썬
- JSP/Servlet
- 데이터입출력구현
- 코딩테스트
- 자바
- pandas
- 텍스트마이닝
- 파이썬라이브러리
- 머신러닝
- 영어공부
- 중학수학
- SQL
- C++
- 딥러닝
- CNN
- 데이터베이스
- numpy/pandas
- 혼공머신
- 자바 실습
- 연습문제
- 컴퓨터구조
- 데이터분석
- CSS
- html/css
- Today
- Total
클라이언트/ 서버/ 엔지니어 "게임 개발자"를 향한 매일의 공부일지
합성곱 신경망 17 - Grad CAM에 대하여 본문
딥러닝 모델은 이미지를 분류하는 문제를 잘 해결할 수 있다. 여기서 갖는 의문은 딥러닝 모델이 이미지의 어떤 부분을 인식해서 분류하는지이다. 예를 들어 강아지와 고양이를 분류하는 딥러닝 모델은 해당 이미지의 어떤 특징을 포착하는지 알 수 없다. 이런 관점에서 소개한 개념이 Grad CAM이다.
위의 그림처럼 개와 고양이가 함께 있는 사진을 보여주면 해당 모델은 어떤 선택을 할까? 이미지넷 대회의 딥러닝 모델은 입력 이미지에서 하나의 클래스만을 예측하는 것으로 설계되었기 때문에, 개 또는 고양이로 해당 이미지를 분류한다.
Grad CAM을 사용하면 모델이 이미지의 어떤 부분을 중심적으로 관찰하고 있는지 확인할 수 있다. 따라서 모델이 개라고 분류한다면 이미지의 특정한 위치에서 개의 특징을 잡아내고 있다는 가정을 할 수 있다. 다음 예제를 통해 VGG16 모델을 활용하여 앞의 사진을 분류 예측하고, 이미지의 어떤 분분을 가장 중심적으로 포착하는지 확인한다.
위의 그림은 Grad CAM이 작동하는 방식을 보여준다. 일반적인 이미지를 분류하는 CNN 모델에서 Grad CAM에서 주목하는 부분은 완전연결층(FC)을 거치기 전에 위치하는 합성곱(Conv2D) 레이어의 출력 형태이다. 각각의 합성곱 필터 연산을 거쳐서 생성된 이미지 텐서들은 원본 이미지로부터 추출된 특징을 가지고 있다.
여기서 중요한 것은 오차 역전파를 통해서 계산된 가중치 값들은 필터를 거쳐서 생성된 개별 이미지 텐서들이 최종 분류 예측에 끼친 영향력을 나타내는 값이라고 생각할 수 있다. 따라서 각 특성맵 이미지의 가중치를 곱하고, 이 값들을 모두 더하면 원본 이미지에서 합성곱 필터들이 어떤 부분의 특징을 가장 주목하고 있는지 알 수 있다.
Grad CAM 실습해보기
실습을 위해 필요한 패키지들을 먼저 불러온다. 샘플 이미지의 크기를 VGG16 모델의 입력 크기에 맞춰서 (224, 224) 형태로 변환한다.
VGG16 모델을 이미지넷 대회의 학습 가중치 그대로 불러온다. 여기서 주의할 점은 전이 학습가 달리 최종 분류층까지 함께 포함해야 한다. 따라서 모델은 이미지넷 데이터로 학습한 그대로 샘플 이미지를 분류하게 된다.
Grad CAM 모델은 VGG16 모델의 입력과 출력을 그대로 사용하고, 마지막 합성곱층의 출력을 Grad CAM 모델의 두 번째 출력으로 추가하면 된다. Grad CAM 모델에 샘플 이미지를 입력하여 주면, 모델은 VGG16 모델의 이미지 분류 클래스를 예측하여 주고 동시에 합성곱층의 필터 연산 결과를 출력한다.
이제 모델의 예측 확률이 가장 높은 클래스에 해당하는 인덱스(이미지넷은 1000개의 클래스를 가지고 있음)에 대한 필터 이미지들의 가중치를 구한다. ReLU 함수를 거쳐서 음의 가중치를 제거하고 양의 가중치만을 남긴다. 이들 가중치의 합을 필터 이미지에 곱한다. 모든 필터 이미지에 대한 연산 결과를 더해서 하나의 가중치 이미지를 만든다.
이 이미지를 원본 이미지 크기로 변환해 주고, 0~1 범위의 값을 갖도록 조정한다. 이미지를 출력하면 Grad CAM이 활성화된 영역을 확인할 수 있다.
앞에서 구한 Grad CAM 가중치 이미지를 원본 이미지와 겹쳐서 출력한다. 다음 실행 결과를 보면 중요한 특징이 돋보이는 것을 알 수 있다.
이번에는 ReLU 함수를 적용하지 않고 음의 가 중치를 양의 가중치와 함께 모두 통과시킨다. 이들 가중치의 합을 필터 이미지에 곱하고 합하는 과정을 똑같이 진행해 Gradient 이미지를 만든다. 다음과 같이 고양이가 위치하는 영역에 음의 가중치가 표시되는 것을 볼 수 있다.
원본 이미지에 겹쳐서 출력하면 고양이 형태에 대해서 음의 가중치를 인식하고 있는 것을 확인할 수 있다. 하지만 모델은 라브라도 리트리버의 귀 부분에 강한 가중치를 가지고 있기 때문에, 이 특성 정보를 가지고 최종적으로 다브라도 리트리버로 분류한다.
이처럼 Grad CAM을 활용하면 모델이 어느 부분을 보고 판단했는지 시각화할 수 있고, 이 결과를 토대로 정확히 학습 중인지 파악할 수 있다.
학습을 마치고
이로써 합성곱 신경망에 대해서 모두 학습해 보았다. 이미지를 변환하여 어떻게 다른 이미지를 만들 수 있는지 여러 가지 모델을 통해 확인해 볼 수 있었다.
'인공지능 > 딥러닝' 카테고리의 다른 글
합성곱 신경망 16 - Style Transfer 2 : 스타일 변환으로 출력된 다양한 이미지 확인하기 (0) | 2024.11.03 |
---|---|
합성곱 신경망 15 - Style Transfer 1 : 스타일 변환 이미지 출력 및 구조 확인하기 (1) | 2024.11.03 |
합성곱 신경망 14 - GAN(생성적 적대 신경망) 동영상 파일로 만들기 (1) | 2024.11.03 |
합성곱 신경망 13 - Knowledge Distillation (0) | 2024.11.03 |
합성곱 신경망 12 - 이미지 분할(Segmentation) (1) | 2024.11.03 |