[CV] Deformable Convolutional Networks (2017)

es.Seong·2023년 9월 9일
0
post-thumbnail

포스팅 계획을 세우고 첫 번째로 정리해볼 논문은 Deformable Convolutional Networks (2017) 입니다.

해당 논문은 취직 전 비교적 최근에 게재 된 논문에 사용되어서 많이 읽어보고, 소스코드도 뜯어보고해보았기 때문에 굉장히 친숙(?)하답니다.

논문 링크
https://arxiv.org/abs/1703.06211

'Deformable Convolutional Networks' 논문에서는 두 가지 기술(모듈)을 제시했습니다.
논문의 제목처럼 deformable convolution 과 Object Detection(객체 탐지)에 사용하는deformable RoI pooling입니다.
저는 두 개 중에서 deformable convolution에 대해 정리해보려 합니다.

일반적으로 CNN(Convolutional neural network)은 고정된 NxN, NxM Filter(Kernel)를 사용합니다. 그렇기 때문에 이미지가 커널을 통해 특징을 추출하기 어렵게 되어 있다면, 비효율적인 연산이 발생할 수 있고, 모델의 예측 정확도가 떨어질 수 있습니다. 이를 보완하기 위해 커널을 추가적으로 학습 시켜 이미지에 맞게 유연하게 필터를 변형하여 데이터로부터 특징 추출 능력을 강화하는 것이 해당 논문의 핵심 아이디어라고 할 수 있습니다.

Sampling Grid 비교

상단 이미지에서 (a)는 기존 컨볼루션 연산의 3x3 필터입니다. 이 경우 필터 내 고정된 수용 영역(receptive field)에서만 특징을 추출하게 됩니다. (b),(c),(d)는 deformable 컨볼루션 연산이 특징을 추출하는 영역이고, (a) 영역보다 flexible한 영역에서 다양한 패턴의 특징을 추출할 수 있습니다.

Deformable Convolution

Deformable Convolution은 Standard Convolution의 grid sampling에 2D 오프셋(offset)이 추가된 개념입니다.
바로 이 2D 오프셋이 커널의 자유로운 형태 변형을 가능하게 합니다.

오프셋은 추가적인 Conv Layer를 통해 학습되며, 역전파를 통해 다른 layer와 동시에 학습됩니다.

Deformable Convolution 수식

2D 컨볼루션은 두 단계로 구성됩니다.

  1. 입력된 feature map x에 대해 일반적인 그리드 R을 사용하여 샘플링합니다.

  2. w로 weighed된 샘플링된 값을 합산합니다.


해당 R은 커널크기가 3x3이고, dilation이 1 일 떄 커널의 각 위치를 다음과 같이 표현할 수 있다.

출력되는 feature map y의 각 위치 p0에 대해 아래 수식이 있습니다. 여기서 pn은 R의 위치를 나열합니다.


deformable convolution에서 일반 그리드 R은 오프셋 {Δpn|n = 1, ..., N}으로 증가됩니다. 여기서 N = |R|입니다.


해당 수식을 통해 샘플링은 불규칙적이고, 오프셋 위치 pn+Δpn에서 수행됩니다.
오프셋 Δpn은 일반적으로 분수(유리수) 이므로 x(p)값은 쌍선형 보간법(bilnear interpolation)으로 도출됩니다.


여기서 p는 임의의 (분수) 위치를 나타내며
상단 수식에서는 p =p0 + pn + Δpn를 나타냅니다. q는 특징 맵 x의 모든 integral spatial location을 나타내고, G(·,·)는 쌍선형 보간법 커널입니다.
여기서 G는 2차원이며, 2개의 1차원 커널로 분리됩니다.

Conv vs DeConv

다음 이미지처럼 고정된 receptive field를 가진 Conv Layer보다 DeConv의 adaptive receptive field을 통해 동물의 특징을 유연하게 추출할 수 있습니다.

논문에서는 Obeject Detection의 판단 척도를 통해 비교를 진행하였고, deformable convolution이 mIoU와 mAP가 더 높게나왔습니다.
이를 활용한다면 객체 탐지 분야나 다른 비전 분야에서 정확도를 더 높일 수 있는 방법을 제시한 흥미로운 논문입니다.

https://github.com/msracver/Deformable-ConvNets

소스코드는 해당 깃허브에 있으며 파이토치로 구현되어 있습니다. 텐서플로우로 구현한 Repository도 있으니 한 번 실험해보시는 것도 좋을 것 같습니다.

부족한 글 읽어주셔서 감사합니다.

profile
Graduate student at Pusan National University, majoring in Artificial Intelligence

0개의 댓글