[P] Week 9 - Neck

JaeJun Lee ·2022년 11월 18일
0

부스트캠프 AI Tech

목록 보기
28/30
post-thumbnail

Neck

기존 2 stage는 주어진 input 데이터를 backbone을 통해 나온 마지막 feature map을 가지고 region proposal을 한다.

Concept: 마지막 feature map만 사용하지 말고 중간중간 만들어지는 feature map들도 사용하면 더 좋지 않을까 -> 다양한 크기의 resolution에 대응하고 feature map을 사용하면 큰 객체뿐만 아니라 작은 객체들도 잘 포착할 수 있을 것이다.

  • 다양한 크기의 객체를 더 잘 탐지하기 위해 사용한다

Neck을 사용하지 않고 각 feature map에서 region을 뽑을 수도 있지만(SSD idea.) 각 level의 feature map들을 적절히 섞어주면 각 level의 feature를 풍부하게 만들어 줄 것이다.

  • low level은 semantic info가 부족하고 high level에서는 localization info가 부족하다

FPN

일반적인 two stage process 에서 backbone과 RPN 사이에 Neck 구조를 추가하였다.

  • backbone은 resnet 사용

이전 연구로 이미지자체의 크기를 조절하여 피라미드처럼 쌓아서 특징을 추출하는 연구가 있었다.

high level에서 low level로 semantic 정보를 전달하기 위해 Top-Down path way를 추가했다.

  • pyramid 구조를 통해 high level 정보를 low level에 순차적으로 전달

전체적인 구조로는 Bottom-up과 Top-Down 구조로 구성

정보 전달은 Lateral connection을 활용하는데 top-down과정은 upsampling, bottom-up 과정에서는 1x1 Conv를 사용한다.

각 stage에서 lateral connection을 거친 P2 ~ P5 feature map들이 각각 RPN을 통과하여 나오는 전체 roi들로부터 NMS를 적용하여 1000개를 select한다. 여기서 select된 roi 대상으로 roi projection을 진행해줘야 하는데 대상이 되는 stage의 feature map을 찾기 위한 방법이 이미지 오른쪽 하단에 수식과 같다. default로 k=4k=4이기 때문에 4번째 stage가 base가 되고 loglog 수식을 통해 최종 stage를 찾는다.

정리하면 FPN은 여러 scale의 물체를 탐지하기 위해 여러 크기의 feature를 사용하도록 설계되었으며 이때 Bottom-up에서 다양한 feature map을 추출하고 Top-down 방식으로 feature map들의 semantic을 교환한다.

PANet

PANet이 제안된 배경으로 FPN의 몇 가지 특징이 있다.

  • backbone으로 resnet50을 사용하기 때문에 Bottom-up 과정에서 한 stage 마다 layere가 깊기 때문에 low feature map 정보가 high feature map에 충분하게 전달되지 못할 것이다
  • roi projection을 위해 수식을 사용해 feature map을 select하는 과정에서 특정 stage의 feature map만 사용하면 많은 정보를 활용할 수 없을 것이고 경계에 있는 roi들은 대응하기 힘들 것이다

다음과 같은 특징을 보완하기 위해 PANet에서는 단순한 Bottom-Up path way를 추가하고 Adaptive Feature Pooling을 제안한다. Adaptive Feature Pooling은 각 stage의 모든 feature map에서 roi projection을 진행하고 roi pooling 후 fc layer를 만든다. 이후 channel-wise로 max pooling을 해서 하나의 fc layer를 만들어 사용한다.

DetectoRS

DetectoRS에서는 RPN과 Cascade R-CNN에서 영감을 얻어 Recursive Feature Pyramid(RFP)와 Switchable Atrous Convolution(SAC)를 제안하였다.

RFP는 FPN을 반복하는 구조를 사용해 high level feature를 low level feature에 전달하는 장점이 있지만 반복횟수 만큼 FLOPS가 증가해 학습 시간이 오래 걸리게 된다.

Atrous Convolution은 Dilated Convolution으로도 불리는데 Standard Convolution보다 Receptive filed를 키우는 효과를 가진다. 이후 생성되는 feature map들을 concatenation하여 사용한다.

BiFPN

BiFPN은 PANet 구조에서 파라미터와 FLOPS를 줄이기 위해(효율성을 위해) 한 방향에서만 오는 Node들을 제거하고 각 path way과정에서 lateral connection을 진행할 때 가중치를 사용해 feature map을 summation하는 구조를 제안한다.

NASFPN

NASFPN에서는 Hurisitic하게 진행되았던 이전 Neck 구조 연구와 다르개 NAS을 사용해 FPN 구조를 찾도록 제안되었다.

NASFPN을 통해 이전 연구들보다 성능이 높은 구조를 찾을 수 있었지만 dataset과 backbone에 범용적이지 못하고 high search cost를 가지는 단점이 있다.

AugFPN

AugFPN에서는 FPN의 몇 가지 문제를 보완하고자 한다.

  • 서로 다른 level의 feature간의 semantic 차이가 존재할 것이다
  • highest feature map에서는 high에서 low 정보 전달이 없기 때문에 정보 손실이 있을 것이다
  • 1개의 feature map에서 roi를 생성한다

이에 AugFPN에서는 Consistent Supervision, Residual Feature Augmentation, Soft Roi Selection 구조를 사용한다.

여기서 Residual Feature Augmentation를 살펴보면 highest feature map에서 발생하는 정보 손실 문제를 보완하고자 추가 stage인 M6을 만든다.

M6을 사용해 P5에 전달해주어 C5에 정보를 보강하고 PANet과 같이 모든 Feature map에서 roi project을 진행하고 roi pooling을 통해 고정된 vector로 만든다. 이후 max pooling을 사용하지 않고 channel-wise하게 가중치를 계산해 각 channel 별로 sigmoid를 사용한 결과를 각 feature map에 곱한 뒤 summation하는 soft roi selection을 사용한다.

Reference

0개의 댓글