saliency detection을 통해 이미지 상에서 중요한 부분만을 골라낼 수 있다. 이를 통해 object detection, segmentation 등 다양한 vision task에 효과적으로 적용할 수 있다. 하지만 기존의 방법으로 크게 두 가지가 있는데 각각의 문제점들을 해결했다고 한다.
논문에서 deep layer는 어떻고 shallow layer는 어떻고 등 같은 말을 매우 많이 반복한 것으로 보아 이를 해결한 것을 강조했다.
SIFT의 개념을 차용해 scale과 shape에서 불변한 특성을 가질 수 있도록 하였다. 특징적으로는 dilated convolution을 사용하였고 서로 다른 conv층을 통과한 feature들로 pyramid feature extraction을 실시했다.
우측 하단의 예제처럼 high-level (deep)에서 추출된 feature들은 이미지 내에서 대표적인 부분들이다. 따라서 모호성을 띄게 되는데 이때 channel 별로 attention을 수행하여 channel 간의 weight에 가중을 둔다.
Spatial attention의 경우 low-level (shallow)에서 추출되는 feature들은 noise할 수 밖에 없는데 이를 제거하기 위해 적용했다. 특징적으로 parameter 수를 늘리지 않고 global information을 얻기 위해 두 개의 convolution을 사용했는데 나중에 이 아이디어를 사용해도 충분히 좋을 것 같다. 하지만 위의 수식과 아래의 도표에서 볼 수 있듯이 input으로 context-aware high-level feature와 CA를 통과한 값이 들어가는데 맨 위의 architecture와는 다르다. 이 부분에 대한 설명이 없다.
abs()를 사용하는 것은 tanh의 output이 [-1, 1] 때문에 이를 [0, 1]로 만들어주기 위함이다. 근데 왜 sigmoid나 relu를 사용하지 않았는지 도저히 모르겠다. 그리고 conv layer를 사용한 이유는 Laplacian이 이미지의 derivative를 사용하기 때문에 conv operation을 사용하여 해당 연산을 수행할 수 있다.
결과값은 위와 같다.
소감
비디오 데이터에서 perspective의 변화에 따른 accuracy 하락과 background의 연산을 줄이기 위해 saliency detection task의 논문을 읽어 보았다. 중간에 갑자기 spatial attention의 input으로 channel-wise attention의 값이 들어가는 것, absolute를 적용한 것, loss function을 추가적으로 준 것에 대한 확실한 설명이 없어서 살짝 아쉬웠다. 하지만 attention, self-attention과 관련하여 spatial attention에서 1 x k x C, k x 1 x 1 conv layer를 사용한 것이 인상 깊었다.
ref.