AI/Baseline

Deformable Convolutional Networks(DCN)

아인샴 2021. 3. 18. 00:44

2021.02.22 - [AI/Baseline] - Detecto RS를 이해하기 위한 기반 다지기

 

Detecto RS를 이해하기 위한 기반 다지기

DetectoRS가 너무너무 어렵기 때문에 하나하나 이해해 보기로 했다.

cho-akashic-records.tistory.com

여기서 맨 오른쪽에 있었던 Deformable Convolution Network 에 대해서 알아보자! 

 

먼저 내가 receptive field 개념이 헷갈리기 때문에 이것부터 집고 넘어가기 

더보기

receptive field란 출력 레이어의 뉴런 하나에 영향을 미치는 입력 뉴런들의 공간 크기

w, h, z 에서 kernel을 통해 output이 나오면, 그 아웃풋의 뉴런 한 개가 얼만큼의 input 영역을 수용했는지를 나타낸다. 

오른쪽 파란 사각형의 동그라미 하나가 뉴런이다. 해당 뉴런은 input(빨강)의 w,h 만큼의 spatial 한 영역을 수용(receptive)한다고 볼 수 있다.

1x1 convolution을 하면 receptive filed 크기는 고정한 채로, depth(z) 의 size를 조절(감소/증가) 시킬 수 있다. 

떨리는 마음으로 논문을 보면 Abstrct에 이렇게 적혀있다. 


(번역) CNN이 여지껏 모델 geometric 변환에 제한적이었는데, 이는 모델을 build할 때 geometric 구조가 고정되어있기 때문입니다. Deformable Convolutional Networks에서는, CNN의 transformation 모델링 성능을 끌어내기 위해 2개의 새 모듈을 소개합니다. 이름붙이자면 deformable convolutiondeformable RoI pooling입니다. 

 

둘다 spatial sampling을 augmenting 하는 idea에서 기반했습니다. 영역을 샘플링 할 때 additional offsets을 사용함으로써 target task로 부터 offset을 학습하는 것입니다.  (additional offset 별도의) 지도(학습)없이 수행됩니다. 

 

이 모듈들은 현존하는 CNN을 능가(replace)할 수 있습니다. standard back-propagation 을 쓰는 end to end training으로도 학습됩니다. (후략)  객체검출이나 semanticsegmantation 같은 정교한 작업에 효과적인 방법은 deep CNN에서 dense spatial transformation 을 학습하는 것입니다. 


여기서 말하는 deformable convolution 과 deformable RoI pooling에 대해 알아보자. 

 

  • convolution 유닛은 고정된 위치에서 input feature amp을 샘플링한다. pooling 층은 spatial 해상도를 fixed ratio 로 감소시킨다. RoI pooling 층이 RoI를 fixed spatial bins 등으로 조각낸다. 그 내부 메커니즘의 결핍요소가 geometric transformation 다루는 것을 어렵게 합니다. 이 문젠눈 눈에 띄게 발생합니다. 
  • 예를들어, 같은 CNN층에서는 모든 activation unit의 receptive filed size가 같습니다.  이건 이상적인 high level CNN 과는 거리가 있습니다. CNN은 공간위치에 대한 의미를 인코딩해야 합니다. (그런데 그렇게 못하고 있다는 뜻임)
  • 왜냐하면 정밀한 위치파악을 통한 시각적 인식의 바람직한 길은, 객체들의 다른 위치들이, 다양한 scale과 deformation, scale혹은 recptive filed size 의  adaptive determination에 해당(하는 방법으로 구)할 수 있기 때문입니다. 

그림 1 : 표준 3x3 convolution과 deformable convolutions (a) 표준 convolution 의 일반 sampling grid (b) 증가시킨 offset을 통해 deformed 된 sampling locations (c)(d)는 (b)의 특수한 경우로, deformable convolution 이 크기,

(기존 CNN이 convolution 과 pooling을 반복한다면) deformable convolution 은 여기서 convolution 이 하나 더 존재한다. 

녹색사각형은 2d offset을 학습하기 위한 것이다. (소수도 가능함)

학습과정에서 convolution 이 하는 일이 두개다.  output 특징을 만드는 convolution kernel과 offset을 정해주는 convolution kernel, 이 두 개를 동시에 할 수 있다. 

 

아래 그림은 convolution filter 의 sampling 위치를 보여주는 예시이다. 붉은색 점들은 deformable convolution filter 에서 학습한 offset 을 반영한 sampling location 이며, 초록색 사각형은 filter 의 output 위치이다. 일정하게 sampling pattern 이 고정되어있지 않고, 큰 object 에 대해서는 receptive field 가 더 커진 것을 확인 할 수 있다. 

그림 6. 각 이미지가 sampling location(빨간점 (9의 3제곱) 을 보여준다. 3x3 deformable filter를 통해 배경, 작은 객체, 큰객체에 대한 activation units (녹색점)filter 에 한건 그림 5를 참조
고정된 receptive filed의 기존 CNN과 Deformable convolution 의 adaptive한 receptive filed이다. 다른 크깅와 모양을 지닌 두 객체는 3x3 활성 필터를 지녔다. 이전 feature map에서의 3x3 필터 후 sampling한 location 들이다.  또다른 두개의 활성화 유닛이 강조되어있다. Bottom : 이전 feature .map에서의 3x3 filter를 2번 진행하여 sampling한 location이다.

"

RoI (Region of Interest) pooling 은 크기가 변하는 사각형 입력 region 을 고정된 크기의 feature 로 변환하는 과정이다.

RoI pooling이란?(접기) 24.02.25

더보기
난 24.02.25에서 왔다. RoI Pooling은 미래의 내가 헷갈려 할 것이기에 확실히 짚고 넘어가자. (지금도 아리까리한데 과거에 잘 알고나 있었을지 모르겠다. )
일단 grid 로 나눈 다음 그것에 억지로 끼워맞춰서 보는 방식이다.

헷갈리겠다고 적은 것은 roi pooling 보다는 RoI algin인 것 같은데 pooling을 마저 말하자면,

-다양한 사이즈의 region 에서 고정된 크기의 feature을 산출하려고 만든 방식이다, 그림에서 큰사람이나 작은 사람이나 같은 feature로 입력해 model Inference를 진행할 수가 있다.(개인적으로 보면 물리적으로 쑤셔넣은게 아닌가 싶다.)  그림에서 보다시피 misalignment가 발생한다. 

 

-RoI algin 이란. 

  -이제 segmentation 을 위해 위치를 잘 찾을 필요가 있다. misalignment는 용납되지 않는다. 이제 선긋지 않고 보간방식으로 짐작한다. 양쪽에 0과 10 값이 있다면 그 사이에 123456789가 있을 거라는 거리상의 짐작을 하는 방법을 만한다. 

P위치의 "값"은 보간한 M과 V를 보간해서 구한다. (내가 보기에) 중요한 건 RoI pooling처럼 output을 맞춰주면서도 정확학 localization 을 해야한 다는 점이다. 빽빽한 feature map에서 2*2 로 나누고 점을 칸마다 4개씩 찍는다고 해보자.

 

-임의로 찍은 선들은 4개의 영역에 걸쳐져 각칸의 feature value를 참조해 보간값을 구할 수 있을 것이다. 

점마다 보간 feature value operation 을 구해주면 4개영역의 4개점값인 16개의 값이 나오는데, 이걸 2*2 안에서 max 혹은 avg pooling을 시켜 output을 얻어내면 grid는 지키고 해당 영역(feature)에 대한 연산을 얼추 진행해 원하는 output size를 만들 수 있을 것이다.

는 일반적은 RoI Pooling layer 와 offset 을 학습하기 위한 layer 로 구성된다. 한가지 deformable convolution 과 다른 점은, offset 을 학습하는 부분에 convolution 이 아니라 fully connected layer 를 사용한 것이다. 또한 마찬가지로 학습 과정에서 offset 을 결정하는 fc layer 도 backpropagation 을 통해 학습된다. 

 

아래 그림에서 노란색 입력 RoI 에 대해 붉은색 deformable RoI pooling 결과를 보여준다. RoI 에 해당하는 붉은 사각형의 모양이 object 형태에 따라 다양한 형태로 deformation 되는 것을 확인 할 수 있다. 

(인용)

그래서 offsetlayer가 무엇을 변화시켰느냐(수식편)

 

결론 :

  • deformable은 사각형의 shape을 없애고 학습한다.
  • deformable이라고 부르는 이유는 기존 CMN이 일정패턴을 가정하고 있어서, '복잡한' transformation은 대처를 못하는데, 그것이 구체화 되면 receptive field의 영역이 항상 같아지는 형태를 보인다. 그래서 Deformable에서는 해당 수용영역에 대해서 form 없애기 위해, offset layer를 추가함으로써 입력 x에 얼만큼의 offset을 추가할지를 학습한다. 이렇게 하면 flexible한 영역에서 특징을 추출할 수 있다고 제안한다. 
  • 여기서 말하는 offset이 가중치는 아니고, y = ax + b가 y= a(x+offset) + b 가 되는 것이고  이 offset을 학습하는 것 같다. 
  • offset을 통해 object안에 점을 찍는다.  convolution학습을 진행하며 offset을 학습시킬 수 있다. 

일단 개괄적인 것은 여기까지 ,(마지막 부분은 소화를 잘 못시켰다. 되새김질 하러 와야겠다)

-20210711 되새김질왔다. 아직 모르겠다. 

 

 

출처 :

1. receptive field(수용영역, 수용장)과 dilated convolution(팽창된 컨볼루션)

eehoeskrap.tistory.com/406m.blog.naver.com/PostView.nhn?blogId=sogangori&logNo=220952339643&proxyReferer=https:%2F%2Fwww.google.com%2F

2. [Object Detection] Deformable Convolutional Networks https://eehoeskrap.tistory.com/406

3. Deformable Convolutional Networks arxiv.org/pdf/1703.06211.pdf

4. DCN 리뷰(2017) https://deep-learning-study.tistory.com/575 

5.https://medium.com/@parkie0517/fast-r-cnn-논문리뷰-roi-pooling-layer와-truncated-svd-a1147f7267be

6.https://frogbam07.tistory.com/28

7.https://blahblahlab.tistory.com/139