코딩하는 해맑은 거북이

[컴퓨터비전] Instance/Panoptic Segmentation, Landmark Localization 본문

AI

[컴퓨터비전] Instance/Panoptic Segmentation, Landmark Localization

#CJE 2023. 4. 3.
본 게시물의 내용은 '부스트캠프 AI Tech - CV (오태현)' 강의를 듣고 작성하였다.
해당 글은 아래의 4가지를 다룬다.
📌 Instance Segmentation
📌 Panoptic Segmentation
📌 Landmark Localization
📌 Detecting objects as keypoints

📌 Instance Segmentation

같은 클래스여도 객체(Instance)가 다르면 구분해주는 문제.

이러한 객체의 구분은 Object Detection을 기반으로 한다.

 

- Mask R-CNN : Faster R-CNN + Mask branch

Faster R-CNN과 거의 동일한 구조를 가지고 있지만, 여러방면으로 개선되었음.

Faster R-CNN에서 정수 좌표만 지원하는 RoI Pooling을 Mask R-CNN에서는 소수점 좌표까지 지원하는 RoIAlign를 사용한다. 그래서 좀더 정교한 feature를 사용해서 성능이 향상되었다.

또한, 각 클래스별로 binary mask를 prediction 하기 위한 Mask branch가 추가되었다.

 

 

 

- YOLACT (You Only Look At CoefficienTs)

앞서 살펴본 Mask R-CNN은 Two-stage network 였는데,

YOLACT는 실시간으로 Semantic Segmentation이 가능한 Single-stage network이다.

 

기본 backbone 구조는 Feature Pyramid를 가져와서 사용한다.

YOLACT의 가장 큰 특징은 mask의 Prototypes을 추출해서 사용한다.

Prototypes은 mask는 아니지만, mask를 합성해낼 수 있는 기본적인 여러 물체의 soft segmentation component이다.

Prediction Head에서 각 detection에 대해 Prototypes를 잘 합성하기 위한 계수(Coefficients)를 출력해준다.

Prototypes과 계수(Coefficients)를 선형결합해서 각 dectection에 적합한 최종적인 response map을 생성한다.

그 다음 bounding-box 위치에 맞게 crop, threshold를 통해 segmentation을 생성한다.

결론 : prototype은 object의 개수와 상관없이 적당히 작게 설정하는 대신에 선형결합으로 다양한 mask를 생성하는 것이 중요 포인트이다!

 

 

 

- YolactEdge

앞서 살펴본 YOLACT는 실시간으로 동작할 만큼 빠르긴하지만, 아직 소형의 edge device에 사용할 정도로 빠르진 않다.

그래서 edge device에서 사용가능한 수준의 속도를 보여주는 YolactEdge 모델이 제안되었다.

YolactEdge는 이전 frame에서 key frame에 해당하는 feature들을 다음 frame에 전달해서 feature map에 대한 계산량을 획기적으로 줄인 모델이다. YOLACT에 비해 빠른 속도를 보여주면서도 성능은 기존과 비슷하게 유지할 수 있다.

 

 

 

📌 Panoptic Segmentation

물체들의 instance 뿐만 아니라 배경정보까지 구분해서 segmentation을 하는 문제.

 

- UPSNet

기본적으로 FPN을 backbone network로 사용하고, head brunch를 fully-convolution 구조로 되어 sementic map을 예측하는 sementic head, 물체의 detection과 box regression, mask logits을 추출하는 instance head로 2개의 head로 나뉜다.

뒷 단에 sementic head와 instance head의 결과들을 융합해주는 Panoptic head가 들어가서 단 1개의 Segmentation Map으로 합쳐주게 된다.

결론 : Semantic & Instance head → Panoptic head → Panoptic logits

Instance head : 각 instance에 해당하는 mask (y)

Semantic head : 물체\(X_{thing}\)와 배경\(X_{stuff}\)을 예측하는 mask

 

여기서 배경\(X_{stuff}\)을 나타내는 mask는 최종출력으로 바로 들어가게 된다.

그리고 각 instance들은 Semantic head의 물체\(X_{thing}\) 부분을 masking하여 합한 결과로 전체 이미지에서 해당하는 위치에 넣어준 형태로 최종출력에 들어가게 된다.

 

그리고 instance와 배경과 관련된 클래스 외에 unknown 클래스도 존재하기 때문에, 별도로 처리해야한다.

이는 물체의 semantic mask map에 instance로 사용된 부분을 제거하여 모두 unknown 클래스로 처리해서 최종출력에 들어간다.

 

 

 

- VPSNet (for video)

 panoptic segmentation의 구조를 video로 확장한 모델.

 

시간 차를 가지는 영상 사이에 Φ(파이)라는 motion map을 사용해서, 각 프레임에서 나온 feature map을 motion에 따라서 warping을 해주게 된다.

motion map은 한 프레임에서 다른 프레임으로의 변화에서 어떤 점으로 매핑되는지, 대응 관계를 가지고 있는 맵이다.

 

t-τ 프레임의 feature map을 motion map을 통해 마치 t 프레임의 feature map 처럼 만들어주는 것이다.

그리고 t 프레임에서의 feature map과 warping된 feature map을 합쳐서 사용하게 된다.

이렇게 여러 프레임의 feature map을 활용함으로써 시간 연속적으로 스무스한 segmentation map을 얻을 수 있다.

 

다음으로 VPN으로 RoI의 feature를 추출하고, 기존 RoI와 현재 RoI들이 어떻게 서로 연관되어 있는지 tracking head를 통해 파악한다. 그래서 이전에 몇 번 id를 가진 물체였는지 파악하고 matching 시켜준다. 이렇게 함으로써 같은 물체는 시간이 지나도 같은 id를 가질 수 있도록 tracking 된다.

 

마지막 head 부분은 UPSNet과 거의 동일하다.

 

 

 

📌 Landmark Localization

특정 물체에 대해서 중요하다고 생각되는 특징 부분들을 landmark로 정의하고, 이들을 추정하고 tracking하는 문제.

보통 사람의 얼굴이나 포즈 등을 추정하고 tracking하는 분야에 주로 활용된다.

 

- landmark localization을 수행하기 위한 방법 2가지

1) Coordinate regression : 이전의 bounding box regression처럼 landmark의 좌표값에 대해 regression을 수행하는 방법.

→ 보통 부정확하고 일반화에 문제가 있다. 대안으로 Heatmap classification이 제시되었다.

2) Heatmap classification : 각 채널들이 하나의 key point를 담당하게 되어, key point마다 하나의 클래스처럼 생각하여 그 key point가 발생할 확률을 각 픽셀 마다 구해 classification을 수행하는 방법.

→ 훨씬 성능이 좋아지지만, 모든 픽셀에 연산을 수행해야하므로 계산량이 많다는 단점이 있다.

 

 

- Landmark location to Gaussian heatmap

여기서 heatmap은 각 위치의 confidence가 시각화되는 형태로 표현된다.

예를 들어 (x, y)가 landmark에 1개 존재한다는 레이블이 주어졌을 때, location으로 부터 heatmap으로 어떻게 변환하는지는 다음과 같다.

레이블에서 주어진 좌표 (x, y)가 Gaussian 분포의 평균을 나타낸다고 설정하고, 그 위치 근처에 Gaussian 분포를 씌우면 된다. 

(x_c, y_c) = Center location

 

- Hourglass network

이러한 heatmap classification을 잘 활용하기 위해 제안된 Landmark detection에 딱 맞춘 구조로 2016년에 hourglass newtork가 등장했다. U-Net을 마치 여러개 쌓은 듯한 구조이고, U-Net의 구조가 마치 모래시계처럼 생겼다고하여 이 구조를 Stacked hourglass module이라고 부른다.

이렇게 구조를 설계한 이유는 넓은 receptive field를 확보하기 위함이다.즉, 넓은 receptive field를 확보하기 위한 downsampling 과정과 upsampling을 거치는 블럭들이 반복적으로 이어진 것이다.

물론 hourglass network에서도 skip connection을 통해 upsampling 과정에서 low-level feature를 잘 고려할 수 있도록 U-Net과 동일하게 설계되어 있다.  다만 U-Net과의 차이점은 low-level feature map을 바로 사용하는 것이 아닌 별도의 conv. layer를 통과시켜 사용한다는 점과 concatenation이 아니라 합하는 방식으로 사용한다. 마지막으로 이러한 블럭을 여러 개 쌓은 이유는 결과를 반복적으로 개선하기 위해서이다.

1개의 Stack 구조

 

- DensePose

신체 전체의 landmark를 알게되면, 사실은 3D 정보를 아는 것과 동일하다. 그 하나의 확장으로 DensePose라는 모델이 제안되었다. 아래 그림과 같이 사람의 몸을 표현한 것을 UV map이라고 한다.

UV map은 표준 3D 모델을 U축과 V축으로 이루어진 2D 형태로 펼쳐서 이미지 형태로 만들어놓은 좌표 표기법이다. 

따라서 UV map 상에서 한 점은 3D mesh의 한 점과 1대1로 매치된다. 따라서 좌표의 값이 변하더라도 UV map과 3D mesh의 mapping 관계는 변하지 않는다. 즉 UV map을 출력하는 DensePose의 경우 3D mesh를 바로 출력하는 것과 마찬가지이다. UV map은 사실은 3D model에 Texture map을 입히기 위해 고안되었다.

 

Faster R-CNN과 거의 동일한 구조로, 3D surface regression branch를 더하여 이를 통해 최종 UV map을 출력하는 것이 추가되었다. 이렇게 DensePose는 입력과 출력 관계를 잘 설계함으로써 2D 구조의 CNN을 기반으로 3D를 잘 예측하는 스마트한 방법을 설계했다고 볼 수 있다.

 

 

- RetinaFace

DensePose의 형태를 다른 task에도 응용할 수 있는데, 기본적인 FPN을 backbone으로 가지고 task에 따라 세부적으로 head만 추가하거나 변경하는 형태로 응용할 수 있다. 이렇게 다양한 방식을 브랜치를 통해 한번에 수행하도록 하는 구조를 Multi-task branch(= Multi-task 학습법)라고 부른다.

이렇게 multi-task 형태로 학습을 수행하면 공통된 정보에서 backbone network이 보다 robust하게 학습된다는 장점이 있다. 그래서 조금 적은 데이터로도 강인한 학습 효과가 있다.

 

그래서 전달하고 싶은 메시지는 backbone network 위에 본인이 관심있는 task에 해당하는 target-task branch를 추가해주는 방식으로 시도해볼 수 있다는 것이다. 이는 현재 computer vision 분야에서 많이 활용되는 design pattern 중 하나이다.

 

 

📌 Detecting objects as keypoints

- CornerNet

Bounding-Box가 {Top-left, Bottom-right}에 두 개의 corner에 존재하는 점을 활용하는 구조가 CornerNet이다.

Backbone network의 feature map의 head를 통해서 heatmap 표현을 통해서 Top-left, Bottom-right의 점을 각각 구한다.

그리고 embedding이라고 각 점을 표현하는 head를 하나 더 두고, 같은 object로 부터 나온 코너라면 embedding이 동일한 클래스로 mapping되어야 한다는 것을 목적으로 학습한다. Single-stage 구조에 가깝기 때문에 성능보다는 속도를 강조한 구조이다.

 

- CenterNet

성능이 아쉬운 CornerNet의 단점을 극복하고자, Center가 중요한 역할을 한다는 점에서 CenterNet이 제안되었다.

 

CenterNet1) Bounding-Box가 {Top-left, Bottom-right, Center}의 3개의 점으로 활용하는 구조

 

CenterNet2) Bounding-Box가 {Width, Height, Center}로, box의 너비와 높이를 활용하는 구조

 

 

CenterNet2를 기준으로 성능을 보면, FasterRCNN, RetinaNet, YOLOv3보다 속도도 가장 빠르고 성능도 뛰어난 결과를 확인할 수 있다.

 

Comments