Segmentation

rokky·2023년 8월 11일
0

딥러닝

목록 보기
7/18

Segmentation

  • segmentation은 이미지를 pixel레벨로 이해하는 접근

  • 픽셀 하나하나에 대해 분류, 탐지하는 task

  • 동일한 label을 가진 모든 픽셀이 동일한 object또는 class에 속하도록 이미지의 각 pixel에 label을 할당하는 프로세스를 의미

  • 이것은 image level로 분류하는 작업인 image classification보다 어렵다

  • input : RGB또는 흑백 이미지

  • output : 각 pixel이 어느 class에 속하는지를 나타내는 map

segmentation의 종류

  1. semantic segmentation
  • 같은 class의 instance(같은 class에 있는 개별 개체)를 구별하지 않는다.
  1. instant segmentation
  • 같은 class안에서도 다른 instance 구분

Sementic segmentation

  1. 픽셀 하나 하나마다 분류
  • 가장 단순한 방법
  • 학습이 효과적으로 작동만 하면 가장 강력한 모델이지만 굉장히 비효율적이고 연산량이 너무 많아진다.
  1. Bilinear Interpolation
  • Interpolation이란 이미 아는 값 사이 위치한 값을 알려진 값으로 부터 추정하는 것을 의미한다.
  • 즉 몇개의 픽셀만을 학습한 후 학습하지 않은 중간 픽셀은 interpolation으로 추정한다.
  • 정확도는 떨어질지라도 계산량과 학습시간은 현저히 줄어들 것이다.

1) 1d linear interpolation

  • 두 지점과의 직선 거리에 따라 선형적으로 결정하는 방법
  • 두 지점 x1, x2에서의 데이터 값이 f(x1), f(x2)일때 x1, x2 사이의 점 x의 data 값은 f(x) = (d2/(d1+d2))f(x1) + (d1/(d1+d2))f(x2) 가 된다.

2) 2D linear interpolation(=Bilinear Interpolation)
-1D linear interpolation의 2차원 확장

  1. Convolution기반 모델들
  • VGG, Restnet등의 classification모델들은 Sementic Segmentation에 적합하지 않다. 마지막 층의 Fully connected layer를 통과하면서 많은 parameter와 차원이 축소되면서 object의 위치정보를 잃기 때문에
  • 위치 정보를 잃지 않기 위해서 Pooling과 FCN을 없애고 stride와 padding을 일정하게 한다고 하면 학습량이 너무 많아져 비효율적이다.
  • 따라서, downsampling, upsampling을 활용한다.

  • 논문에서는 보통 Downsampling을 인코더, Upsampling을 디코더라고 부른다.
  • 인코더를 통해 입력받은 이미지의 정보를 벡터로 압축하고, 디코더를 통해 원하는 결과물로 확장시킨다.
  • 인코더 : 차원을 줄여서 적은 메모리로 깊은 convolution을 할 수 있게 한다. 주로 convolution과 pooling을 이용한다.
  • 디코더 : 인코더를 통과한 결과의 차원을 다시 늘려 input과 같은 차원으로 만들어준다. 주로 Transpose Convolution을 이용한다.

*Transpose convolution

  • 이런 인코더 디코더 구조를 가지는 대표적인 모델은 다음과 같다-> FCN,DeepLab, U-Net
  • 이들은 단지 network구조를 어떻게 변경했느냐의 차이이다.(특히, shortcut connection을 어떻게 했느냐가 중요)

FCN(Fully convolutional Network for Sementic Segmentaion)

  • FCN은 sementic segmentation을 위해 image classification에서 우수한 성능을 보인 CNN기반 모델(AlexNet, VGG16..)등을 목적에 맞추어 변형시킨 것이다.

  • 기존 image classification에서 이용된 fc-layer의 위치 정보 소실문제를 방지하기 위해서 모든 fc-layer를 convolution layer로 대체

  • 또한 transfer learning이용

  • VGG16으로부터 Transfer Learning을 사용

  • VGG16의 마지막 fully connecter layer를 1X1 convolution layer로 바꾼다(이때문에 이름이 Fully convolution Network이다.)

  • 이후 Transposed Convolution을 이용해 압축되어 있는 heat map을 입력 이미지와 동일한 사이즈로 만든다.

  • 또한 FCN은 skip connection구조 적용

  • Unsampling(디코딩)을 하면서 VGG16의 낮은 layer의 특징 map을 더한다.

  • Pooling을 통해 압축되며 소실되는 중요한 정보를 이를 통해 얻을 수 있다.

Transfer Learning

  • 초기 weight를 좋은 weight로 설정하자
  • 데이터가 다르더라도 이미지를 활용한 task에서는 공통된 feature들이 존재할 것이다.
  • 따라서 공통된 feature를 활용하여 학습 성능을 높이자

Deep Lab

  • FCN의 문제는 Receptive Field의 크기가 일정하게 정해져 있어서 작은 물체를 잘 인식하지 못했고 일정하지 않은 결과가 나오기도 했다.
  • 따라서 DeepLab이라는 모델에서 Dilated Convolution을 이용하였다.

Dilated Convolution


(파란색은 input, 초록색은 output)

  • 현재 위 그림에서 3X3의 kernel을 사용하고 있는데 여기에 추가적인 dilation rate(각 커널 사이의 간격) = 2 로 지정해 주어 5X5 필터를 쓰는 것과 동일한 결과를 도출해 낼 수 있다.
  • Dilated convolution은 특히 real-time segmentation 분야에서 주로 사용됩니다. 넓은 시야가 필요하고 여러 convolution이나 큰 커널을 사용할 여유가 없는 경우 사용합니다

U-Net

  • 신경망 구조를 skip connection을 평행하게 두고 가운데를 기준으로 좌우가 대칭이 되도록 레이어를 배치하여 이름 그대로 U자형으로 만들었다.

performance measure

  • IOU

  • IOU = 100 X TP/(TP + FP + FN) = overlapping region/combined region

  • PQ

0개의 댓글