Weakly Supervised Lesion Localization With Probabilistic-CAM Pooling
-
요약
본 논문에서 저자들은 기존의 pooling 기법과 차별은 둔 Probabilistic Class Activation Map (PCAM) pooling을 제안하였다. PCAM pooling은트레이닝 하는 동안 CAM의 우수한 localization 능력을 활용한다. 이 방법을 chestX-ray 데이터셋에 적용한 결과 classification과 localization 측면에서 모두 SOTA를 달성하였으며, heatmap도 좀 더 확실하게 생성할 수 있었다.
Contribution
Post-processing 기술 정도로만 사용하던 CAM (Class Activation Map)을 트레이닝 과정에 사용하였다.
Global pooling
Global average pooling 기법은 이미지 분류 분야에서 널리 쓰이고 있다. Global average pooling을 이용해 네트워크 오버피팅을 방지할 수 있지만, chest CAD 분야에서는 뚜렷한 병증을 highlight하는 능력이 떨어질 수 있다는 약점이 있다. 이를 보완하기 위해 아래와 같은 다양한 global pooling 기법들이 제안되었다.
Probabilistic-CAM (PCAM) pooling
Backbone (논문에서는 ResNet-34) 이 되는 마지막 convolution layer[1]로부터 나온 feature를 feature mapXi,jX_{i,j}Xi,j 라 한다. 그 feature map은 1x1 convolution layer로 이루어진 fc (fully connected) layer를 거치게 된다. 이 fc 레이어는 backbone의 마지막 convolution layer와 같은 채널 수를 입력 채널로 출력 채널은 1을 가지는 레이어다. fc 레이어를 거쳐서 나온 값은 logitsi,js_{i,j}si,j라 한다.(shape: [batch_size, 1, H, W]의 dimension을 가짐) 이 logitsi,js_{i,j}si,j는 추후 노멀라이징 하여 heatmap으로 사용된다.
한편, 이 논문에서 특이점은 heatmap을 생성하는 logit을 학습 중에 이용하여 localization을 가이드하고 binary classification하는 데에 사용한다는 것이다. 이 과정은 아래의 식을 이용하여 pooled feature embeddingxxx를 만드는 것으로 시작된다.
wi,jw_{i,j}wi,j는Xi,jX_{i,j}Xi,j의 attention weight를 의미한다. 이것은 fc layer를 지나 얻어진 logit을 sigmoid하여 값을 bound한 다음에 노멀라이징한 값이다. pooled feature mapxxx는 이 attention weight와 backbone의 마지막 레이어에서 나온Xi,jX_{i,j}Xi,j를 곱하여 height와 width 축에 대해 모두 더한 값이 된다. 이 pooled feature mapxxx가 다시 fc layer를 지나 최종적으로 질병에 대한 확률값이 나온다.
먼저 입력 x를 backbone의 넣어 feat_map (shape: [batch_size, C, H, W])을 얻는다. 그리고 fc layer를 의미하는 classifier의 feat_map을 넣어 logit_map (shape: [batch_size, 1, H, W])을 얻는다. 이 logit_map의 channel dimension을 squeeze()로 축소하여 heatmap을 만드는 값으로 사용한다.
feat_map과 logit_map을 이용해서 global_pooling을 한다. 이에 대한 함수는 아래와 같다.
logit_map에 sigmoid를 취해서 prob_map을 만들고 attention weight인 weight_map (shape: [batch_size, 1, 16, 16]을 구한다. weight_map과 feat_map을 곱한 것을 W와 H 축에 대해 sum을 취해 feat(shape: [batch_size, C, 1, 1]) 를 만든다.
최종적으로 이 feat가 classifier에 다시 들어가 병증에 대한 positive 확률을 나타내는 logits이 된다.
정리해보자면, fc layer를 거쳐서 나온 logit_map은 heatmap을 만드는 데에 사용되고, 이 logit_map을 이용해 weight map을 만든 후 backbone의 마지막 레이어 값과 곱해져 병증에 대한 확률 값이 된다.
즉, 위의 그림을 다시 순서대로 나타내면 다음과 같다.
① Backbone의 출력물인 feature map을 classifier에 넣어 logit map을 만든다. Feature map과 logit map을 가지고 attention weight를 만든다.
② 만들어진 attention weight를 feature map과 곱해 feature embedding을 만든다.
③ feature embedding을 다시 fc layer에 넣어 병증에 대한 확률값을 얻는다.
실험 결과
PCAM pooling을 이용한 방법이 classification이나 localization에서 좋은 성능을 보였다는 결과이다.
추가 사항
PCAM pooling을 이용할 경우 병변에 대해 heatmap을 더 크게 생성하는 경향이 있다. 이로 인해 작은 병변에 대한 false positive가 증가할 수 있다고 한다. 한편, github에 올라와있는 모델은 현재 cheXpert 데이터셋의 대해 2번째로 좋은 기록을 가지고 있는 모델이다.(https://stanfordmlgroup.github.io/competitions/chexpert/)