Study/머신러닝

Segmentation

김 도경 2025. 1. 9. 11:27
Segmentation 이해를 위한 기본 개념들
  • Semantic Segmentation
    - 이미지에서 각각의 픽셀마다 클래스 레이블을 예측
    - 즉, 클래스 레이블만으로 이루어진 출력 이미지를 얻음

  • Encoder-Decoder Architecture
    - Encoder는 이미지의 semantic을 이해하는 과정
    - Encoder는 주로 convolution 연산으로 압축된 latent space를 가짐
    - Semantic segmentation task를 수행하려면 압축된 latent space를 원래 이미지 수준으로 확장할 필요가 있음
    - Transposed convolution의 등장

  • Transposed Convolution
    - Decoding 과정에서 필요한 딥러닝 연산
    - 해상도의 크기가 점점 작아지는 convolution 연산과 달리 transposed convolution은 해상도의 크기를 키움

    = Deconvolution / Transposed Convolution / Upsampling
    - 세 가지 방법 모두 해상도의 크기를 확대하는 방법
    - Deconvolution: convolution 연산의 역연산을 통해 해상도를 키움
    - Transposed convolution : learnable kernel을 통해서 해상도를 키움
    - Upsampling : interpolation 방법을 통해서 해상도를 키움

  • Dilated Convolution (Atrous Convolution)
    - 커널 사이의 각 원소 간격을 키울 수 있음 : 이를 dilation rate로 정의
    - Dilation rate를 통해 커널이 커버하는 영역을 넓힘
        - 즉, receptive field size를 키울 수 있음
        - 고해상도 이미지의 segmentation에 적합

  • Unpooling
    - Pooling의 경우 이미지의 해상도를 낮추는 연산
    - Unpooling의 경우 디코딩할 때 이미지 해상도를 다시 키울 수 있음
    - Pooling 과정에서 잃어버린 위치 정보를 복원하는 방법으로 unpooling을 할 수도 있음

  • Semantic Segmentation
    - Semantic segmentation은 더 나아가 모든 픽셀들의 클래스를 예측
    - fully connected layer가 아닌 1x1 convolution과 transposed convolution 사용
         - 이를 통해 입력 이미지와 같은 해상도를 출력할 수 있음
         - Fully connected layer는 모든 feature map을 flatten, 픽셀의 위치 정보를 해침
         - 반면, convolutional layer는 feature map의 위치 정보를 그대로 유지, segmentation task에 적합
         - 또한 fully connected layer의 input size가 고정돼 있어, 다양한 해상도를 커버할 수 없음

  • FCN Architecture
    - VGG 백본
    - 위치 정보를 잃지 않기 위해 기존 fully connected layer를 convolutional layer으로 대체
    - Transposed convolution을 사용해서 pixel-wise prediction을 수행

  • Skip Architecture
    - 좀 더 세밀한 segmentation map을 얻기 위해서 skip architecture 기법을 제안
    - 최종 feature map만 이용하는 것이 아닌 중간 feature map도 이용함

  • 한계
    - 객체의 크기가 크거나 작으면 잘 예측하지 못함
U-Net

 

  • U-Net
    - Biomedical 도메인
    - ISBI cell tracking challenge 2015에 등장한 모델
    - U자형 대칭 구조 : 등장 이후 여러 논문들에서 U-Net 구조를 차용

    - 의료 분야 특성 상 레이블링 데이터 수가 매우 부족 : 전문가의 레이블링 작업이 필요
    - 같은 클래스의 서로 붙어있는 객체끼리의 분리가 어려움 ○ 해당 챌린지에서 문제는 세포끼리 서로 인접한 경우가 많음

  • Contracting Path
    - 입력 이미지의 전반적인 특징을 추출
    - 이미지의 차원을 줄이면서 정보 압축하여 특징을 추출

  • Expanding Path
    - Contracting path를 통해 압축된 feature map으로부터 segmentation mask를 디코딩하는 과정
    - 원본 이미지의 해상도로 다시 확장
    - ResNet의 skip connection을 응용하여 같은 수준의 layer feature map을 더해줌
    - 좀 더 low level의 정보를 함께 디코딩 가능

  • Training Techniques
    - Data Augmentation
            - 레이블링된 데이터 수가 부족하기 때문에 data augmentation 사용
            - Shift, rotation, grayscale, elastic deformation등을 적용
    - Pixel-wise loss
            - 인접한 세포들의 효과적인 분리를 위해 경계 부분에 더 높은 가중치 사용

  • 한계
    - 데이터셋마다 최적의 모델 깊이를 알기 어려움 : 기존 U-Net 구조는 깊이가 4
    - 동일한 수준의 인코더-디코더만 skip connection 됐고, 다양한 깊이의 skip connection 고려되지 않음

  • U-Net ++
    - Re-designed skip pathways를 제안 : 인코더와 디코더 사이의 semantic gap을 줄임
    - Deep supervision을 통해 앙상블 효과를 가져옴
    - 다양한 깊이에서의 skip connection을 적용

    - 이미지 전체를 고려하여 픽셀의 관계를 학습하는 hybrid loss 사용
    - 앙상블 효과를 더하기 위해 다양한 깊이의 출력을 이용
    - 4가지 깊이의 출력에서 loss를 계산하여 최종 loss로 사용

    - 복잡하고 많은 skip connection으로 인해 parameter 수 ↑, memory ↑
    - U-Net보단 성능이 좋지만, full scale에서 경로를 탐색하지 못함

  • U-Net 3+
    - 다양한 scale에서(conventional + inter + intra) skip connection을 제안
    - 인코더에서 같은 scale의 feature map과 skip connection 진행 (기존 U-Net과 동일)
    - 디코더에서 더 큰 scale의 high-level feature map과 skip connection 진행
    - 최종적으로 모든 디코더의 output의 채널이 320으로 같음
    - 모든 scale의 예측에 대해 supervision

    - 이미지의 background 부분은 easy negative로 쉽게 분류될 수 있음
    - Cross entropy는 모든 픽셀에 대해 동일한 비율로 loss가 계산되기 때문에 easy negative의 영향이 커짐
    - Focal loss를 통해 어려운 샘플에 대하여 더 큰 가중치를 둬 클래스 불균형 문제를 해결

    - Image restoration, image quality assessment 등에서 주로 쓰이는 loss function
    - Multi-scale에서 예측 이미지와 정답 이미지 사이의 밝기, 대비, 구조를 비교하여 두 이미지가 유사하도록 학습

    - 예측 이미지와 정답 이미지 사이의 일치 정도를 나타내는 loss function
    - IoU(Intersection over Union)은 교집합 영역 / 합집합 영역로 정의됨

    - Classification-guided Module (CGM)
         - 의료 이미지 분할에서 장기가 아닌 부분은 주로 배경이고, 배경에 대한 fp가 다수 발생함
         - 이는 low-level feature map에 남아있는 noise가 주 원인
         - 이때 객체/배경에 대한 분류 태스크를 segmentation에 대한 가이드로 사용
         - 가장 high-level feature map을 활용
         - Dropout, 1x1 Conv, AdaptiveMaxPool, Sigmoid 연산 후 객체 존재 여부에 대한 예측
         - 각 feature map에 binary mask를 곱함

 

DeepLab

 

  • Semantic Segmentation에서 3가지 Challenge가 존재함
    - Reduced feature resolution → Atrous convolution
    - Existence of objects at multiple scales → Atrous spatial pyramid pooling (ASPP)
    - Reduced localization accuracy due to DCNN invariance → Conditional Random Field (CRF)

  • Architecture
    - Atrous convolution을 통해 score map 추출함
    - Bi-linear interpolation을 통해 원본 이미지 크기로 확장함
    - Fully Connected CRF를 통해 후처리된 최종 결과를 얻음

  • Dilated Convolution (Atrous Convolution)
    - 커널 사이의 각 원소 간격을 키울 수 있음 : 이를 dilation rate로 정의
    - Dilation rate를 통해 커널이 커버하는 영역을 넓힘
         - 즉, receptive field size를 키울 수
         - 고해상도 이미지의 segmentation에 적합

  • Atrous spatial pyramid pooling (ASPP)
    - 다양한 크기의 object를 인식하기 위해 atrous convolution을 여러 rate로 병렬 적용
    - 연산 후 각각의 feature map을 concatenation 후 1x1 convolution 적용하여 최종 output을 출력

  • Conditional Random Field (CRF)
    - Localization accuracy 증가를 위해 fully-connected CRF 사용
    - Feature map을 원본 이미지를 이용하여 후처리 하는 방법
    - 픽셀의 위치, 밝기 등을 이용하여 localization을 정교하게 만듦
SETR
  • SETR
    - 인코더는 ViT를 백본으로 사용
    - 디코더는 3가지 구조를 제안

  • SETR Encoder
    - SETR의 인코더는 vision transformer의 백본 구조를 그대로 사용

  • SETR Decoder
    - Pixel-wise segmentation을 위해 2D tensor를 3D tensor로 reshape이 필요
    - 3가지 구조의 디코딩 방법 제안
              - Naive upsampling (SETR-Naive)
              - Progressive upsampling
              - multi-level feature aggregation

  • Naive Upsampling (SETR-Naive)
    - Naive approach로 vision transformer의 feature map을 단순히 클래스 개수만큼 channel-wise projection
    - 간단한 네트워크를 사용 (1x1 conv → sync batchnorm(w/ ReLU) → 1x1 conv)
    - Bilinear interpolation 통해 한 번의 원본 이미지 크기로 업샘플링
    - pixel-wise cross-entropy loss를 통해 학습

  • Progressive Upsampling (SETR-PUP)
    - 한 번에 upsampling하는 것은 noisy prediction을 유발
    - 따라서, 4번에 걸쳐 2배씩 해상도를 복원함 (naive-upsampling을 반복)

  • Multi-Level Feature Aggregation (SETR-MLA)
    - 24개의 transformer block은 24개의 feature map을 가짐
    - 마지막 feature map만 활용하는 것이 아닌 중간 layer의 feature map도 활용
    - 24개의 feature map중 6, 12, 18, 24번째 feature map 추출
    - 추출한 4개의 feature map에 대해 3D 형태로 reshape, 1x1 conv → sync batchnorm → ReLU 연산 적용
    - FPN(Feature Pyramid Network)와 유사한 방식으로 feature aggregation을 진행
         - 단, transformer 기반이기 때문에 모든 feature map은 같은 resolution을 가짐
    - Element-wise addition 후에 3x3 conv를 통해 aggregation
    - 3x3 conv → sync batchnorm → ReLU 연산 2번 적용
    - 이후 기존 해상도의 4배 크기로 upsampling
    - 4개의 aggregation feature map을 concat
    - 이후, 클래스 개수의 채널만큼 출력되도록 3x3 conv 연산 적용
    - 마지막으로 4배 크기로 upsampling하여 원본 이미지와 해상도 같게 함
SegFormer
  • Overlap Patch Embeddings
    - 패치의 크기가 작을수록 dense prediction task에 유리

  • Hierarchical Transformer Encoder
    - SETR의 경우 중간 feature map의 resolution이 모두 같음
    - 반면, SegFormer에서는 transformer block을 지날 때마다 해상도를 낮춤
    - 기존 transformer를 세 가지 방법으로 개선
        - Efficient Self-Attn / Mix-FFN / Overlap Patch Merging

  • Patch Merging
    - 연산 효율을 위해 patch level의 정보를 압축하는 과정 ((16, 16) → (4, 4))
    - Local continuity가 중요한 semantic segmentation에 부적합

  • Overlap Patch Merging
    - 인접한 픽셀이 유사한 값을 갖는 local continuity의 특성은 segmentation task에서 유용
    - 따라서, local continuity를 보존하기 위해 patch size, stride, padding 값을 조정하여 overlap patch merging 구현 가능

  • Efficient Self-Attention
    - 기존의 self-attention은 의 높은 계산 복잡도를 가짐
    - 따라서, reduction ratio ( )를 적용하여 계산 복잡도를 로 줄임 ( : Block마다 차례대로 8,4,2,1 적용)

  • Mix-FFN
    - 기존 ViT는 위치 정보를 주기 위해 positional encoding(PE) 사용
    - 학습할 때 보지 못했던 image size는 어떻게 대응할까?
    - PE 값에 대해 interpolation으로 대응, 성능 저하할 수 있음
    - SegFormer에서는 PE를 제거
    - 대신 기존 FFN을 MLP와 depth-wise 3x3 conv로 재구성 (Mix-FFN)
    - Conv layer가 locality 특성을 보장하고, pe의 역할을 대체할 수 있음

  • All-MLP Decoder
    - 가벼운 decoder를 위해 MLP layer로만 구성
    - 각 block에서 출력된 4개의 feature map을 입력으로 함
    - 서로 다른 해상도와 채널 수를 가진 여러 개의 feature map을 같은 채널 수로 통일
    - MLP layer를 거친 4개의 output feature map을 channel level로 concat
    - MLP layer를 통해 클래스 개수만큼 channel 변환
    - 이후 원본 이미지 크기만큼 upsampling

'Study > 머신러닝' 카테고리의 다른 글

CV 모델 성능 높이기  (0) 2025.01.09
CV 트렌드  (1) 2025.01.09
Backbone  (1) 2025.01.06
Object Detection  (3) 2025.01.06
CV Metrics  (0) 2025.01.06