[본 글은 Deformable convolutional network 1, 2의 전반적인 내용을 담고 있습니다]
•
Deformable convolution / Deformable RoI pooling
DCN v1은 convolution 연산과 RoI pooling 방식에 deformable이라는 개념을 적용했습니다. 간단히, 연산되는 points들의 위치를 유연하게 가져가는 것이라고 할 수 있겠습니다.
Deformable convolution
위 그림은 ( 3x3 convolution 연산의 ) sampling location의 예시를 묘사한 그림입니다.
(a) : 일반 convolution의 sampling points
(b) : light blue arrows로 augmented된 offsets로 deformed sampling points.
(c), (d) : (b)의 special cases. deformable convolution이 scale, aspect ratio, rotation에 대한 다양한 transformations를 일반화한다는 것을 보여준다.
그림처럼 deformable convolution은 일반 convolution의 sampling points에 (학습가능한)offsets를 적용해 다양한 receptive field를 반영합니다.
위 그림으로 deformable convolution 이 적용되면 standard convolution에 비해 필요없는 영역보다는 중요한 영역(객체의 영역)에 집중해 연산을 수행하게 된다는 것을 보여줍니다.
standard convolution vs deformable convolution
은 중심을 (0, 0)으로 표현한 3x3 convolutional filter의 좌표를 나타냅니다.
standard convolution은 오른쪽의 수식과 같이 feature map 의 위치에서 연산을 수행하면, (0, 0)이 에 위치한채로 각각의 좌표의 weights가 해당 위치의 픽셀값에 곱해지고 sum되는 형식으로 연산이 수행됩니다.
그림만 봐도 알 수 있듯, deformable convolution은 standard convolution에 offset인 이 더해진 형태입니다.
오른쪽 수식을 보면, sampling이 에서 수행되므로, irregular한 영역에서 연산이 수행되게 됩니다.
offset은 보통 fractional하기 때문에,
ex) (-1, 0) + = (-1, 0) + (0.5, 0.1) = (-0.5, 0.1) 이렇게 정수가 아닌 sampling point가 나올 수 있다. 그 경우의 연산을 위해 bilinear interpolation을 적용하여 그 위치의 픽셀 값을 구했다고 한다.
위 그림은 구체적인 deformable convolution의 방식을 나타냅니다.
offsets는 convolutional layer을 통해 구해지므로, learnable 합니다.
# conv layer to calculate offset
self.offset_conv = nn.Conv2d(in_channels, 2*kernel_size[0]*kernel_size[1], kernel_size=kernel_size, stride=stride, padding=(kernel_size[0]-1)//2, bias=True)
Python
복사
Deformable RoI pooling
RoI pooling은 region proposal based object detection에서 사용된다. 임의의 크기를 갖는 input rectangular region을 고정된 크기의 features로 바꾸어 FC layer에 들어갈 수 있도록 만들어줍니다.
standard RoI pooling vs Deformable RoI pooling
RoI pooling은 RoI영역을 bins로 나누어서 크기의 feature map인 를 output으로 내놓는다.
수식으로 설명되어 있는 것 처럼, bin 내의 값들에 대해 합을 픽셀 수인 로 나눠준다.
는 각 bin 내 영역에서의 Average pooling이라 할 수 있다.
deformable RoI pooling의 과정은 다음과 같다
1.
RoI pooling으로 pooled feature maps를 구한다
2.
그 feature maps를 fc레이어에 통과시켜 normalized offsets 를 구한다.
3.
이후 이 는 RoI의 width / height 와 element-wise 곱이 적용돼 로 변환된다.
는 offsets의 크기를 조절하는 predefined scalar이다.
4.
이 offset이 적용되어 최종 RoI pooling을 수행한다.
deformable convolution과 같이 offsets는 보통 fractional하기 떄문에 bilinear interpolation을 적용한다.
Deformable convolution / Deformable RoI pooling with modulation
DCN2에서는 위의 deformable convolution / deformable RoI pooling 에 modulation factor를 추가해 좀 더 발전시켰습니다.
DCN v2논문에서는 “DCN v1에서는 standard convolution과의 비교를 단순히 sampling points들을 plot하는 것으로 하였는데, convolution연산도 weights의 크기를 통해 중요하지 않은 영역을 배제하는 역할이 어느정도 수행되기 때문에 이러한 비교는 적합하지 않다”고 언급합니다.
그래서 더 발전된 실험으로 standard convolution과의 비교를 수행해
•
deformable convolution이 standard convolution보다 기하학적 변형들에 더 잘 적응함을 보여주면서
•
modulation factor를 추가한 발전된 deformable convolution이 v1에서의 deformable convolution보다 이러한 장점이 더 뚜렷하게 나타남을 보여주었습니다.
(자세한 실험 내용은 생략)
Deformable convoltion with modulation
DCN v2에서는 다음과 같이 기존 deformable convolution 연산 결과에 [0,1]의 범위를 갖는 modulation scalars를 곱해 중요하지 않은 영역에는 작은 값이 곱해짐으로써 중요하지 않은( 객체의 범위를 벗어나는 ) 부분의 값은 작은 값을 갖도록 조정해주었습니다.
기하학적 변형에 적응하는 deformable convolution의 장점을 더 발전시킨 것으로 볼 수 있습니다.