Image captioning과 VQA에서 이미지를 더 잘 추론할 수 있는 기법인 Top-down visual attention mechanism이 널리 사용됨. 이번 논문에서 연구진들은 bottom-up attention과 top-down attention을 결합한 architecture를 제안함. 해당 접근법에서 bottom-up attention은 전체 이미지에서 객체 region을 뽑아내고, top-down attention은 feature weight(attention distribution)를 산출해냄.
Global (Visual) Attention Mechanism, 그러니까 Top-down approach 방식의 attention은 이미지 전체가 주어진다. CNN을 거쳐서 나온 Feature map과 GT caption간의 Attention을 계산하는 기존의 방식임.(ex. show attend and tell) 이러한 Approach는 이미지의 전체 영역을 보기 때문에 전체적인 context를 반영한 caption을 생성할 수는 있지만, 이미지 내에 존재하는 각 객체들의 상호작용 속에서 발생하는 상황에 대한 caption을 생성하기에는 어려움.
Bottom-up Attention은 Faster-RCNN과 같은 Detector의 output인 Detection Proposal을 사용하여 Attention을 구하는 방식이다. 더 자세하게는 Faster-RCNN안에 존재하는 RPN-Roi Projection-ROI Pooling을 거친 Feature map을 사용하는데 이 과정에서 Attention이 이루어진다. 왜 이것을 Bottom-up attention이라고 부르며, 왜 Attention이 일어난다는 것일까???
RoI Pooling을 거치면서 max pooling이 일어나는데, 이것을 하나의 Attention이라고 보는 것이다. RoI Pooling을 거치는게 second stage에 들어가기 위한 image feature size를 맞춰주는 것도 있지만, second stage의 detector가 관련한 feature에만 align(attend)할 수 있도록 미리 max pooling으로 중요한 값만 걸러준다는 것!
하지만 Bottom-up Attention은 Top-down Attention과 달리 object 객체만을 활용하기 때문에 (매우 중요할 수도 있는) 이미지의 전체적인 정보를 활용할 수 없다는 단점이 있다.
<aside> 📘 Detector나 hand craft image region을 사용하여 Attention을 구하는 방식 자체는 해당 논문에서 처음 제시된 것이 아니다. 다만 이 논문은 이미지 전체를 보고 Attention을 구하는 방식인 Top down Attention과 이미지의 작은 객체들을 보고 Attention을 구하는 방식인 Bottom-up Attention을 결합한 것에 그 의의가 있는 것.
</aside>
BackBone으로 ResNet101을 사용한 Faster RCNN으로 Region을 추출한다.
fine tuning 방식과 output layer를 추가하는 등… 기존 Faster RCNN을 더 좋게 만드는 노력이 기술되어 있으나 그 부분은 크게 중요한 것이 아니라서 넘어가고, 실질적으로 어떤 크기의 output을 출력으로 내놓는지에 대한 설명을 아래에서 기술하려고 한다.
Faster RCNN의 Output을 사용한다. ResNet101을 사용한 Faster RCNN이 RoI Pooling을 거치면 output이 (batchsizeX36X2X2X2048)의 크기인데(https://velog.io/@iissaacc/RoI-Pooling), 실제 구현에서는 2x2 부분이 없이 (Batch_sizeX36X2048)의 크기다.
아무래도 RoI Pooling을 2x2로 줄이는 게 아니라 그냥 1x1로 pooling을 하고 unsqueeze한 것 같다.