티스토리 뷰

Deformable Convolution v2(이하 DCN v2) 논문을 읽다보면 v1과 다르게 modulator 를 곱하는 연산이 추가되었다.

 

근데 이 modulator의 범위가 0~1 로 나오게된다.

 

modulator는 학습 초반의 평균값이 0.5 가 나오게끔 설계되는데, 그렇다면 DCN v2 레이어를 통과할때마다 피쳐맵의 전체적인 스케일이 점점 줄어들 가능성이 크다.

 

깃헙에 공개된 코드를 분석하다보니 저자들도 이러한 부분에 대한 처리를 따로 해준것으로 보인다.

 

이건 official implementation 코드 일부인데 mask에 2를 곱하는 부분이 있다.

 

github.com/msracver/Deformable-ConvNets/blob/6aeda878a95bcb55eadffbe125804e730574de8d/DCNv2_op/example_symbol.py#L6-L18

 

msracver/Deformable-ConvNets

Deformable Convolutional Networks. Contribute to msracver/Deformable-ConvNets development by creating an account on GitHub.

github.com

 

이건 mxnet에 구현된 DCNv2 연산 과정 일부다. mask 가 위에서 언급한 modulator인데 2를 곱하는 부분이 있다.

github.com/apache/incubator-mxnet/blob/5722f8b38af58c5a296e46ca695bfaf7cff85040/python/mxnet/gluon/nn/conv_layers.py#L1612-L1613

 

apache/incubator-mxnet

Lightweight, Portable, Flexible Distributed/Mobile Deep Learning with Dynamic, Mutation-aware Dataflow Dep Scheduler; for Python, R, Julia, Scala, Go, Javascript and more - apache/incubator-mxnet

github.com

 

예상컨데, official implementation code는 mxnet 내부적으로 2가 곱해지는 것을 고려하지 않고 외부에서 한 번 더 2를 곱해준것같다. 아니면 저 코드를 짤 당시에는 mxnet 에 2가 곱해지는 연산이 없었다거나 둘중 하나의 경우일 것 같다.

 

논문에는 이 부분에 대한 언급이 없다. 내가 못 찾은 걸 수도 있고

 

이슈를 달긴했는데 답이 달릴지는 모르겠다.

 

github.com/msracver/Deformable-ConvNets/issues/280

 

Why is the magnitude of mask multiplied by 2? · Issue #280 · msracver/Deformable-ConvNets

Deformable-ConvNets/DCNv2_op/example_symbol.py Line 13 in 6aeda87 conv2_mask = 2 * mx.sym.Activation(conv2_mask, act_type='sigmoid') Why is the magnitude of mask multiplied by 2?

github.com

 

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함