Neck(2 stage detection model) 구조 설명

Date:


Neck



Neck이란 뭘까?

  • 기존 2 stage 구조에서는 마지막 feature map를 사용
  • 왜? 마지막 Feature map만을 사용해야하나라는 의문에서 Neck의 개념이 발생함
  • 다른 feature map 에서도 RPN를 구하면 어떨까?

image




Neck은 왜 필요할까?

  • detection task의 경우 다양한 크기의 object를 예측해야함
  • 일반적으로 high level(깊은 layer)의 feature map은 큰 object 정보, semantic 정보를 가지고 있고
  • low level의 feature map은 object의 fine한 특성을 가지고 있어서, 상대적으로 작은 object에 대한 정보를 가지고 있음
  • Neck은 이런 trade off 관계를 이용하는 기법

image

📌 다양한 크기의 object를 detection 하기 위해서 Neck를 사용




FPN(Feature Pyramid Network)

  • high level에서 low level로 semantic 정보를 전달하는 기법을 사용
  • top-down path way 추가

image



Top-Down

  • Top-Down 방식을 사용하면 high level의 feature를 low level로 보내줘야함
  • 이때 feature map의 size와 channel의 수가 차이가 나기 때문에 일련의 조정과정이 필요함
  • low level에서 low level의 Neck으로 갈때는 1x1 conv를 사용
  • high level에서 low level로 올때는 2배 up sampling를 사용
  • 두 개의 feature map을 더해준다

image

  • FPN은 Nearest Neighbor Upsampling 사용

image



pipline

  • backbone : ResNet 사용

image

  • 각 level의 feature map에서 각각 RoI를 통해 뽑은 bbox를 한번에 NMS 진행함

image



FPN 단점

  • ResNet의 특성상 layer가 많아 bottom up 하는 과정에서 low level의 feature 정보가 high level까지 가기 어려움
  • RoI시 object의 w,h 크기에 따라 project하는 stage(feature map)를 정하게 되는데, 몇 pixel차이에 의해 stage가 바뀌는 경우가 있음




PANet(Path Aggregation Network)

  • FPN의 단점을 보완하기 위한 모델
  • FPN의 top-down 방식 후에 bottom-up를 한번 더 해줘 Low level의 feature 값을 high level에 넘겨줌
  • FPN의 ROI 방식에서 object 크기에 따른 stage를 정해주는 방식이 아닌 각 Stage에서 모두 RoI를 진행하는 방식으로 사용

image




DetectoRS

Recursive Feature Pyramid(RFP)

  • neck으로 뽑아낸 feature를 backbone으로 다시 회귀시키는 방법
  • low level 계산시 high level의 정보를 함께 사용할 수 있지만, backbone을 여러번 연산하게 되어 연산수가 커짐

image

image



ASPP

  • convolution 연산시 기존엔 filter가 연속적으로 이뤄져 있지만, Atrous(dilated) convolution의 경우 dilation rate만큼 떨어진 filter를 사용하여 receptive field값을 키워줌

image




Bi-directional Feature Pyramid(BiFPN)

  • feature map이 한곳에서 오는 node를 제거해 연산 수를 줄임
  • 원래 기존 FPN의 경우 upsampling과 convolution을 통해서 사이즈를 맞춰 단순 합을 진행했었는데
  • BiFPN에서는 weight를 주는 방식을 제시함(feature별 가중치를 통해 중요한 feature를 강조하여 성능 상승)

image




NASFPN

  • 기존 FPN의 구조는 사람이 heuristics하게 정의하여 사용
  • 단순 일방향 summation 방식이 사용됨
  • FPN 아키텍처를 NAS를 통하여 찾는 방법

image

  • COCO dataset, ResNet 기준으로 찾은 구조로 범용적이지 못함(parameter가 많이 소요)
  • Dataset이나 Backbone이 바뀔 경우 새로운 architecture를 찾기 위한 Search cost가 많이 소요됨




AugFPN

  • FPN 기준으로 단점을 보완한 모델
  • 제일 위에 level에서는 단순 conv 1x1, conv 3x3으로 인한 정보 손실
  • 다른 level에서는 top down 방식으로 정보가 어느 정도 보완
  • 제일 위에 있는 정보를 최대한 보존하기 위해 RFA(M6)를 추가함

image



Residual Feature Augmentation

  1. 여러 사이즈로 adaptive pooling을 진행
  2. 여러 feature map을 더하기 위해 upsampling진행
  3. 모두 concat한 이후 conv 1x1, conv 3x3 으로 channel을 조정해줌
  4. channel 기준으로 sigmoid를 하여 channel에 따른 가중치로 Residual Feature Augmentation을 만들어줌

image



Soft ROI Selection

  • FPN과 같이 하나의 Feature Map에서 ROI를 계산할 경우 정보 손실이 일어남
  • 이를 해결하기 위해 PANet에서 모든 Feature map을 사용하였찌만, Max pooling으로 인한 정보 손실 가능성이 높음
  • 위 문제들을 해결하기 위해 Soft ROI Selection 기법을 고안함

image

  1. 모든 feature map에서 ROI projection을 진행
  2. ROI pooling을 통해 고정된 vector로 제작
  3. channel wise하게 weight로 summation 진행함(sigmoid)




📌reference

  • boostcourse AI tech


💡 수정 필요한 내용은 댓글이나 메일로 알려주시면 감사하겠습니다!💡 

댓글