티스토리 뷰

Abstract

CNN과 RNN 구조는 한 번의 연산 과정에서 local neighborhood만을 고려하는 framework입니다. 이에 따른 long-range dependency 문제가 발생합니다. 따라서 저자는 이를 해결하기 위해서 non-local means denoising 기법을 응용한 방법을 딥네트워크에 적용합니다. Non-local operation은 특정 지역에서의 response를 다른 모든 지점 값들의 weighted sum으로 표현하는데요. 이를 통해 Long-range dependency 문제를 해결하고 다양한 task에 접목하고자 합니다.

 

Introduction

-Non local means for denoising

우선 이 논문의 기반 idea가 되는 Non local means 기법을 간단히 알아보겠습니다. 이 기법은 image denoising을 위해 제안된 방법인데요. 우리가 흔히 영상처리 기초에 대해 배울 때 denoising은 smoothing을 통해 진행하곤 합니다. 그러나 box filter 혹은 gaussian filter 등의 local smoothing 기법의 경우 image의 context (전체적인 형태 등) 도 같이 smoothing되어 distortion이 일어납니다. 따라서 이를 보완하기 위해, 구조적 / 의미론적으로 같은 영역끼리 smoothing을 하여 context를 최대한 보존하자는 아이디어를 내게 됩니다. 그림 1을 보면, p라고 표시된 smoothing을 진행하고자 하는 영역에서, 다른 영역들에 대한 weight를 구하고 있습니다. 예를 들어 w(p,q1)은 p 영역에서 측정한 q1 영역과의 유사도를 기반으로 만든 weight가 되겠습니다. 특정 지점에 대한 smoothing을 진행할 때, 앞서 구한 weight들을 기반으로 다른 영역들을 참조하며 smoothing을 진행합니다.

그림 1. Non local smoothing
식 1. NL means의 weight를 구하는 방법

각 영역간의 유사도는 식 1과 같이 구체화될 수 있습니다. Z의 경우 w의 총합이 1이 되게하는 normalization term이라고 생각하시면 되겠습니다. 결국 w는 우리가 아는 softmax function이라고 볼 수 있겠고, 나아가서 구하는 방법을 생각해보면 결국 transformer의 self attention과도 동일하다고 볼 수 있겠네요.

 

식 2. NL 계산식

식 2를 보시면 더욱 명확해집니다. i,j 영역의 유사도를 j번째 영역의 값에 곱해 weighted sum을 하여 i번째 영역의 값을 update합니다. 바로 self-attention의 기본적인 방법과 동일합니다.

 

자, 다시 본 논문으로 돌아와서 보면, 저자 역시 transformer와 self-attention을 인지하고 있습니다. 이 논문이 google scholar 기준 2018년 발표이고, transformer는 17년 발표죠. 그러나 이 논문의 발표 시점에 vision transformer는 아직 등장하지 않았습니다. 따라서 이 논문은 ViT 이전에 벌써 self-attention 개념을 vision 영역에 적용하는 연구였으며, 어떻게 보면 시초? 라고 할 수 있겠네요.

 

Methods

Method는 사실 식 3과 같이 앞서 설명한 global weighted sum을 딥네트워크에 적용하는 것이 전부입니다. 식 1,2와 거의 같은 function임을 확인할 수 있네요.

식 3. Methods
그림 2. 구조도

그림 2를 살펴보면, 더욱 명확해집니다. Query, Key, Value transform의 형태가 드러나 있구요, 다만 이것을 ViT처럼 patch 단위의 tokenization을 거친 token에가 아니라 backbone CNN network의 feature map에서 행하는 것을 확인할 수 있습니다. 여기서 f, 즉 i,j'th feature간의 유사도를 구하는 방법에 대해서 여러 variation을 제시하는데, 사실 별로 중요하지는 않다고 보이고 우리가 흔히 아는 dot product가 제일 좋다는 결론이 납니다. 정말 transformer와 거의 같다고 봐도 될것 같네요. 여기까지가 Non local NN에 대한 설명이었습니다. 정말 간단하죠?

 

댓글