Review: Non-local Neural Networks

Brian Jaehong Aum
Lunit Team Blog
Published in
11 min readJun 5, 2020

이 포스팅은 루닛 블로그에 2018년 1월에 올렸던 포스트입니다.

원문 링크: https://blog.lunit.io/2018/01/19/non-local-neural-networks/

이번 포스트에서는 한동안 arxiv-sanity.com 에서 상위권에 머물었던 Kaiming He의 2017년 11월에 공개된 논문, ‘Non-local Neural Networks’를 소개 드리도록 하겠습니다. 간략히 요약하면 이 논문에서는 기존 네트워크에 차용 가능한 Non-local한 연산 방식을 제안했는데, 이 연산을 이미 학습되어있는 네트워크의 중간에 집어 넣어 비디오 분류하기 문제에서 기존 네트워크의 성능을 크게 개선하는 성과를 거두었습니다.
여담이지만 요즘 FAIR 그룹에서 논문을 정말 많이 쏟아내네요. 특히 이번 논문과 같이 대학원생들이 FAIR에서 인턴으로 있는 동안 Kaiming He나 Ross Girshick과 같은 대가의 지도를 받아 제1저자로써 좋은 논문을 발표하는 경우들이 종종 있는데, 상당히 인상적입니다.

1. Introduction

구분을 하자면 우리가 흔히 사용하는 Convolution은 local operator에 속합니다. 연산시 kernel의 크기 만큼만 볼 수 있기 때문이지요.

때문에 Convolutional neural network (CNN)의 경우 넓은 receptive field를 확보하기 위해 (영상의 더 넓은 부분을 보기 위해) Convolution를 여러차례 겹쳐 쌓기도 하고, Pooling layer를 통해 봐야하는 영상의 크기를 줄이기도 합니다. 하지만 이러한 방식은 receptive field를 넓힌다는 측면에서 크게 효율적인 방법은 아닙니다. 충분한 receptive field를 확보하기 위해선 네트워크의 깊이도 상당히 깊어져야하는데, 이는 연산량 대비 효율의 측면에서 그닥 매력적인 방법이 아니기 때문입니다. 이를 극복하고자 이번 논문에서는 기존의 Convolution의 local한 특성을 보완해 줄 수 있는, 한번의 연산이 영상 전체 영역을 대상으로 하는 Non-local한 연산을 제안했습니다. 이 연산의 경우 기존의 CNN에 손쉽게 적용 가능하고, 특히 비디오 분류 문제에서 성능 향상이 두드러졌는데, 구체적으로 어떤 방식으로 동작 하는지 설명하기에 앞서, 이해를 돕기 위해 이 논문의 아이디어에 많은 영향을 준 Non-local Means Filter라는 노이즈 제거 필터에 대해 간단히 알아보도록 하겠습니다.

2. Non-local Means Filter

Computer vision에서 노이즈 제거 문제를 다루어보신 분이라면 Non-local Means Filter (NLM Filter)에 대해 들어보셨을 것입니다. NLM Filter는 2000년대 초반에 소개된 상당히 좋은 성능을 보여주는 노이즈 제거 필터인데, 논문의 저자는 NLM Filter로 부터 영감을 받아서 새로운 Non-local operation을 제안했다고 합니다. NLM Filter는 주로 speckle 형태의 랜덤 노이즈를 제거하는데 많이 사용됩니다.

랜덤 노이즈는 말그대로 랜덤한 특성을 띄는 노이즈이기 때문에 매번 영상을 촬영할때마다 촬영하고자 하는 대상은 그대로 있지만, 노이즈는 랜덤하게 변합니다. 그래서 랜덤 노이즈가 제거된 영상을 얻고자 할때는 동일한 사진을 여러 차례에 거쳐 촬영하고 이들 사진을 합쳐서 평균을 내주면 랜덤한 특성은 사라지고 우리가 원하는 사물만 깨끗하게 남아있는 영상을 얻을 수 있습니다. 하지만 동일한 영상을 여러차례에 거쳐서 촬영하는 것은 상당히 귀찮은 일이고 때론 불가능 할 수도 있습니다. 이를 극복하고자 NLM Filter는 한 장의 영상만을 가지고 기존의 노이즈 제거 방법과 같은 원리를 이용하여 노이즈를 제거합니다. 자세히 살펴보면 대체로 한 장의 영상 안에도 서로 유사한 영역들이 상당히 많이 존재합니다. 예를 들면 위 사진에서 p 지점의 경우 p의 위 아래에 q1, q2와 같이 p와 유사한 구조의 지점들이 존재합니다. 때문에 한 영상 안에서도 이러한 유사한 영역들을 모아준 후 평균을 취해주면 여러장의 영상을 평균해 준 결과와 유사한 결과를 얻을 수 있습니다. 이러한 원리를 이용하는 NLM Filter는 노이즈를 제거하는데 있어서 여타 다른 필터들에 비해 상당히 좋은 성능을 보여줍니다. NLM이라는 이름에서 드러나듯이 다수의 필터들과 가장 다른 주안점은 영상의 주변부 (local) 만을 이용한 것이 아니라 영상 전체 영역 (non-local)을 활용한 필터라는 것이었습니다. 이러한 특성 덕분에 NLM Filter는 한동안 가장 좋은 성능을 가진 노이즈 제거 필터였고, 현재까지도 가장 좋은 노이즈 제거 필터로 인정되고 있는 BM3D 필터 역시도 NLM의 원리를 차용하고 있습니다.

2. Non-local Neural Networks

NLM Filter의 핵심은 영상 전체 영역, 즉 non-local한 영역에서, 서로간의 유사도를 측정하고 이를 활용하는데 있었습니다. 우리가 많이 사용하는 기존의 CNN의 경우는 엄밀히 보면 local 한 특성 만을 볼 수 있는 구조입니다. CNN에 사용되는 convolution이나 pooling 모두 local operator에 속하기 때문이지요. receptive field 크기의 관점에서 보면 local operator를 여러차례 쌓으면 receptive field의 크기를 키울 수는 있지만 아무리 많이 쌓더라도 결코 한 번에 전체 영역을 살펴보는 non-local operator와 같을 수는 없습니다. 때문에 자연스레 non-local operator를 네트워크에 추가하면, 이전에는 인식하지 못하던 영상의 새로운 특성을 네트워크가 학습할수 있지 않을까? 하는 기대를 할 수 있게 됩니다. 논문의 저자는 NLM Filter의 아이디어를 차용해서 non-local block 이라는 구조를 제안했습니다. 그리고 이를 기존의 CNN에 추가하면 네트워크의 성능을 크게 향상시킬 수 있다는 결론을 얻었습니다. 이제 수식과 그림을 보면서 좀 더 구체적으로 저자가 제안한 구조는 어떤 것인지 알아 보도록 하겠습니다.

3. Experiments

논문에서는 Kinetics dataset이라는 2017년 비디오 분류 챌린지에서 사용된 데이터셋을 이용하여 실험하였습니다. Kinetics dataset은 학습용으로 약 24.6만개, 검증용으로 약 2만개의 비디오 데이터로 구성되어 있으며, 각각의 비디오는 한 가지 사람의 동작과 연관되어 있습니다. 비디오를 보고 사람이 어떤 행동을 하고있는지를 맞추면 되는 문제입니다. 여기서는 네트워크를 두 가지를 사용하여 실험 하였습니다.

3.1 Instantiations

3.2 Which stage to add non-local blocks

그렇다면 non-local block은 네트워크의 어느 위치에 삽입되는것이 가장 적절할까요? 실험 결과를 살펴보면 너무 네트워크가 끝나가는 위치에 배치하는것 보다는 그보다 좀 더 앞에 배치하는 것이 더 적절한것을 확인 할 수 있습니다.

3.3 Going deeper with non-local blocks

지금까지는 non-local block을 하나씩만 삽입하였는데, 더 많이 삽입하면 어떻게될까요?

4.4 Non-local network vs. 3D network

지금까지 사용한 C2D 모델은 시간축으로는 제한적으로만 볼 수 있었기 때문에 사실 non-local block을 사용하면 당연히 더 좋은 성능을 낼 것이라는 것을 기대할 수 있습니다. non-local block이 이전에는 제한적으로 볼 수 밖에 없었던 시간축 정보를 볼 수 있게 해주기 때문이지요. 그렇다면 이번에는C2D에 non-local block을 적용한 모델과, 적극적으로 시간축 정보까지 살펴보는 앞서 소개한 I3D모델의 성능을 비교해 보겠습니다.

이를 살펴보면 놀랍게도 C2D 모델에 non-local block을 사용한 모델이 I3D모델에 비하여 파라미터 수, 연산량 측면에서 더 적은 자원을 요구하면서도 성능은 더 우수한 것을 확인할 수 있습니다.
마지막으로 이번에는 I3D모델에 non-local block을 적용한 결과를 살펴보도록 하겠습니다.

I3D모델에 non-local block을 적용할 경우 기존에 비해서 확연한 성능 향상을 관찰할 수 있습니다.

4.5 Overall results

이 결과를 바탕으로 2017년에 있었던 Kinetics competition의 결과와 비교를 해보면 아래와 같습니다.

위 테이블에서 회색으로 표현된 3-stream 모델들이 해당 competition에서 우승한 모델들인데, 위 모델들의 경우 Non-local blocks + I3D 모델 (NL I3D)과 비교했을때, RGB값 만을 이용한 경우에는 성능이 한참 뒤쳐쪄있고, optical flow와 audio정보까지 이용해야 비로소 NL I3D모델과 비슷한 성능을 보이는 것을 확인할 수 있습니다.
그리고 끝으로 non-local block의 연산 결과를 시각화한 결과를 살펴보도록 하겠습니다.

5. Summary

이 논문에서는 non-local block이라는 상대적으로 구현하기 용이한 구조를 이용하여 기존 네트워크의 성능을 크게 향상시켰습니다. 사실 non-local block의 경우 특히나 비디오 데이터에서 좋은 성능을 보일것이라고 쉽게 예상할 수 있었습니다. 이는 비디오 데이터의 경우 특성상 시간 축 상으로 비슷한 영상들이 연속되어 배치되어있는 형태를 띄는데, non-local block은 이것들 간의 관계를 직접적으로 사용하도록 만드는 구조를 띄고 있기 때문입니다. 앞으로 비디오 데이터를 다룰때 네트워크의 성능향상을 원한다면 non-local block을 한번쯤은 사용해 보는것이 좋겠다는 생각이 듭니다.
재미있는 점은 논문에서는 비디오가 아닌 사진과 같은 2D 영상에 대하여서도 non-local block을 적용하여 성능 개선이 얼마나 이뤄질 수 있는지 실험을 해보았는데, 2D 영상에서도 non-local block을 사용하면 성능향상이 이뤄지는 것을 확인할 수 있습니다. 자세한 사항은 논문을 참고 바랍니다. 이와 더불어 이 포스트에서는 담지 못한 더 자세한 내용들이 논문에 있으니 non-local block에 흥미를 느끼신 분이나, 본인의 네트워크에 적용해보고 싶으신 분들은 한번쯤은 논문을 직접 읽어보시는 것을 추천드립니다.

--

--

Brian Jaehong Aum
Lunit Team Blog

Ph.D in Computer Science. Working at Lunit since 2017. Former deep learning research scientist. Current product manager.