관심있는 분야

Object detection 3

엘리펀튼는코끼리 2021. 2. 21. 01:07

Sementic Segmentation

Segmentation은 픽셀단위로 사물을 쪼개는 것이다.

downsampling과 upsampling을 이용하여 구할 수 있다.

down sampling은 우리가 흔이 아는 max, mean pooling, stride를 이용한 conv등이 있다. 

 

up sampling 또한 여러가지 방법이 있다. 

 

1) unpooling

2) bilinear interpolation

RoI Align과 같은 방법이다. 

 

3) Max Unpooling

max pooling한 위치를 기억하여서 unpooling할때 그 위치에 수를 넣고 나머지는 0으로 처리하는 것이다. 따라서

이렇게 대칭적 구조로 만들어야 한다. 

 

4) Transposed Convolution

 

이를 위해서 우선 일반적인 convolution을 살펴보자.

위의 방식으로 진행되는것이 일반적인 convolution이다. 이를 matrix의 관점에서 보면 아래와 같이 표현할 수 있다.

우선 convolution matrix는 위와 같다. 한줄씩보면

인데 stride가 1이므로 2번째줄은 한칸 밀려서 넣고 3번째줄은 1부터 시작함으로 4칸을 밀려서 시작하는 것이다.

그리고 이렇게 만든 matrix를 flatten한 input과 곱하면

다음의 output vector가 나오고 이를 2*2로 만든것이 우리가 아는 convolution이 된다. 

 

transpose convolution은 반대로 matrix를 세로로 만든다.

이렇게 만들면 결과가 16*1 벡터가 나오고 이를 4*4로 만들면 2*2가 4*4로 up sampling이 된것을 확인할 수 있다. 

 

이것의 장점은 learnable하다는 것이다.

 

그리고 이렇게 upsampling한 결과를 per-pixel cross entrophy에 넣어서 훈련을 시키면 된다. 

 

Mask R-CNN

기존의 segementation은 고양이, 소같은 구별이 가능한 thing과 개개인으로 분류하기 힘든 물, 풀같은 stuff를 구분을 하지만 thing같은 경우 같은 cow는 하나의 덩어리로 분류한다.

각각의 thing을 sementation으로 분류하는 방법이 Mask R-CNN이다.

이는 faster R-CNN에서 Mask prediction을 추가한 것인데 마지막에 나온 box에서 conv를 통해 mask를 따오는 것이다.