25분
GradCAM: 모델이 어디를 보고 판단했는가
Day 2: CNN 기반 불량 분류
GradCAM: 모델이 어디를 보고 판단했는가
비전 AI 외관검사 > Day 2: CNN 기반 불량 분류
학습 목표
- GradCAM 이 마지막 Conv 층의 활성화와 그래디언트에서 어떻게 계산되는지 설명할 수 있다
- Day 2 에서 학습한 분류기에 GradCAM 을 적용해 히트맵을 생성할 수 있다
- 히트맵이 결함 위치와 겹치는 것만으로는 학습이 잘 됐다고 말할 수 없는 이유를 설명하고, 가림 검사로 확인할 수 있다
GradCAM: 모델의 판단 근거를 보여준다
AI가 "불량"이라고 했다. 왜? 제조 현장에서는 근거 없는 판정을 신뢰하지 않는다. GradCAM은 모델이 이미지의 어디를 보고 판단했는지 보여준다.
GradCAM 원리
[GradCAM 동작 흐름]
입력 이미지
↓
CNN 순전파 (Forward Pass)
↓
특정 클래스에 대한 그래디언트 계산 (Backward)
↓
마지막 Conv 층의 활성화 맵 × 그래디언트 가중 평균
↓
ReLU 적용 (양수만)
↓
히트맵 (해당 클래스에 기여한 영역)
↓
원본 이미지에 오버레이제조에서 GradCAM의 쓸모
| 상황 | GradCAM 없이 | GradCAM 있으면 |
|---|---|---|
| 과검출 | 왜 불량인지 모름 | 어디를 보고 그렇게 판정했는지 후보를 좁힘 |
| 미검출 | 원인 파악 불가 | 결함 영역이 아예 활성되지 않는지 확인 |
| 새 불량 | 학습 필요성 판단 불가 | 관련 영역이 반응하는지 확인 |
| 고객 보고 | "AI가 불량 판정" | "이 영역의 패턴에 반응했다"까지 제시 |
히트맵을 읽을 때 반드시 알아야 할 것
여기서 한 가지를 분명히 하고 넘어간다.
빨간 영역이 결함 위치와 겹친다는 것만으로는 모델이 잘 학습됐다고 말할 수 없다.
이유는 셋이다.
- 히트맵은 항상 0~1 로 정규화된다. 결함이 없는 정상 이미지에도 "가장 붉은 곳"은 반드시 생긴다. 붉은 영역이 있다는 사실 자체는 아무 정보가 아니다.
- 겹침은 우연히도 생긴다. 결함이 화면에서 넓은 자리를 차지하면 아무 데나 찍어도 들어간다. 겹치는 비율을 세려면 정상 이미지와 틀린 예측까지 같은 방식으로 세어 견줘야 한다.
- 히트맵은 상관이지 인과가 아니다. 그 영역이 판정을 만들었는지 확인하려면 그 영역을 없애 봐야 한다.
그래서 이 과제는 "겹치는지 눈으로 본다" 대신 세 가지를 실제로 잰다.
검증 1. 히트맵 최대점이 정답 결함 상자 안에 들어오는 비율 ← 필요조건
검증 2. 히트맵 상위 15% 영역을 배경색으로 가렸을 때
예측이 바뀌는 비율(가림 검사) ← 인과에 가장 가까운 확인
검증 3. 정상 이미지와 오분류 사례의 히트맵을 함께 본다 ← 무엇을 잘못 배웠는지검증 2 에서 예측이 그대로면, 히트맵이 가리킨 곳은 판단 근거가 아니었다는 뜻이다. 이때는 히트맵이 아니라 모델과 데이터를 의심한다.
함께 붙어 있는
vision-inspector시뮬레이터의 히트맵은 모델 활성화가 아니라 샘플을 그릴 때 쓴 결함 좌표를 칠한 것이다. 그 화면에서는 언제나 겹치므로 학습이 잘 됐는지 판단하는 데 쓸 수 없다. 판단은 아래 코드로 한다.
에디터 로딩 중...
핵심 포인트
- • GradCAM 은 마지막 Conv 층의 활성화를 그래디언트로 가중 평균한 것이다. 반드시 우리 불량으로 학습한 모델에 적용해야 의미가 있다
- • 히트맵은 0~1 로 정규화되므로 정상 이미지에도 붉은 영역이 생긴다. 붉다는 사실 자체는 불량의 증거가 아니다
- • 히트맵이 결함 자리에 뜨는 것은 필요조건일 뿐이다. 그 영역을 가렸을 때 예측이 무너져야 판단 근거였다고 말할 수 있다
- • 맞힌 사례만 보면 무엇을 잘못 배웠는지 알 수 없다. 틀린 예측의 히트맵을 반드시 함께 본다
- • 제조에서는 판정 근거를 보여줘야 신뢰받는다. 다만 '근거처럼 보이는 그림'과 '근거'는 다르다
AI로 학습하기 — 꿀팁
히트맵을 근거라고 부를 수 있는지 따져 보기AI 학습 팁
GradCAM 코드를 받는 데서 멈추지 말고, 그 히트맵이 판단 근거라는 것을 무엇으로 확인할 수 있는지 함께 물어라.
PyTorch ResNet 기반 제조 불량 분류 모델에 GradCAM 을 적용하는 코드를 구현해줘. 다만 히트맵을 그리는 데서 끝내지 말고, 다음을 함께 넣어줘: 1) 히트맵 상위 영역을 가렸을 때 예측 확률이 얼마나 떨어지는지 재는 가림(occlusion) 검사, 2) 정상 이미지에서도 히트맵 최댓값이 1 이 되는 이유와 그것을 오해하지 않도록 표시하는 방법, 3) 오분류 사례만 모아 히트맵을 비교하는 코드. 그리고 '히트맵이 결함 위치와 겹치면 모델이 잘 학습된 것'이라는 주장이 왜 충분하지 않은지 설명해줘.
이 팁이 도움이 됐나요?
실습 — 직접 해보기
Vision Inspector (화면 구성 확인용)
검사 화면이 분류 결과·결함 영역·조치 안내를 어떤 순서로 보여주는지 확인하는 용도다. 이 시뮬레이터의 히트맵은 모델의 활성화에서 계산한 것이 아니라 샘플 이미지를 그릴 때 쓴 결함 좌표를 그대로 칠한 것이어서 언제나 결함과 겹친다. 학습이 잘 됐는지 판단하는 데는 쓰지 말고, 그 판단은 이 과제의 코드(가림 검사)로 하라.