오답노트
semantic segmentation 본문
- semantic segmentation
: computer vision 중 가장 만이 다뤄지는 문제들 3가지 중 (classification, detection, segmentation) 중 하나.
모든 픽셀의 레이블을 예측하여 각각의 요소가 어떤 값들을 가지고 있는지를 판별한다. (각 픽셀이 가진 레이블 값들을 예측한다.)
e.g FCN, SegNet, DeepLab 등
사진에 있는 모든 픽셀을 해당하는 class 로 분류하는 것. 이미지에 존재하는 모든 픽셀에 대한 예측을 하기 때문에 dense prediction 이라고도 부른다. 이때, semantic segmentation 은 instance segmentation 과는 달리 같은 클래스의 instance 들을 따로 구별하지 않는다.
즉, 하나의 개체 안에서 여러 instance 가 존재하더라도 통째로 하나의 class 로 분류.
task
: input data 로는 RGB color image (c h w) 혹은 Gray scale image (h w) 가 들어오며, output data 로는 각 픽셀별로 어느 class 에 속하는지에 대한 레이블을 나타낸 segmentation map 이 나온다.
one hot encoding 으로 각 class 갯수만큼의 channel 을 생성하고 argmax 를 이용하여 하나의 출력물을 내놓는다.
semantic segmentation 의 method
: AlexNet 이나 VGG 등 분류에 자주 쓰이는 신경망들은 semantic segmentation 에 적합하지 않는데, 그 이유는 parameter 의 갯수와 차원을 줄이는 layer 가 있어 각 픽셀에 대한 자세한 위치 정보를 잃게 된다. 또한, 보통 마지막에 위치한 fully connected layer 를 통해 위치에 대한 정보를 잃을 수 있다.
이러한 문제점을 방지하기 위해선 pooling 과 fully connected layer 를 없애고 stride = 1, padding = same 인 convolution layer 로 진행해야한다. 그러나 그렇게 되면 너무 많은 parameter 와 연산량으로 인해 금방 메모리 문제나 비용적인 문제에 다다르게 되어, 현실적으로는 불가능하다.
이에 대해 semantic segmentation 모델들은 보통 downsampling & upsampling 의 형태를 가지고 있다.
downsampling : 주된 목적은 차원을 줄여서 적은 메모리로 깊은 convolution 연산을 할 수 있게 하는 것. 보통 stride = 2 이상을 하는 연산을 하거나 pooling 을 사용한다. 이 과정을 진행하면 필연적으로 feature 의 정보를 잃게 된다. 마지막에는 일반적으로 넣는 fully connected layer 를 사용하지 않고 fully connected network 를 사용한다. FCN 모델이 나온 이후로 대부분의 모델이 사용하는 방법이다.
upsampling : downsampling 을 통해 나온 결과의 차원 수를 늘려 인풋과 같은 차원 (크기) 로 만들어주는 과정이다. 주로 strided transpose convolution 을 사용한다.
보통 downsampling 은 인코더 (암호화), upsampling 은 디코더 (복호화) 라고 한다.
인코더를 통해 입력 받은 이미지의 정보를 압축 된 벡터 (latent vector) 에 표현하고 디코더를 통해 원하는 결과물 (주로 인풋 데이터의 사이즈) 의 크기로 만든다.
- FCN 내용 추가
두 번째로 dilated / atrous convolution 을 이용하는 방법이다.
Deep lab 이 이용하는 방법으로, 신호가 소멸 되는 것을 제어하고 다양한 크기의 특징을 익히는 방법을 제시한다. atrous convolution 은 dilation rate (확장 비율) 이라는 새로운 변수를 사용한다. 이 비율은 커널에서 사용할 값들 사이에 얼마만큼의 공간을 넣어줄 지에 대한 변수이다.
일반적으로 확장비율이 없는 일반 convolution 은 1 이라고 정의하며, 3 x 3 의 커널이 확장비율 2 를 가지게 된다면 5 x 5 의 커널 사이즈를 갖게 된다. 이와 같은 방법은 동일한 계산 방식으로 더 넓은 시야, 즉 더 넓은 크기의 정보들을 가질 수 있게 된다.
deep lab v3 는 imageNet 에서 학습 된 ResNet 을 기본적인 특징 추출기로 사용한다. ResNet 의 마지막 블럭에는 여러가지 확장 비율을 사용한 atrous convolution 을 사용해서 다양한 크기의 특징들을 뽑아낼 수 있도록 한다.
또한 이전 Deep lab 에서 소개 되었던 atrous spatial pyramid pooling (ASPP) 를 사용한다.
다양한 확장비율을 가진 커널을 병렬적으로 사용하는 convolution model 이다.
'머신러닝, 딥러닝' 카테고리의 다른 글
[yolov5] RuntimeError : unable to find a valid cuDNN convolution (0) | 2021.11.24 |
---|---|
칼만필터 (Kalman Filter) (0) | 2021.11.09 |
FairMOT (수정 중) (0) | 2021.06.08 |
yolo loss (IoU) (0) | 2021.05.17 |
[yolov5] Yolo 모델 설명 (0) | 2021.05.17 |