GDSC Sookmyung 활동/10 min Seminar

Yolact로 이미지 딥러닝하기

shun-day 2021. 2. 15. 00:12

Yolact(You Only Look At CoefficienTs)는 ICCV에서 2019년에 발표된 논문이고 PyTorch로 구현되어 있다.

---> (github로 이동)

Image Segmentation: 이미지를 픽셀 단위의 다양한 segments로 분할하는 것으로 이미지의 모든 픽셀에 라벨을 할당

  • Semantic Segmentation : 동일한 클래스에 해당하는 픽셀을 같은 색으로 칠하기
  • Instance Segmentation : 동일한 클래스여도 다른 사물의 픽셀이면 다른 색으로 칠하기

Yolact는 Instance Segmentation 문제를 real-time으로 해결하는 모델

그동안의 Instance Segmentation은 Object Detection에 병렬적으로 모델을 추가하여 발전하였으나 Instance Segmentation은 매우 어려운 task이기 때문에 Object Detection의 SSD와 YOLO 모델과 같이 one-stage로 모델을 짜기가 힘들다. Object Detection에 병렬적으로 모델을 추가한 two-stage 모델은 mask를 생성하기 위해 feature *localization에 많은 신경을 써야 하지만, feature localization 후에 mask를 예측하는 모델은 순차적으로 이뤄져야 하기 때문에 과도한 전처리로 인해 real-time과는 거리가 생기는 문제가 있다.

* Localization : 모델이 주어지면 이미지 안의 Object가 어느 위치에 있는지 위치 정보를 출력해주는 것으로 Bounding box를 많이 사용

그래서 !! YOLACT는 실시간으로 Instance Segmentation을 하기 위해 localization 단계를 생략하고 대신에,

  1. 전체 이미지에 대해 Non-local prototype mask를 생성하고 
  2. 각 instance 마다의 선형 조합 (Linear Combination) Dictionary를 예측

각 instance마다 예측된 coefficients를 이용하여 prototype mask를 linear 하게 합치고 예측된 bounding box로 크롭 한다. 이러한 방식으로 분할을 수행함으로써 신경망은 시각적, 공간적, 의미적으로 유사한 인스턴스가 프로토타입에서 다르게 나타나는 인스턴스 마스크를 자체적으로 Localization 하는 방법을 학습하게 된다.

전체 이미지에 대해 Non-local prototype mask를 생성

가로축의 a~f는 모두 다른 이미지를 뜻하고, 세로축의 1~6은 서로 다른 *prototype을 뜻한다. 표에 노란 색으로 나와있는 부분은 중요한 부분이고 파란색 부분은 특징이 없는 부분이라고 이해하면 쉽다. 각각 다른 prototype에 따라 같은 이미지라도 활성화되는 것이 다름을 알 수 있다. 그렇다면 전체 이미지에 대해 Non-local prototype mask를 생성한단는 말은 서로 다른 Prototype Mask의 집합을 만든다는 뜻이다. 

관련 논문에 나와있는 그림인데, 서로 다른 prototype으로 이루어져있는 집합체(Dictionary)가 있는 것을 확인할 수 있다. 이 Dictionary를 생성하고 이용하는 것이 Yolact의 첫 번째 Main Idea이다.

*prototype: 컴퓨터 비전 분야에서 특징들을 찾는 방식 중 하나로, Mask를 찾는데 이용

각 instance 마다의 선형 조합 (Linear Combination) Dictionary를 예측

위에서 만든 Dictionary의 Instance 별로 mask의 Coefficients(계수)를 예측한다. Mask의 Coefficients를 Instance 별로 예측을 한다면, 각각의 Instance마다의 최적의 Mask Coefficients를 사용할 수 있을 것이다.

위의 집합체 그림의 Prototype Mask를 각각 하나의 벡터라고 생각한다면, v1, v2, v3, v4를 얻을 수 있다. 이런 벡터들의 조합으로 우리는 두 가지의 결과를 얻으려 한다.

첫 번째는 사람의 형태가 활성화된 Prototype Mask 이고, 두 번째는 라켓의 형태가 활성화된 Prototype Mask이다. 

위와 같은 결과를 얻기 위해서는 벡터들을 다음 식과 같이 선형 결합을 해야 한다. resultMask = w1*v1 + w2*v2 + w3*v3 + w4*v4

두 개의 결과 (사람, 라켓)를 얻기 위해 사용되는 선형 결합의 식에서 weight 값들은 모두 다를 텐데, 최적의 Mask를 찾기 위해 Mask Coefficients (w1, w2, w3, w4)를 예측한다는 것이 Yolact의 두 번째 Main Idea이다.

위에 그림에서, two-stage를 사용하는 FCIS 나 Mask-RCNN 보다 세그먼트 성능이 우수한 것을 확인할 수 있다.

YOLACT 논문의 주요 Contribution

  1. MSCOCO dataset에 대하여 우수한 세그먼트 결과를 보여주는 최초의 실시간 객체 분할 알고리즘
  2. 기존 NMS보다 12ms 빠른 새로운 NMS 접근 방식을 제공한 것

YOLACT 이용 시 참고했던 블로그 (coco dataset을 직접 만들어야 함) blog.naver.com/9503090_/221997846581

 

Yolact custom dataset으로 트레이닝하기

하하 시험기간 4일 노가다해서 드디어 완성쓰 ~ ㄹㅎㅎ하하핳ㅎ힣진행하면서 yolact 관련 정보가 너무 없어...

blog.naver.com

코랩으로 Yolact 실습해보기 github.com/dtvdtv/ColabMachine

 

dtvdtv/ColabMachine

Contribute to dtvdtv/ColabMachine development by creating an account on GitHub.

github.com

Yolact로 학습된 동영상 youtu.be/4JkDAWCXiKg