논문

하루에도 수만개의 글자를 읽고 있습니다. 하루에도 수백장의 종이를 들춰 읽습니다.
이것은 그 읽기에 대한 일기입니다.

Annotating Object Instances with a Polygon-RNN

1. Introduction

이 연구의 목표는 라지 스케일 데이터셋(large scale dataset)에서의 시맨틱 세그멘테이션(semantic segmentation)을 좀 더 빠르게 처리하면서도 가능한 정확하게 하는 것이 목적입니다. 이를 위해 인터랙티브 세그멘테이션 방법을 제안합니다. 바운딩 박스가 주어지면, 순환신경망(Recurrent Neural Network)을 이용하여 객체의 아웃라인을 표현하는 폴리곤을 생성합니다. 이를 Polygon-RNN이라고 합니다. Polygon-RNN은 크롭된 이미지를 입력으로 사용하여 폴리곤의 각 점들을 순차적으로 생성하게 됩니다. 때문에 작업자는 점들의 위치를 언제든 수정할 수 있게 되어 더 정확한 작업을 할 수 있습니다.

2. Related Work

Semi-automatic annotation. 대부분의 방법들은 픽셀 수준(pixel-level)에서의 픽셀들 간의 smoothness를 이용하는 그래피컬 모델(graphical model)를 사용합니다. 때문에 물체 자체의 모양에 대한 정보를 이용할 수 없어질 뿐더러, 그림자나 포화(saturation)된 영역, 낮은 해상도 부분에서의 모호성을 처리하기 어렵고, 레이블링된 결과의 구멍(hole)이 생기는 것을 막을 방법이 없습니다.

Object instance segmentation. 많은 방법들은 픽셀 수준에서 박스나 패치 내에서 CNN을 수행하여 레이블링을 하게 됩니다.

3. Polygon-RNN

객체를 폴리곤으로 레이블링하는 효율적인 도구를 만드는 것이 목적이기 때문에 일반적인 세팅을 가정하엿습니다. 사용자가 객체 주변을 감싸는 바운딩 박스를 입력하면, 알고리즘이 RNN을 이용하여 객체를 감싸는 닫힌 폴리곤 아웃라인을 유추하게 됩니다.

폴리곤을 구성하는 순서가 있는 2D 점들을 $(c_t)_{t \in \mathbb{N}}, c \in \mathbb{R}^2$으로 나타내었습니다. 폴리곤은 닫혀(closed)있어 순환하기 때문에 같은 데이터라도 시작점에 따라 다른 구성을 가질 수 있습니다. 여기서는 폴리곤이 항상 시계 방향으로 진행하도록 고정하였고, 시작 지점은 어느 점이나 가능하도록 하였습니다.

RNN기반의 방법이기 때문에 매 시간 단위마다 점 하나를 유추합니다. RNN의 입력은, 잘라낸(crop) 이미지를 CNN을 이용하여 만든 특징맵과 여기에 최근 유추했던 2개의 점 위치, 그리고 처음 점 위치를 합한 것을 사용합니다. 이전 2개의 전은 폴리곤의 방향을 따르도록 도와주고, 처음 점은 폴리곤을 끝낼 것인지를 정하는 데 사용됩니다.

3.1 Model Architecture

3.1.1 Image Representation via a CNN with Skip Connections

VGG-16을 수정하여 사용하였습니다. 먼저 뒷부분의 완전 연결 레이어(fully connected layer)와 마지막 max-pooling 레이어(pool5)를 제거하였습니다. 여기에 추가로 skip connection을 위해서 직전 3개 레이어에 컨볼루셔널 레이어를 추가하고 마지막 레이어에 컨볼루셔널 레이어, 그리고 2배로 업스케일 하는 레이어를 추가하여 통합합니다. 이렇게 하면 CNN이 객체의 경계면에 대한 에지와 코너 같은 저수준 정보와 함께 물에에 대한 시맨틱 정보까지 모두 추출할 수 있게 됩니다.

이렇게 통합된 모든 출력을 다시 3x3 컨볼루셔널 레이어와 ReLU를 적용합니다.

3.1.2 RNN for Vertex Prediction

이 모델에서는 Convolutional LSTM을 적용하여 디코더 역할을 하도록 하였습니다. ConvLSTM은 2D세서 작동하기 때문에 CNN으로부터 위치 정보를 활용하게 만들 수 있습니다. 게다가 ConvLSTM은 컨볼루션 연산이기 때문에 완전 연걸 RNN보다 파라미터의 수를 더 줄일 수 있습니다.

ConvLSTM으로 2개 레이어를 구성하고 각각은 3x3의 16채널을 가지는 커널을 사용하였습니다. 이 ConvLSTM은 시각 $t$마다 ​그리드 내에서 폴리곤 점의 위치를 one-hot 인코딩된 형태를 출력하도록 하였습니다. 맨 마지막 차원은 마지막 점인 경우를 나타내는 토큰입니다. 따라서 점의 위치는 그리드의 크기와 같은 해상도로 양자화된 형태입니다. 시각 $t$에서의 출력을 $y_t$라고 표시하겠습니다.

ConvLSTM은 시각 $t$에서 입력 텐서 $\mathbf{x}_t$를 가지는데, 이것은 CNN에서 나온 이미지 특징과 이전 단계에서 유추된 결과 $y_{t-1}$, $y_{t-2}$,그리고 첫번째 점의 유추된 결과 $y_1$을 붙여서 만든 것입니다.

2개의 점과 처음 점이 필요하기 때문에 처음 점은 특별하게 구하게 됩니다. 지금까지 사용했던 CNN 구조에서 $D \times D$크기의 2개의 레이어를 추가합니다. 한 레이어는 객체의 경계를 유추하도록 합니다. 다른 레이어는 유추된 경계와 CNN의 이미지 특징을 입력으로 하여 폴리곤의 점들을 유추하도록 합니다. 2개의 출력을 모두 이용하여 경계와 점들을 이진 분류 문제로 풀도록 하여 점을 결정하도록 하였습니다.

3.2 Training

RNN의 각 시간 단위마다 cross-entropy를 사용하였습니다. 또한 정답에 정확하게 가까운 점만 맞는 것으로 처리하는 것을 막기 위해 목표 분포를 smooth하게 만들어 점 주변 거리 2이내에서 확률 값을 주도록 하였습니다.

첫번째 점을 유추하는 망을 위해서서는 CNN을 멀티 태스크 로스를 사용하였습니다. 그리드의 각 위치는 logistic loss를 사용하였는데, 폴리곤을 잇는 선을 객체 경계의 정답으로, 폴리곤의 각 점을 유추할 점들의 정답으로 사용하였습니다.

3.3 Inference and Annotators in the Loop

RNN의 결과에서 가장 높은 log-prob을 골라서 사용하도록 합니다. 결과가 잘못 나오더라도 작업자가 점을 수정하면 다음 유추할 때는 수정된 점을 사용할 수 있게 됩니다. 일반적인 유추시간은 객체당 250 ms 정도가 걸렸습니다.

3.4 Implementation details

$D=28$을 사용하였고, 각 그리드에 여러 점들이 들어가는 경우는 중복되는 점을 제거하였습니다.

Augmentation을 위해서는 랜덤하게 이미지 크롭, 플립을 포함하고, 10~20% 사이에서 박스를 확대시키기도 하였습니다. 시작점은 랜덤하게 사용하였습니다.

4. Results

5. Conclusion

 


Add a Comment Trackback