Neck(2 stage detection model) 구조 설명
Date:
Neck
Neck이란 뭘까?
- 기존 2 stage 구조에서는 마지막 feature map를 사용
- 왜? 마지막 Feature map만을 사용해야하나라는 의문에서 Neck의 개념이 발생함
- 다른 feature map 에서도 RPN를 구하면 어떨까?
Neck은 왜 필요할까?
- detection task의 경우 다양한 크기의 object를 예측해야함
- 일반적으로 high level(깊은 layer)의 feature map은 큰 object 정보, semantic 정보를 가지고 있고
- low level의 feature map은 object의 fine한 특성을 가지고 있어서, 상대적으로 작은 object에 대한 정보를 가지고 있음
- Neck은 이런 trade off 관계를 이용하는 기법
📌 다양한 크기의 object를 detection 하기 위해서 Neck를 사용
FPN(Feature Pyramid Network)
- high level에서 low level로 semantic 정보를 전달하는 기법을 사용
- top-down path way 추가
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을 더해준다
- FPN은 Nearest Neighbor Upsampling 사용
pipline
- backbone : ResNet 사용
- 각 level의 feature map에서 각각 RoI를 통해 뽑은 bbox를 한번에 NMS 진행함
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를 진행하는 방식으로 사용
DetectoRS
Recursive Feature Pyramid(RFP)
- neck으로 뽑아낸 feature를 backbone으로 다시 회귀시키는 방법
- low level 계산시 high level의 정보를 함께 사용할 수 있지만, backbone을 여러번 연산하게 되어 연산수가 커짐
ASPP
- convolution 연산시 기존엔 filter가 연속적으로 이뤄져 있지만, Atrous(dilated) convolution의 경우 dilation rate만큼 떨어진 filter를 사용하여 receptive field값을 키워줌
Bi-directional Feature Pyramid(BiFPN)
- feature map이 한곳에서 오는 node를 제거해 연산 수를 줄임
- 원래 기존 FPN의 경우 upsampling과 convolution을 통해서 사이즈를 맞춰 단순 합을 진행했었는데
- BiFPN에서는 weight를 주는 방식을 제시함(feature별 가중치를 통해 중요한 feature를 강조하여 성능 상승)
NASFPN
- 기존 FPN의 구조는 사람이 heuristics하게 정의하여 사용
- 단순 일방향 summation 방식이 사용됨
- FPN 아키텍처를 NAS를 통하여 찾는 방법
- COCO dataset, ResNet 기준으로 찾은 구조로 범용적이지 못함(parameter가 많이 소요)
- Dataset이나 Backbone이 바뀔 경우 새로운 architecture를 찾기 위한 Search cost가 많이 소요됨
AugFPN
- FPN 기준으로 단점을 보완한 모델
- 제일 위에 level에서는 단순 conv 1x1, conv 3x3으로 인한 정보 손실
- 다른 level에서는 top down 방식으로 정보가 어느 정도 보완
- 제일 위에 있는 정보를 최대한 보존하기 위해 RFA(M6)를 추가함
Residual Feature Augmentation
- 여러 사이즈로 adaptive pooling을 진행
- 여러 feature map을 더하기 위해 upsampling진행
- 모두 concat한 이후 conv 1x1, conv 3x3 으로 channel을 조정해줌
- channel 기준으로 sigmoid를 하여 channel에 따른 가중치로 Residual Feature Augmentation을 만들어줌
Soft ROI Selection
- FPN과 같이 하나의 Feature Map에서 ROI를 계산할 경우 정보 손실이 일어남
- 이를 해결하기 위해 PANet에서 모든 Feature map을 사용하였찌만, Max pooling으로 인한 정보 손실 가능성이 높음
- 위 문제들을 해결하기 위해 Soft ROI Selection 기법을 고안함
- 모든 feature map에서 ROI projection을 진행
- ROI pooling을 통해 고정된 vector로 제작
- channel wise하게 weight로 summation 진행함(sigmoid)
📌reference
- boostcourse AI tech
💡 수정 필요한 내용은 댓글이나 메일로 알려주시면 감사하겠습니다!💡
댓글