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 |