• 티스토리 홈
  • 프로필사진
    Cat_Code
  • 방명록
  • 공지사항
  • 태그
  • 블로그 관리
  • 글 작성
Cat_Code
  • 프로필사진
    Cat_Code
    • 분류 전체보기 (117)
      • [네이버 부스트캠프] (46)
        • ⭐주간 학습 정리 (43)
        • 🎶추가 학습 정리 (3)
      • [연습의 흔적들] (27)
        • 백준⚾ (26)
        • 캐글 & 데이콘 🤝 (1)
      • [ML] (23)
        • 머신러닝 💕 (5)
        • 딥러닝 🔫 (10)
        • 데이터 분석 🖤 (1)
        • 수학 ☑️ (4)
        • LLM🦜 (3)
      • [CS] (17)
        • 파이썬 🖤 (13)
        • 해체 분석기📝 (3)
        • Service Product (1)
        • MultiMedia (0)
      • [개발일지] (2)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    • 최근 공지
        등록된 공지가 없습니다.
      # Home
      # 공지사항
      #
      # 태그
      # 검색결과
      # 방명록
      • Neck
        2023년 05월 08일
        • Cat_Code
        • 작성자
        • 2023.05.08.:06

        본 글은 네이버 부스트 캠프 AI Tech 기간동안

        개인적으로 배운 내용들을 주단위로 정리한 글입니다

         

        본 글의 내용은 새롭게 알게 된 내용을 중심으로 정리하였고

        복습 중요도를 선정해서 정리하였습니다

         

         

        ✅ Week 10

        1. Neck

           1.1 FPN

           1.2 PANet

         

        2. After Neck

           2.1 DetectoRS

           2.2 BiFPN

           2.3 NASFPN

           2.4 AugFPN


        Intro.

        일반적인 2 Stage Detectors

        우리는 지난 시간에 Object Detection Model 중 2 Stage Detectors들에 대해서 알아 보았다

        위의 사진에서 확인할 수 있듯이 2 Stage 모델들은 Backbone CNN의 마지막 층에서 나온 feature map을 갖고

        RPN을 통해서 Region을 Proposal하고 이를 기반을 Prediction을 진행한다

         

        하지만 이러한 과정에는 의문이 발생한다

        바로 Backbone의 중간층에 있는 feature map을 활용할 수 있지 않을까? 이다

         

        즉, 굳이 Backbone의 마지막 층만을 활용하는 것이 아니라

        Backbone에서 만들어지는 중간중간의 feature map을 가져와서 추가로 활용한다면

        모델의 성능을 향상될 수 있을 것이라는 가정을 할 수 있다

         

        이러한 아이디어에서 만들어 진것이 Neck이다

         

        Neck

        사진에서 확인 할 수 있듯이 Backbone 중간 층의 feature map을 가져와서 다시 upsampling을 하면서 서로의 feature map을 섞어 주고 이들을 활용해서 RPN에서 Region을 추출한다 

         

        그렇다면 Neck의 효능은 무엇일까? 즉, 왜 성능이 올라가는 것일까?

         

        바로 다양한 크기의 객체를 잘 탐지할 수 있기 때문이다

        쉽게 말해서 Backbone의 Low-level feature map의 경우 - 낮은 층 -> 선, 점, 기울기 등 작은 객체를 잘 표현하고

        Backbone의 High-level feature map의 경우 semantic한 정보와 큰 객체를 잘표현 할 수 있게 된다

        즉, 이 모두를 활용할 수 있게 neck이 도와주기 때문에 다양한 크기의 객체를 잘 탐지할 수 있게 되고

        성능이 향상되는 것이다

         

        그렇다면 여기서 의문이 살짝 생길 수 있다

         

        그냥 Backbone의 중간 중간 feature map을 굳이 Neck을 쓰지 않고 바로 여러 RPN으로 수행하면 되지 않을까?

        하지만 이러한 방법에는 단점이 있다

        바로 앞에서 설명했듯이 Low - level의 경우 semantic 정보가 적기 때문에 오히려 성능이 저하될 수 있다

        따라서 상위, 하위 level의 feature map을 섞어 줌으로 여러 객체를 뽑을 수 있는 것이다

         

        그렇다면 이제부터 본격적으로 Neck의 모델들을 살펴보자

         


        1. Neck

        1.1 Feature Pyramid Network - FPN

         

        FPN 논문(Feature Pyramid Networks for Object Detection) 리뷰

        이번 포스팅에서는 FPN 논문(Feature Pyramid Networks for Object Detection)을 리뷰해보도록 하겠습니다. 이미지 내 존재하는 다양한 크기의 객체를 인식하는 것은 Object dection task의 핵심적인 문제입니다. 모

        herbwood.tistory.com

        FPN은 Low-level에 High-level의 정보를 전달 해주기 위해서 

        Top-down pathway을 추가해주었다

         

        즉, 기존 CNN에서 feature map을 추출하는 Bottom-up pathway와 Top-down 방식을 같이 활용해주어서 feature map을 섞어주는 것이다

         

        그렇다면 어떻게 High와 low의 faeture map을 섞어 줄 수 있을까?

        Bottom up에서 나온 feature map과 Top down에서 나온 feature map의 shape가 다르기 때문에

         lateral connections을 활용해 준다

         

        즉, Bottom-up의 경우 위로 갈 수록 feature map의 w,h는 2배씩 작아지고 c는 2배씩 증가한다

        반면에 Top-down의 경우 feature map의 w,h는 합쳐질 Bottom-up featuremap에 비해서

        w,h가 2배 적은 상태이다

         

        따라서 아래 사진에서 확인할 수 있듯이 두개의 feature map을 맞춰 주기 위해서

        Top-down은 upsampling을 진행하여서 w,h를 맞춰주고 - 논문에서는 Nearest Neighbor Upsampling을 사용했다

        Bottom-up은 1x1 conv를 진행해서 차원수를 맞춰준다음

        이를 Element-wise addition을 진행하여서 하나의 feature map을 만들어준 3x3 conv을 통과해 RPN에 들어가 featuremap을 만들어준

         

        FPN의 경우 여러 stage에서 Region을 추출하기 때문에 - P

        어느 stage에서 Region이 왔는지 Mapping이 필요하다

        직관적으로 봤을 때 RoI의 scale이 작아질수록 낮은 pyramid level,

        즉 해상도가 높은 feature map에 할당하고 있음을 알 수 있다

         


        1.2 PANet

        앞에서 살펴본 FPN에서 문제점이 하나 존재한다

        바로 Backbone으로 활용하는 CNN의 모델을 보면 Network의 길이가 길다는 문제점이 있다

        즉, 이러한 문제점으로 인해서 Low-level의 feature map의 정보가 high-level의 feature map에

        제대로 전달 되지 않을 수 있다

         

        이러한 문제점을 해결한 모델으 PANet 이다

         

        아이디어는 간단하다

        Bottom - up을 한번더 수행해주면된다

         

        위의 사진에서 확인할 수 있듯이 backbone network의 pooling이나 다양한 연산을 제외한

        bottom-up을 추가해줌으로써 다시한번 low 정보를 high에 잘 전달 할 수 있게되는 것이다

         

        그리고 이렇게 나온 feature map을 활용해서 RoI를 Pooling하고 예측을 수행해준다

        하지만 여기서도 문제점이 하나있는데

        Stage의 경계에 위치한 RoI의 경우 

        애매한 상황에 놓이게 된다

        즉, 별차이 없는 RoI이지만 이를 투영하는 Feature map의 크기는 달라질 수 있게 된다

         

        따라서 특정 stage의 feature map에만 투영하는 것이 아니라

        모든 stage의 feature map에 투영을 해서 RoI pooling을 수행해주는 Adaptive Feature Pooling을  제안하였다

        즉, 모든 feature map에서 RoI projection을 수행해주는 것이 핵심이다


        2. After Neck

        FPN과 PANet 이후 Neck에 대한 연구들이 증가하였다

        지금 부터는 FPN이후의 추가적인 Neck의 구조를 살펴보자

         

         

        2.1 DetectoRS

         

        DetectoRS: Detecting Objects with Recursive Feature Pyramid and Switchable Atrous Convolution

        작성자 - 이건희(penguinnom@gmail.com)

        www.notion.so

         

        핵심 구조

        RFP  : Top-down의 Feature map의 결과를 Backbone에 다시 전달해서 backbone을 다시학습하고 이런식으로 반복하는 방법

        +) ASPP : FPN의 결과를 다시 backbone에 concat해주는 변환 연산

        수용 범위를 늘려주기 위해서

         

        ASPP(Atrous Spatial Pyramid Pooling)

        gaussian37's blog

        gaussian37.github.io

        +) Fusion

         


        2.2 BiFPN

        EfficientDet에서 제안한 방법

         

        BiFPN (Bi-directional Feature Pyramid Network) 구조와 코드

        gaussian37's blog

        gaussian37.github.io

        모델 구조를 단순화 하여서 FLOPs를 줄이는 방법

        그리고 각 feature map을 더할때 단순합 보다는 

        weight sum을 하는 방법을 제안


        2.3 NASFPN

        nas를 활용해서 FPN의 구조를 탐색

         

        NAS-FPN: Learning Scalable Feature Pyramid Architecture for Object Detection

        Current state-of-the-art convolutional architectures for object detection are manually designed. Here we aim to learn a better architecture of feature pyramid network for object detection. We adopt Neural Architecture Search and discover a new feature pyra

        arxiv.org

        하지만 COCO dataset 기준으로만 탐색해서

        다른 Dataset에 맞지 않을 수 있어

         


         

        2.4 AugFPN

         

        AugFPN: Improving Multi-scale Feature Learning for Object Detection

        Current state-of-the-art detectors typically exploit feature pyramid to detect objects at different scales. Among them, FPN is one of the representative works that build a feature pyramid by multi-scale features summation. However, the design defects behin

        arxiv.org

        Residual Feature을 만들어서 M6를 만들고 이를 top-down에 적용

         Adaptive Spatial Fusion을 활용해서 fusion을 해준다

         

        '[네이버 부스트캠프] > ⭐주간 학습 정리' 카테고리의 다른 글

        EfficientDet  (0) 2023.05.10
        1 Stage Detectors  (0) 2023.05.09
        2 Stage Detectors  (0) 2023.05.03
        mAP - Mean Average Precision  (0) 2023.05.03
        [부스트 캠프]Week 8 회고 및 Week 9 목표정리  (0) 2023.05.03
        다음글
        다음 글이 없습니다.
        이전글
        이전 글이 없습니다.
        댓글
      조회된 결과가 없습니다.
      스킨 업데이트 안내
      현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
      ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
      목차
      표시할 목차가 없습니다.
        • 안녕하세요
        • 감사해요
        • 잘있어요

        티스토리툴바