ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [자료 읽기] Image Segmentation (이미지 분할)
    자료 읽기 2022. 3. 10. 15:04

    출처 : https://wikidocs.net/142644

     

    3. Image Segmentation(이미지 분할)

    Image Segmentation은 입력 이미지에서 픽셀의 각 클래스를 구분하는 Task입니다. ![](https://i.ibb.co/YhdKdd5/ss.png)

    wikidocs.net

    3. Image Segmentation (이미지 분할)

    (1) 이미지 분할 아이디어

    1) 이미지 분할

    - 객체검출(Object detection) : 바운딩 박스(Bounding box)로 객체 검출
    - 이미지 분할(Image segmentation) : 픽셀의 분류(Classification)

    - 이미지 분할 목표 : 네트워크가 입력 이미지 안의 모든 픽셀을 (지정된 개수의)클래스로 분류

     

    2) 이미지 분할 종류

    - Semantic Segmentation : 각 Pixel이 어떤 클래스인지 구분하는 문제
    - Instance Segmentation : 같은 사물안에서 서로 다른 객체(Instacne)까지 구분하는 문제

    - Segmentation map : 이미지 분할 네트워크의 출력값, 각 pixel이 N개의 클래스 중 어떤 클래스에 속하는지

    - argmax로 처리한 Segmentation map

    3) 이미지 분할 네트워크의 기본 구조 : 엔코더 & 디코더

    - 엔코더 : 입력 이미지의 W, H를 줄이고 체널수를 늘려 피처의 개수를 증가

    - 디코더 : W,H를 입력이미지의 사이즈로 회복, 체널수는 클래스의 사이로 맞춰 Segmentation map을 생성

     

    (2) 이미지 분할 모델 이해를 위한 사전지식

    1) Down-sampling

    - 정의 : 인코딩할때 data의 개수를 줄이는 처리과정

    1.1) Pooling

    - 정의 : 특정한 규칙(Max, Average)에 의해서 Kernel 내에서 값을 만들어 내거나 추출하는 방법

    1.2) Dilated (Atrous) convolution

    - 구조 : 일반적인 convolution filter 사이에 빈 공간을 넣어서 구멍이 뚫려 있는 듯한 구조

    - Semantic Segmentation에서 높은 성능을 내기 위해서는 CNN의 마지막 feature map에 존재하는 한 픽셀이 입력값에서 어느 크기의 영역에서 커버하는지를 결정하는 receptive field가 얼마나 큰지가 중요

    1.3) Depthwise convolution

    - 각 channel 마다 필터를 적용하여 spatial feature를 추출

    - input channel 수 = output channel 수

    - 기존 convolution과 Depthwise convolution를 비교

    1.4) Depthwise separable convolution

    - 구조 : Depthwise convolution 뒤에 1x 1 convolution을 연결한 구조

    - 기존 Convolution 필터가 Spatial dimension과 Channel dimension을 동시에 처리 하던 것을 따로 분리시켜 각각 처리하는 방법으로 해석

    - 기존 Convolution에 비해 parameter의 수와 연산량이 훨씬 적다

    2) Up-sampling

    - 정의 : 디코딩시 복원하기 위해서 data의 크기를 늘리는 처리 과정

    2.1) Unpooling

    - Maxpooling을 거꾸로 재현

    - Nearest Neighbor Unpooling : 주변 픽셀들을 동일한 값으로 채우는 방식

    - Bed of NailsUnpooling : 변 픽셀들을 0으로 채워주는 방식

    2.2) Max Unpooling

    - Max pooling할때의 선택된 값들의 위치를 기억해 원래 자료의 동일한 위치에 Max값을 위치시켜 Unpooling

    2.3) Bilinear Interpolation

    2.4) Deconvolution

    - convolution의 역연산인 역행렬

    2.5) Transposed Convolution (Backward Strided Convolution)

     

    (3) 이미지 분할 모델

    1) FCN

    - 모델 : CNN 기반 모델(AlexNet, VGG16, GoogLeNet)을 Semantic Segmentation Task를 수행할 수 있도록 변형시킨 모델

    - 구현 : 이미지 분류 문제를 먼저 트레이닝 시킨 후 모델을 튜닝해 전이학습

    1.1) 네트워크 핵심 아이디어

    - 기존 이미지 분류에서 쓰인 네트워크(Pretrain)Feature를 추출하고, FC 레이어 대신 1X1 Conv과 Up-sampling(Transpose Convolution)로 변경하여(Fine-Tuning) 입력이미지와 같은 사이즈 회복을 하도록 네트워크를 구성

    1.2) 네트워크 구조

    - Convolution Layer를 통해 Feature 추출

    - 1x1 Convolution Layer를 이용해 피처맵의 체널수를 데이터셋 객체의 개수와 동일하게 변경 (Class Presence Heat Map 추출)

    - 낮은 해상도의 Heat Map을 Upsampling(=Transposed Convolution) 한 뒤, 입력 이미지와 같은 크기의 Map 생성

    - 최종 피처 맵과 라벨 피처맵의 차이를 이용하여 네트워크 학습

    1.2.1) Up-sampling by Transposed convolution

    1.2.2) Skip architecture

    1.2.3) FCN 확장 모델 (FCN-32s, FCN-16s, FCN-8s)

    1.3) 네트워크 트레이닝

    - 손실함수 : 모든 픽셀의 크로스 엔트로피를 구하고 이를 모두 더하여 최종적으로 손실를 계산

    1.4) 네트워크 장단점 및 시사점

    1.4.1) Skip architecture 아이디어

    1.4.2) 이미지 분류 네트워크를 이미지 분할 네트워크에 적용

    1.4.3) FC 레이어를 삭제하여 이미지 분할을 구현 가능하도록 만들었습니다.

     

    2) SegNet

    - 픽셀단위의 정교한 segmentation + 실시간으로 빠른 계산

    2.1) 네트워크 구조

    2.1.1) 인코더 네트워크

    - VGG16의 구조에서 FC layer를 뺀 13개의 layer를 사용

    2.1.2) 디코더 네트워크

    - 인코더의 정반대 구조

    - 인코더의 전체 feature map을 저장하지 않는 대신 max-pooling indices(위치정보)만 저장해두었다가 Max unpooling에 사용

    2.1.3) Softmax classifier

    2.2) SegNet의 성능

    2.2.1) Cam Vid dataset

    2.2.2) SUN RGB-D dataset

     

    3) U-Net

    3.1) 네트워크 핵심 아이디어

     

Designed by Tistory.