CNN은 blackbox이기 때문에 왜 학습이 잘 안되는지 보기가 힘들다.
CNN내부를 보고 시각화 한다는 것은 debugging tools를 갖는것과 같은의미다
Visualizing CNN
1-1. ZFNet
ZFNet은 2013년 imagenet 대회에서 우승함으로 cnn을 시각화하는것이 눈을 호강하기 위함이 아닌 실질적으로 유의미한 작업이라고 판별받음
1-2. Filter weight visualization - Low level feature
- 2차원부터는 필터수가 많아져서 사람이 보기 힘들다
- visualization을 하는것은 사람의 눈으로 보는거기때문에 뒷쪽 레이어는더 추상적합성이된다.
1-3. visualization type
- 크게 왼쪽으로 이동하는건 모델에대하여 분석, 오른쪽으로 이동하는건 모델의 결과물에 대하여 분석 하는 방법이있다.
- 왼쪽으로
Analysis of model behaviors
2-1. Embedding feature analysis - High level feature
1) Nearest neighbors(NN) in feature space를 활용
- 쿼리가 주어지면 쿼리영상과 유사한 이웃 영상을 찾아준다.
2) Dimensionality reduction
- 고차원 space에 있는 vector를 차원축소를 사용한다
t-SNE - High level feature
- 숫자 데이터에대한 클래스를 보면 8과 3과 5가 유사하게 생겼기 때문에 feature space에서도 유사하게 보고있구나를 예상가능
Layer Activation - Mid, High level feature
- Alexnet의 conv5에 있는 138번째 channel(hidden-node)을 보고 강조를 했더니 얼굴을 나타내는 필터임을 알 수 있다
- 53번째의 channel은 계단을 찾는 필터임을 알 수 있다.
Maximally activating patches - Mid level feature
- hidden node의 한 채널에서 가장 큰값의 주변을 patch해서 확인
- 동그란 코에대한 색에대한 패턴,
- 분석하고자 하는 특정 layer를 하나 정한다
- ex) conv5 layer 중의 14/256 의 layer
- 예제 데이터를 backbone 네트워크에 넣어서 각 layer의 activation을 저장한다
- 해당 layer에서 가장 큰값을 갖는 위치를 파악하고, 그 위치에 오기전의 첫 입력 domain(이미지)에서 파악된 위치의 receptive fields에 대한 patch를 뜯어온다
Class Visualization - Last level feature
- 각 클래스를 판단할때 이 네트워크는 어떤 모습을 상상하고있구나 라는 생각이 가능
- 최종결론을 보고 CNN에 대한 해석을 내놓는다.
- 위의 값은추출하는 방법은 최적화를 통해서 찾아야한다.
- loss를 만들어준다
- 두개의 loss를 합성한다.
- \begin{equation} I^{*}=\arg \max f(I)-\operatorname{Reg}(I) \end{equation}
- argmax 부분
- I는 입력이고 f는 CNN모델
- ex) 강아지 클래스에대한 스코어를 출력하는 부분만 고려해서 maximize
- 랜덤한 이미지를 마구 넣으면 클래스 스코어가 낮게 나올텐데 이 값이 높게나오는 I를 찾는과정
- Regularization term
- 앞부분 argmax만 사용하면 영상이 아닌 부분도 찾게된다 (0
255 or norm된 01 의 값이아닌값) - 그렇기때문에 Reg term을 추가한다
- 각 픽셀의 제곱의 sum이 0이될수록 유리하다.
- 람다를 곱해서 값을 컨트롤한다.
- 앞부분 argmax만 사용하면 영상이 아닌 부분도 찾게된다 (0
- Gradient Ascent를 사용한다, 부호만 다르고 같다.
- Gradient ascent - Image synthesis
- 임의의 영상(random init or blank)을 분석하고자하는 cnn모델에 넣어준다
- backpropagation을 통해 입력이 어떻게 변해야 target score가 높아지는지 학습하고 input image를 업데이트
- 두번째 부터는 임의의 영상이 아닌 updated된 input image를 사용
- 위의 과정들을 여러번 반복
Model decision explanation
- 모델이 특정 입력을 봤을때 어떤 각도로 봤는지에 대한 해석
3-1. Saliency test
1) Occulusion map
- A라는 map을 넣었을때 elephant라고 말할 확률
- map을 어느 위치에 넣느냐에 따라 값이 바뀐다
- 검은색 부분은 연관성이 높고, 밝은 부분은 연관성이 낮다
2) via Backpropagation
- 위의 graident ascent를 이용한 몽환적인 이미지를 확인한것과 유사하다
- 랜덤이미지가 아니라 특정 이미지를 classification해보고 최종 결론이 나온 class에 결정적으로 영향이 미친부분에 heatmap표시
- input에서 어떤 부분이 민감한지를 알 수 있다.
- 현재 데이터가 어떻게 해석되는지를 볼 수 있다.
과정
- 입력 영상을 넣어서 class score를 얻는다.
- backpropagation을 입력 도메인(이미지)까지 쭉 한다.
- 입력부분의 흰 영역이 많이 바껴야 score가 바뀐다는 것을 의미
- 음수 양수보다는 크기가 더 중요해서 절대값을 사용한다.
- 이 과정을 반복한다
3-2. based Saliency
1) Rectified unit (backward pass)
- cnn을 할 때에 relu를 많이 사용해서 relu를 기준으로보면 음수는 무조건 0 으로 대체한다
- forward연산할때 음수 위치값을 기억해두고 backward할 때 그 부분을 0으로 대체한다
이런 deconv의 방식과 forward의 위치를 저장해놨다가 backward할때 해당 위치값을 0으로 만드는 방식에서 새로운 아이디어를 만들어내게된다.
올라갈때와 내려갈때의 값 모두 0으로 만든다 이 방식을 Guided Backprop이라고한다.
확인이 가장 잘 된다
3-3 Class Activation mapping (CAM)
1) CAM
- 유명하고 가장 많이 사용되는 방법
- heatmap을 그려주고 이를 잘 활용하면 boundingbox도 생성가능
- FCLayer를 하기 전에 GAP(GlobalAveragePooling)을 먼저 통과한다.
- CAM architecture를 갖는 모델을 다시 학습한다.
- 재학습하기 때문에 성능도 변한다. (떨어질 수 있다)
- GoogleNet 경우에는 마지막이 GAP와 1개의FC layer가 있으므로 변형하지 않고 바로 사용이 가능하다.
2) Grad-CAM
- CNN이기만 하면 뒷부분이 얼마나 복잡하던지 상관없다
- 모든 아키텍처가 이렇게 할 수 없기 때문에 구조변경도없고, 재학습도없이 사용할 수 있는 Grad-CAM이 개발됨
- 어느 부분을 보고 강아지라고, 고양이라고 예측했는지 알기 편하다.
알파는 weight를 나타냄
Guided Grad CAM
- Guided backprop의 sharp한 부분과 Grad-CAM을 곱해서 핵심부분을 더 sharp하게 visualization해준다.
SCOUTER
- 최근에는 7을보고 왜 1이 아닌지 2가 아닌지에대한 비교대조 가능한 해석이 됨
ConClusion
GAN dissection
- GAN의 어떤 hidden node가 어떤 역할을 하는지 어떤 부분에 기여하는지에 대한 파악도가능하다.
- 아래의경우 door 생성에 대한 히든노드를 찾아놨다면 특정 영역을 마스킹해서 문을 만들게한다.
- 유저가 컨트롤할 수 있는 GAN을 만들 수 있다.
해석가능하면 응용도가능하다
'부스트캠프 AI Tech 2기 > 2기 CV U-Stage' 카테고리의 다른 글
Instance/Panoptic Segmentation and Landmark Localization (0) | 2021.09.14 |
---|---|
AutoGrad (0) | 2021.09.14 |
Object Detection (0) | 2021.09.10 |
Semantic Segmentation (0) | 2021.09.09 |
CV의 DL 발전(2) (0) | 2021.09.07 |