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

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

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

         

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

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

         

        ✅ Week 5

        1. Instance Segmentation
          1. What is Instance? 
          2. Mask R-CNN
          3. YOLACT
          4. YolactEdge
        2. Panoptic Segmentation
          1. What is Panoptic?
          2. UpsNet
          3. VpsNet

        ✅1. Instance Segmentation

        우리는 지난 시간까지 Semantic Segmentation과 Object detection의 흐름을 살펴보았다

        그러나 이러한 task들은 최근 들어서 연구가 활발하게 진행되지 않고 있다

         

        그 이유는 무엇일까?

        바로 Instance Segmentation과 뒤에서 살펴볼 Panopitc Segmenataion과 같이 

        조금더 상위호환적이고 실용적인 task가 등장했기 때문이다

         

        따라서 이 task들을 살펴보고 대표적인 모델들을 탐구해 보면서

        전체적인 흐름을 이해해보자


        1.1 What is Instance Segmentation?

         

        사실 Instance Segmentation은 간단하게 한줄로 요약할 수 있다

        바로 Semantic Segmentation에 객체 구별을 포함한 것이다

         

        기존의 Semantic Segmentation의 경우에는 같은 사람 클래스에 속하는 픽셀은 같은 결과 같으로 출력했다

        즉, 이미지 내에 사람이 5명 존재한다고 해도 이들을 사람으로 처리할 뿐 구별을 하지는 못했다

         

        하지만 Instance Segmentation은 이러한 Semantic Segmentation에 instance 구별을 추가한 것이다

        즉, 이미지 내에 사람이 5명이 존재한다면 사람1, 사람2, 사람3 ... 사람5로 구별하는  task인 것이다

         

        위의 사진을 보면 이해가 빠를 것이다

         

        어떤 면에서는 Semantic Segmentation과 Object detection을 합쳐놓은 느낌이다

         

        따라서 Instance Segmentation도 기존 Semantic Segmentation과 Object detection에서 활용된 방법들을 기반으로 발전했다

        이제부터 Instance Segmentation의 대표 모델들을 살펴보자

         


        1.2 Mask R-CNN

         

        Mask R-CNN 논문(Mask R-CNN) 리뷰

        이번 포스팅에서는 Mask R-CNN 논문(Mask R-CNN)을 읽고 리뷰해보도록 하겠습니다. Mask R-CNN은 일반적으로detection task보다는 instance segmentation task에서 주로 사용됩니다. Segmentation 논문을 읽어본 경험이

        herbwood.tistory.com

         

        Mask R-CNN 리뷰

        작성자 1 : 한양대학원 융합로봇시스템학과 유승환 석사과정 (CAI LAB) 작성자 2 : 한양대학교 로봇공학과 정석훈 학부생 오늘은 Pixel 단위로 물체를 localize하는 Segmentation 모델인 Mask R-CNN 논문 리뷰

        ropiens.tistory.com

        모델의 네이밍 부터 벌써 어디서 많이 본 모델이다

        바로 Object detection에서 살펴본 R-CNN 계열의 모델이다

         

        우리가 살펴본 R-CNN 계열 중 마지막 모델을 떠올려 보자

        바로 Faster R-CNN이다 

         

        그렇다면 Faster R-CNN과 Mask R-CNN의 차이점은 무엇일까?

        여러가지가 있지만 정리하면 크게 아래 두가지 이다

         

        (1) RolAlign

        (2) Mask branch

         

        🌸RolAlign

        기존 R-CNN 계열의 모델을 살펴보면 - Fast R-CNN부터 ROI pooling을 사용을 했다

        하지만 이 ROI pooling의 경우 정수 좌표만을 지원했다 따라서 정수 영역에서만 Feature을 추출할 수 있었다

        이를 위해서 Stride를 반올림하여 정수를 유지해줄 수밖에 없는데 이러한 방법은 정보 손실을 가져오면

        feature와 RoI 사이가 어긋나는 misalignment문제가 발생한다 

         

        그러나 Mask R-CNN은 RolAlign을 사용하는데 이는 실수 좌표를 지원해 준다

        따라서 조금더 정교한 Feature 추출 영역을 가질 수 있게 되었다

         

        Understanding Region of Interest — (RoI Pooling)

        Quick and easy explanation of what is RoI Pooling and how it works? Why do we event using it in Fast R-CNNs?

        towardsdatascience.com

         

        🌸Mask branch

         

        '

        위의 사진을 통해서 이해할 수 있듯이 Mask R-CNN은 기존의 Faster R-CNN에 Mask FCN을 추가한 모델이다

        Mask Branch에 대해서 조금더 자세히 살펴보자

        간단하게 Faster R-CNN에서는 ROI pooling된 feature Map을 통해서 class를 분류하고 Box regreesion을 진행했다

        반면, Mask R-CNN은 여기에 하나의 과정을 병렬로 진행한다 

        바로 Mask predict이다 

        앞에서 만들어진 feature map을 활용해서 FCN의 구조를 지나가게 해서 마지막에 클래스 갯수 만큼 채널을 가진 마스크를 출력하는 것이다 

        여기서 만들어지는 output은 ROI의 클래스별 binary mask인데

        쉽게 말해서 클래스가 80개라면 해당 ROI에 해당 클래스의 픽셀이 있는지 없는지로 나타내는 것이다

        따라서 80개 채널은 각각 1개의 클래스의 Binary Mask로 표현된다

         

        + loss function은 multi loss function을 사용한다

         Loss_class + Loss_box + Loss_mask을 합쳐서 loss function으로 사용한다

        여기서 Loss_class와 Loss_box는 기존 object detection의 loss와 같다

        그리고 새롭게 축사된 Loss_mask의 경우 average binary cross-entropy를 활용한다


        1.3 YOLACT

         

        논문 리뷰 - YOLACT: Real-time Instance Segmentation

        Instance segmentation 문제를 real-time으로 해결할 수 없을까? 라는 의문으로 시작이 된다. 여태까지의 instance segmentation 모델은 잘 만들어진 object detection에 병렬적으로 모델을 추가하여 (e.g., mask R-CNN(Fas

        byeongjokim.github.io

        앞에서 살펴본 Mask R-CNN이 two stage model이었다면

        이번에 살펴볼 모델인 YOLACT는 one stage model이다 

        object detection에서 이미 익숙한 이름들이기 때문에 충분히 유추했을 것이다

         

        모델의 핵심은 간단하다 

        이름에서 알 수 있듯이 YOLO계열의 모델이기 때문에 당연히 real time을 목표로 한다

        따라서 성능보다는 속도에 초점을 맞추고 있다

         

        따라서 YOLACT는 Mask R-CNN과 비교했을 때 몇가지 과정을 생략한다

        바로 feature localization과정이다

        이 내용은 object detection 에서 다룬 내용이다

         

        그렇다면 YOLACT는 어떻게 문제를 해결했을까?

        아래의 두가지 방법이 핵심이다

        (1) 전체 이미지에 대한 prototype mask dictionary 생성

        (2) instance 마다의 linear combination coefficients 예측

         

        이를 위해서 두개의 task로 모델이 나누어진다

        (1) prototype masks 생성

         

        FCN을 활용해서 최종 layer가 k개의 채널을 가지게 하는데 

        이는 클래스 갯수로

        클래 갯수 만큼의 prototype mask를 생성하는것이다

        쉽게 클래스별 prototype mask를 생성한것이다

         

         

        (2) mask coefficients를 예측하기 위한 object detection task

        이는 기존의 object detection 과정과 같다 anchor box를 이용해서 object을 detect하여 

        class confidences와 x,y,w,h를 계산한다

        그리고 이를 통해서 k mask coefficient를 예측하여 각 prototype에 해당하는 내용을 갖는다

         

        결국 위에서 만들어진 prototype mask와 mask coefficient를 weight sum하고 - linear combination

        이를 sigmoid를 사용하여 최종 mask를 출력한다

         

        prototype mask shape -> h * w * k 

        mask coefficients shape -> n * k


        1.4 YolactEdge

        하지만 이렇게 형성한 YOLACT는 아직 작은 기기에서 작동하지 못한다는 단점이 있었다

        이를 해결하기 위해서 만든 모델이 YolactEdge로 조금더 모델을 경량화 했다고 이해하면 된다

        이전 frame에서 key frame의 feature를 추출하고 다음 frame에 전달하여서 feature map의 계산량을 줄였다 

        하지만 독립적으로 processing 되기 때문에 mask가 불안정하다는 문제점도 존재한다

         


        지금까지 Instance Segmentation에 대해서 알아보았다

        하지만 이러한 Instance Segmentation은 배경을 무시한다

        즉, 움직이는 객체에만 관심이 있고 뒤에 존재하는 배경은 탐지 하지않는다

         

        이를 탐지하기 위해서 Semantic Segmentation을 사용해야한다

        그러나 그럴 경우 instance Segmentation의 장점을 활용할 수 없다

         

        따라서 이를 해결한 task가 바로 Panoptic Segmentation이다 

        이제 Panoptic Segmentation에 대해서 알아보자


        ✅2. Panoptic Segmentation

        2.1 What is Panoptic Segmentation?

        위에서 이미 언급을 했기 때문에 간단하게 살펴보면

        Instance segmentation의 단점인 background 구별을 개선한 task로

         

        instance segmentation + semantic segmentation이라고 볼 수 있다

        즉, instance와 background를 같이 구별하는 task이다

         

        이제 Panoptic Segmentation의 대표적인 모델들을 살펴보자

         


        2.2 UPSNet

         

        Review — UPSNet: A Unified Panoptic Segmentation Network

        Panoptic Head, Combine Semantic & Instance Segmentation Heads

        sh-tsang.medium.com

        모델의 구조를 보아도 어디서 본듯한 구조이지 않은가?

        바로 Semantic Segmentation과 Instance Segmentation을 합쳐놓은 구조같다

        간단하게 Semantic Head와 Instance Head를 진행하고 이를 Panoptic Head를 통과시켜서 

        하나의 출력을 만드는 과정을 구성한 모델이 UPSNet이다

         

        핵심인 Panoptic Segmentation head 구조를 자세히 살펴보면 다음과 같다

         

        Semantic head에서 만들어진 semantic map과

        Instance head에서 만들어진 instance mask를 활용하여 진행하는 과정으로

         

        각 instance들을 b-box가 아니라 전체 image 중 해당하는 위치에 넣기 위해 Xthing​을 mask해서 더한 후 최종출력으로 보내고

        Instance와 object 모두에 해당하지 않는 부분은 제외해서 unknown class로 만든 후 1 channel로 최종 결과에 추가한다

         

         


        2.3 VPSNet

        Panoptic segmentation을 video로 확장한 모델로 

         

        CV 7강) Instance/Panoptic Segmentation and Lankmark Localization

        같은 물체라도 instance에 따라 구분Semantic segmentation + Digtingushing instances기존의 Faster R-CNN과 거의 동일한 구조RoIAlign이라는 새로운 pooling layer를 제안, interpolation을 통해

        velog.io

        간단하게 이전 프레임에서 특징을 빌려와서 진행을 하게 만들어

        현재 프레임에서 추출되지 않은 feature도 detection하기 쉽게 만들어준다 

        그리고 여러 feature을 합쳐서 사용하여 시간적으로 연속적인 부드러운 segmentation이 가능해진다

         

        VPN을 통해서 ROI 들의 feature 를 추출해서 tracking head를 통해서 기존 ROI들과 현재 ROI들이 어떻게 서로 연관 되어있는지, 이전에 몇번 id를 가졌던 물체였는지를 찾아서 연관성을 만들어주고 

         

        같은 물체는 같은 ID 를 가질 수 있도록, 시간에 따라서 tracking할 수 있게 해준다

         

        이후 과정은 UPSNet과 같다

        오) VPSnet output

         

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

        [네이버 부스트 캠프 AI Tech]Conditional Generative Model  (0) 2023.04.03
        [네이버 부스트 캠프 AI Tech]Landmark Localization & Detecting objects as keypoints  (0) 2023.04.03
        [부스트 캠프]Week 4 회고 및 Week 5 목표 정리  (0) 2023.04.02
        [네이버 부스트 캠프 AI Tech] Object Detection의 흐름  (0) 2023.03.31
        [네이버 부스트 캠프 AI Tech] Semantic segmentation의 흐름  (0) 2023.03.30
        다음글
        다음 글이 없습니다.
        이전글
        이전 글이 없습니다.
        댓글
      조회된 결과가 없습니다.
      스킨 업데이트 안내
      현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
      ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
      목차
      표시할 목차가 없습니다.
        • 안녕하세요
        • 감사해요
        • 잘있어요

        티스토리툴바