ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Semantic Segmentation] U-Net 원리
    Deep-Learning/[Vision] 논문 리뷰 2020. 1. 31. 16:29
    * 논문 : https://arxiv.org/abs/1505.04597

    1. Semantic Segmentation의 목적 : https://kuklife.tistory.com/118?category=872136

     

    2. Semantic Segmentation 알고리즘 - U-Net

     U-Net은 2015년 5월 경에 게제되었으며, 독일의 프라이부르크 대학에서 Olaf Ronneberger, PhilippFischer, Thomas Brox에 의해 작성되었다.

     

     논문의 핵심 내용은 주제에서 비춰지듯 Biomedical Image segmentation을 위한 convolutional network에 대한 내용으로써, End-to-End 로 Segmentation하는 심플하고 효과적인 방법이다.

     

     U-Net은 Fully Convolution Network(FCN)를 기반으로 하여 구축하였으며, 적은 데이터를 가지고도 더욱 정확한 Segmentaion을 내기 위해 FCN 구조를 수정하였다.

     

     ※ FCN 원리 : https://kuklife.tistory.com/117?category=872135

     

    (1) Introduction

     

     논문에서 위의 Architecture를 network의 중심을 기준으로 왼쪽은 Contracting Path(Encoding으로 생각하면 됨), 오른쪽은 Expansive Path(Decoding으로 생각하면 됨)로 정의하였다.

     

     

    이제 그럼 그림을 보면서 architecture의 내부 특징과 그 과정에서 사용된 Overlap-tile기법에 대해 살펴보겠다.

     

     U-Net의 main idea는 다음과 같다.

     1) Contracting Path : 이미지의 context 포착

     2) Expansive Path : feature map을 upsampling 하고 1)에서 포착한 feature map의  context와 결합 → 이는 더욱 정확한 localization을 하는 역할을 한다.

     

     기존의 FCN과 다른 중요한 점 2가지가 있다.

     1) upsampling 과정에서 feature chennel 수가 많다. 이는 context를 resolution succesive layer에게 전파할 수 있음을 의미한다.

     2) 각 Convolution의 valid part만 사용한다.(valid part란, full context가 들어있는 segmentation map을 의미) 이는 Overlap-tile 기법을 사용하여 원활한 segmentation이 가능하도록 한다.

     

     

     그림에서 보이듯이 Blue tile과 Yellow tile이 서로 Overlap되어 있음을 확인할 수 있으며, Blue area에 기반하여 Yellow area의 Segmentation을 prediction 했음을 확인 할 수 있다. 그 이후, missing data는 mirroring을 통하여 extrapolation한다.

     

     여기서, extrapolation은 한국어로 "외삽한다" 라고 표현하는데 외삽한다 라는 의미는 다른 변수와의 관계에 기초하여 변수 값을 추정한다는 것이다.

     Pooling을 할 때, 0으로 이루어진 값으로 인해 값이 사라지게 되는데 이 사라진 값을 추정하겠다는 의미이다.

     

     이러한 Overlap-tile을 적용함으로써 얻을 수 있는 혜택은 image resolution이 GPU memory에 대해 자유로워진다 라는 것이다. 

     

     또한, U-Net은 적은 데이터로 충분한 학습을 하기 위해 Data Augmentation을 사용한다.  Data Augmentation이란 원래의 데이터를 부풀려서 더 좋은 성능을 만든다는 뜻으로써, 대표적인 케이스가 VGG Model에서 많이 사용하고 벤치마킹하였다. 

     

     Data Augmentation이 중요한 이유는

     1) Preprocessing & augmentation을 하면 대부분 성능이 좋아진다.

     2) 원본에 추가되는 개념이니 성능이 떨어지지 않는다.

     3) 쉽고 패턴이 정해져 있다.

     

     기본적인 예로는 아래와 같은 방법들이 있다.

     

     1) 좌우반전을 해준다.

     왼쪽만 바라보는 고양이를 70개 넣어준다고 가정하면, CNN Model을 적용하였을 때 오른쪽을 보는 고양이는 못맞추게 된다. 왼쪽을 보는 고양이 70개 + 오른쪽을 보는 고양이 70개 = 140개를 넣어주면 어느 쪽을 보더라도 맞추게 되는 것이다.

     

     

     2) 이미지를 잘라준다.

     확률적으로 꼬리를 보고 고양이를 판단할 확률 50%, 귀를 보고 판단할 확률 30%로 판단한다고 할 때, 딥러닝은 꼬리 뿐만 아니라 상자도 인식하느라 고양이의 특징을 제대로 파악하지 못하게 된다.

     그렇기에 사람을 인식하는 방법을 모방하기 위해 사물 + 꼬리가 있는 사진을 넣어주기 보단 꼬리만 잘라서 넣어준다면 성능이 더 좋아질 것이다. 즉, 각 부분만 보고도 고양이로 판단할 수 있도록 해준다.

     

     

     3) 밝기 조절

     딥러닝 모델로 App을 만들게 된다면, 사진을 찍는 핸드폰마다 빛의 양이 다를 것이다. 그렇기에 모두 인식될 수 있도록 밝기를 조절해서 넣어준다.

     

     다시 U-Net으로 돌아와 Data Augmentation에서 중요하게 사용된 것은 크게 2가지로 파악된다.

     1) Elastic Deformation

     적은 수의 이미지를 가지고 효과적으로 학습하기 위해 이 방식을 사용했다고 한다.(티슈 조직 등의 실질적인 변형과 유사하다고 함)

     2) Weighted Cross Entropy + Data Augmentation

    많은 cell을 Segmentation 해야하는 문제에서의 도전 과제는 같은 클래스가 서로 인접해 있는 케이스이다.

     

     

     위 그림의 a처럼 cell이 인접해있으면 각 cell과 배경을 구분하는 것은 쉽지만, cell 각각을 서로 구분하는 것(논문에서는 instance segmentation이라 표현함)은 어렵다. 그래서 이 논문에서는 각 instance의 테두리와 테두리 사이가 반드시 배경이 되도록 처리한다.

     즉, 2개의 셀이 붙어있는 경우라고 하더라도 그 둘 사이에는 반드시 배경으로 인식되어야 할 틈을 만들겠다 라는 의미이다.

     

    (2) Architecture

     이제, U-Net의 구조를 자세하게 살펴보자. 빠른 이해를 위해 위의 그림을 다시 가지고 오면 다음과 같으며, Contracting Path Expansive Path 두 가지로 나누어보겠다.

     

     

     

     1) Contracting Path

     Contracting Path는 일반적인 CNN을 따르며, Downsampling을 위한 Stride2, 2x2 max pooling 연산과 ReLU를 포함한 두 번의 반복된 3x3 unpadded convolutions 연산을 거친다. 

     즉, 3x3conv → ReLU → 2x2 max pooling → 3x3conv → ReLU → 2x2 max pooling 이다.

     그리고 downsampling 과정에서 feature map channel의 수는 2배로 증가시킨다.

     

     2) Expansive Path

     Expansive Path는 2x2 convolutions를 통해 upsampled된 feature map과 1)의 cropped feature map과의 concatenation 후에 ReLU 연산을 포함한 두 번의 3x3 convolutions 연산을 거친다.

     이 때, 1)의 Crop된 featrue map을 보내는 이유는 Convolution을 하면서 border pixel에 대한 정보가 날아가는 것에 대한 양쪽의 보정을 위함이다.

     

     마지막 layer 1x1 convolution 연산을 하는데 이는 64개의 component feature vector를 desired number of classes에 mapping 하기 위함이다.

     

    (3) Training

     input image와 상응하는 segmentation map은 SGD와 함께 network를 학습하기 위해 사용된다. convolution 연산이 padding을 거치지 않기 때문에 input image보다 output image의 크기가 더 작아진다.

     

     Overhead와 GPU memory의 사용을 극대화하기 위하여 큰 batch size보다는 큰 input tiles를 선호된다. 따라서 저자는 높은 momentum(0.99)를 사용해서 과거에 진행했던 training sample이 현재의 update에 더욱 관여하도록 하였다.

     

     Energy function은 최종적인 feature map과 corss entropy loss function, pixel wise soft-max를 결합하여 계산된다. 

     

     또한, 논문의 저자는 각각의 Ground truth segmentation의 weight map을 서로 다른 frequency를 대처하고 network에게 작은 separation borders를 학습시키기위해 사전에 weight map을 계산한다. separation border는 morphological operation을 통해 계산되어지며, weight map이 계산되어지는 식은 다음과 같다.

     

    0

     

     자신들의 실험에서 w0를 10으로 표준편차(σ)를 약 5pixel로 설정했다고 한다. 또한, deep network에서 초기 weight에 대한 good initialization의 중요성에 대해 언급하며, 이상적으로는 초기 weights들은 각각의 feature map이 대략적인 unit variance를 가지도록 설정되어야 한다고 한다.

     

     U-Net은 표준편차를 가지는 가우시안 분포로부터 초기 weights를 도출해낼 수 있다고 한다. 

     

     

     N을 계산하는데에 있어 추가적인 설명을 붙였는데 만약 이전 layer에서 3x3 convolution 연산과 feature channel의 개수가 64개라면 N은 3x3x64 = 576으로 계산될 수 있다고 한다.

     

     실험 결과는 생략하겠다.

    댓글

by KUKLIFE