BoostCamp

2021.09.09 - [Week 6] Day 4. -

배기니어 2021. 9. 10. 09:48

공부한 내용

Semantic Segmentation

1. Semantic Segmentation

 1.1. What is semantic segmentation?

  1) overview

   • image classification을 pixel 단위로 분류하는 문제

   • 영상 속 물체의 mask를 생성

   • 같은 class이지만 서로 다른 물체는 구분하지 못함

    - e.g. 영상 속 여러명의 사람은 같은 색으로 표현

   • instance segmentation : 같은 class이지만 서로 다른 물체를 구분

 

 1.2. Where can semantic segmentation be applied to?

  1) applications

   • semantic segmentation은 image 내의 contents를 이해하는 데에 다양하게 활용 가능

   • 영상 contents 편집에는 필수적

    - e.g. object 구분되는 특징 이용해 특정 물체만 수정할 수 있는 UI 제공 (post-processing)

   • computational photography

    - computer 이용해서 photography 편집하는 기술에 응용 가능

 

2. Semantic Segmentation Architectures

 2.1. FCN (Fully Convolutional Networks)

  1) FCN

   • end-to-end model

    - 입력부터 출력까지 미분 가능한 neural network로 구성

    - 입력과 출력 pair만으로 neural network 학습 후 target task에 적용 가능

   • 기존에는 hand-designed algorithm의 결합으로 semantic segmentation 수행

    - 데이터 많아도 학습 가능한 부분 제한

    - 성능 향상 위해 수학적 모델을 try and error 방식으로 실험 -> 성능 향상 어려운 문제

   • 임의의 해상도의 input image 사용 가능

   • output image의 해상도도 input image에 맞춰진다.

   • cf. AlexNet

    - input의 해상도 달라지면 convolutional layer의 activation map의 dimension 변화

    - convolutional layer 뒤에 flattening part에서 vectorization

    - vector 길이 달라지면 FC layer를 사용할 수 없는 한계 존재

    - FCN은 학습에 사용한 input 해상도에 관계 없이, 테스트할 때 임의의 해상도의 영상 사용해도 문제 없음 -> 높은 호환성

  2) Fully connected vs. Fully convolutional

   • FC layer

    - 공간정보 고려 안함

    - fixed dimensional vector 주어지면 또 다른 fixed dimensional vector 출력하는 구조

   • fully convolutional layer

    - input, output 모두 activation map(tensor)

    - spatial coordinate 유지한 상태로 convolutional operation 수행

    - 1x1 convolution으로 구현해서 각 위치마다 classification 결과를 map 형태로 출력

  3) FC layer as 1x1 convolutions

   • 기존 FC layer를 다르게 해석하면 1x1 convolution으로 구현 가능

   • semantic segmentation network 쉽게 구현 가능

   • FC layer

    - convolutional layer에서 activation map 출력

    - activation map에 flattening 적용하여 vectorization (raster order scanning)

    - 영상의 공간정보 고려하지 않은 하나의 vector로 만들어짐

   • channel axis 기준으로 flattening

    - 각 위치마다 1개의 vector 생성

    - 각 vector에 대해 FC layer 적용 가능

   • 1x1 convolution layer

    - 1x1 convolution kernel을 FC layer에서 하나의 weight column으로 볼 수 있다.

    - 여러 개의 1x1 convolution kernel == FC layer

    - sliding window 방식

    - filter의 weight 공유

    - spatial information 유지

   • FC layer를 convolutional layer로 대체 -> FCN

   • semantic segmentation model using FCN

    - 위치 별로 classification 가능

    - stride & pooling layer 적용 -> 넓은 receptive field size, input의 context 고려

    - 필연적으로 해상도가 낮아지는 문제 발생

    - 저해상도의 activation map -> 작은 score map

    - 문제 해결 위해 upsampling 도입
  4) Upsampling

   • stride & pooling layer vs. activation map resolution

    - stride와 pooling layer가 없으면 고해상도의 activation map 출력 가능

    - receptive field의 size가 작아 영상의 전반적인 context 파악 불가능한 문제 발생

    - trade-off

   • activation map 작게 만들어 receptive field size를 크게 하는 것이 성능에 좋다.

   • upsampling 적용하여 강제로 resolution 맞춤

   • 대표적인 방식

    - Transposed convolution

    - Upsample and convolution

  5) Transposed convolution

   • input value로 filter weight를 scaling 후 output의 해당 위치에 적용

   • kernel 중첩되는 부분에서는 더해지는 효과

   • 학습 가능한 upsampling을 하나의 layer로 한 번에 처리

   • 일정 부분의 kernel 중첩되어 계속해서 결과 더해지는 문제 발생 (checkerboard artifact)

   • convolution kernel size와 stride 조정하여 중첩 생기지 않도록 적용하는 것이 중요!

  6) Upsample and convolution

   • 쉽게 구현 가능하고 좋은 성능

   • 골고루 영향 받는 효과

   • upsampling operation을 두 개로 분리

    ① interpolation 적용(NN, bilinear sampling, etc.)

     - 학습 가능한 parameter 없이 해상도만 높임

    ② 학습 가능한 runnable upsampling으로 만들기 위해 convolutional layer 적용

     - 학습 가능

  7) Feature map resolution

   • 해상도 줄어든 상태에서 upsampling 통해 잃어버린 정보 살리기 어려움

   • high resolution

    - fine : 작은 receptive field size

    - low level layer

    - detail : 작은 디테일

    - local : 국지적, 작은 차이에도 민감

   • low resoltion

    - coarse : 큰 receptive field size

    - high level layer

    - semantic : 의미론적 정보 포함

    - holistic : 전반적

    - global

   • semantic segmentation은 high resolution(픽셀 별), low resolution(의미 파악) 모두 필요

   • 영상 전체에서 pixel이 물체의 경계선 안쪽인지 바깥쪽인지 파악 필요

   • 물체의 경계를 디테일하게 파악해야 한다!

  8) skip connection

   • 작은 score map과 큰 score map의 특징 모두 확보하기 위해 fusion

   • high level layer의 activation map을 upsampling -> 해상도 높임

   • low level layer의 activation map을 upsampling 후 concatenation 적용

   • e.g. models

    - FCN-32s : conv7(마지막) activation map만 사용 (x32)

    - FCN-16s : (pool4 + conv7(x2)) activation map (x16)

    - FCN-8s : (pool3 + pool4(x2) + conv7(x4)) activation map (x8)

   • 중간 단계 activation map 합쳐 성능 향상

  9) Features of FCN

   • Faster

    - end-to-end neural network

    - GPU 병렬처리 가능

   • Accurate

    - model이 전반적으로 해당 task에 대해 학습

    - low level feature + high level feature -> 경계선 잘 근사

 

 2.2. Hypercolumns for object segmentation

  1) Hypercolumns

   • FCN과 유사한 연구

    - target task : semantic segmentation

    - motivation : skip connection

    - 1x1 convolution 적용

    - low level layer와 high level layer의 feature map 해상도 맞춰 사용하는 방법 제시

   • 낮은 layer와 높은 layer의 feature를 융합하는 과정 강조

   • FCN은 1x1 convolution과 fully convolutional 강조

  2) Overall architecture

   • end-to-end가 아니다.

   • third party algorithm 사용해서 object의 bounding box 먼저 추출해서 적용

 

 2.3. U-Net

  1) Overview

   • 대부분 semantic segmentation model의 break through는 U-Net에서 시작

   • neural network model 중 input과 비슷한 size의 output을 가지는 model, object detection이나 semantic segmentation 등 영상의 일부를 자세히 봐야하는 기술에는 U-Net에 기원이 있는 경우가 많다.

   • fully convolutional network

   • 낮은 층의 feature와 높은 층의 feature의 특징을 더 잘 결합하는 방법 제시 (skip connection)

   • 더 정교한 segmentation 결과 도출

  2) Overall architecture

   • U자 모양

   • contracting path

    - 일반적인 CNN과 동일하게 해상도 낮추고 채널 늘리는 방식

    - input -> convolutional layer -> pooling(receptive field 확보) -> activation map

    - 작은 activation map에는 영상의 전반적인 정보가 잘 녹아있다고 가정

    - 해상도 반씩 감소

    - 채널 수 2배씩 증가

   • expanding path

    - upsampling 경로

    - 한 번에 upsampling하지 않고, 점진적으로 activation map의 해상도 높이고 채널을 줄인다.

    - activation map의 채널 수, 해상도는 contracting path에서 대칭으로 대응되는 layer와 동일하게 맞춘다.

    - ResNet처럼 더하는 방식이 아니라 concatenation으로 activation map을 합치는 방법 사용 (skip connection)

    - 해상도 2배씩 증가

    - 채널 수 반씩 감소

   • localized information

    - 낮은 layer에서 전달된 특징이 localized된 정보를 준다.

    - 공간적으로 높은 해상도 -> 민감한 정보 제공

    - 경계선이나 공간적으로 중요한 정보들을 뒤쪽 layer에 전달

  3) feature map size

   • skip connection 통해 전달되는 activation map이 expanding path의 activation map과 concatenation되기 위해서는 해상도가 맞아야 한다.

   • feature map의 spatial size가 홀수인 경우

    - feature map downsampling : 일반적으로 버림

    - e.g. 7x7 -> 3x3

    - feature map upsampling : 2배로 늘림

    - e.g. 3x3 -> 6x6

    - input size 7x7과 output size 6x6이 맞지 않는 현상 발생

   • 중간의 모든 layer에서 홀수 activation map size가 나오지 않도록 주의

  4) PyTorch code for U-Net

   • contracting path

    - double_conv : double convolutional block

    - convolutional layer x 2, ReLU activation function x 2, max pooling x 1

   • expanding path

    - upsampling위해 transposed convolution 사용

    - hyperparameter : stride=2, kernel_size=2 -> 중첩(checkerboard artifact) 발생 방지

 

 2.4. DeepLab

  1) Overview

   • semantic segmentation에서 중요한 한 획

   • key idea

    - CRFs (Conditional Random Fields)

    - Atrous convolution operation

  2) CRFs

   • post processing에 사용

   • graph modeling 등 최적화된 배경지식 필요

   • pixel 사이의 관계를 모두 이어서 pixel map을 graph로 표현하여 경계 잘 찾도록 modeling

   • score map과 input image의 경계선 사용해서 score map이 경계선에 잘 맞도록 확산

   • foreground의 mask와 background의 mask를 경계선 근처에서 tight하게 만드는 효과

  3) Atrous convolution

   • dilated convolution과 depthwise separable convolution을 결합하여 사용

   • dilated convolution

    - convolution kernel 사이에 dilation factor만큼 일정 공간 넣어주는 방법

    - 실제 convolutional kernel보다 넓은 영역 고려

    - parameter 수는 동일하지만 receptive field size가 증가하는 효과

   • depthwise separable convolution

    - 큰 input의 해상도로 인한 오래 걸리는 연산을 줄이기 위한 방법

    - ① depthwise convolution : 채널 별로 convolution

    - ② pointwise convolution : 1x1 convolution통해 하나의 값 출력

    - convolution의 표현력은 유지하면서 계산량 획기적으로 감소

  4) Overall architecture

   • Atrous convolution으로 feature map 출력

   • Atrous spatial pyramid pooling

    - 영역 별로 연관된 주변 물체나 배경 정보와의 거리가 다르다.

    - 영상 내에서 다양한 scale의 object 고려하는 방법

    - 다양한 rate의 dilated convolution 통해 multi scale의 object 처리

    - 출력된 feature map을 하나로 concatenation 후 1x1 convolution 통해 하나의 feature map으로 만든다.

   • decoder

    - 낮은 layer의 low-level feature map과 pyramid pooling 거친 feature을 upsampling한 feature map을 concatenation

    - 마지막으로 upsampling하여 segmentation map 출력

 

피어세션

1. 강의 내용 발표

2. Further idea

 • CRF

 • dilated convolution

  - d = 1 : 빈 칸 없이

  - d = 2 : 빈 칸 한 칸

3. 과제 질문

 • blur

  - blur 적용하면 뭉게지면서 넓은 선을 표현하니 0이 아닌 값들이 많아지게 된다.

  - 0으로 parameter를 initialization하게 되면 문제가 될 수 있기 때문에 blur가 효과가 있다.

  - 옆 pixel과의 차이가 중요하지 값 자체가 중요하지는 않다.

  - blur 적용하면 선이 굵어져 표준화된다고 생각.

 


매일 늦게 자다보니 피로가 누적이 많이 되는 것 같다.

그래도 공부하는게 재미있어서 버틸만 하다.

내일 하루만 더 열심히 하면 주말이니까 화이팅!