본문 바로가기
의료 AI/[06] - 프로젝트

Semantic Segmentation 대회에서 사용하는 방법들

by AI-BT 2024. 11. 23.
728x90
반응형

K-Fold 구분

 

1. K-Fold 교차 검증

K-Fold 교차 검증은 데이터를*K개의 동일한 크기의 부분집합(Fold*으로 나누어 모델을 평가하는 방법이다. 이 방법은 데이터의 불균형을 방지하고, 모델의 일반화 성능을 향상시키기 위해 사용된다.

 

과정

  • 데이터를 K개의 Fold로 나눈다.
  • 각 Fold를 한 번씩 검증 데이터로 사용하며, 나머지 Fold는 훈련 데이터로 사용한다.
  • 이 과정을 K번 반복하여, K개의 모델을 학습하고 각각의 성능을 측정한다.
  • 최종적으로 K개의 결과를 평균 내어 모델의 일반화 성능을 평가한다.

장점

  • 모든 데이터가 훈련 및 검증에 사용되므로 데이터 낭비가 없다.
  • 데이터가 고르게 검증되기 때문에 일반화 성능 평가에 효과적이다.

단점

  • 반복적으로 모델을 학습해야 하므로 계산 비용이 높다.

 


2. Stratified K-Fold 교차 검증

Stratified K-Fold는 K-Fold 교차 검증의 변형된 방법으로, 데이터가 불균형한 경우에 더 적합하다. 클래스별로 데이터를 나누어 각 Fold에 클래스 비율이 일정하도록 데이터를 분할한다.

 

과정

  • 데이터를 클래스 비율에 따라 K개의 Fold로 나눈다.
  • 각 Fold를 한 번씩 검증 데이터로 사용하며, 나머지 Fold는 훈련 데이터로 사용한다.
  • K번의 반복 학습을 통해 모델 성능을 측정하고, 결과를 평균화한다.

장점

  • 클래스 비율을 유지하므로, 클래스 불균형 데이터에 적합하다.
  • 일반 K-Fold보다 성능 평가의 신뢰도가 높다.

사용 예시

  • 분류 문제에서 클래스 간 데이터 비율이 차이 나는 경우, Stratified K-Fold를 활용한다.

 


3. Group K-Fold 교차 검증

Group K-Fold는 데이터가 특정 그룹에 속해 있는 경우에 사용되는 방법이다. 데이터의 그룹이 훈련 데이터와 검증 데이터에 동시에 포함되지 않도록 한다.

 

과정

  • 데이터를 그룹별로 나누어, 동일한 그룹의 데이터가 Train과 Validation에 동시에 포함되지 않도록 Fold를 나눈다.
  • 각 Split마다 하나의 Fold를 검증 데이터로 사용하고, 나머지 Fold는 훈련 데이터로 사용한다.
  • 그룹 기반으로 분할을 반복하여 모델 성능을 평가한다.

장점

  • 데이터가 특정 그룹에 의존적인 경우, 데이터 누락이나 정보 누출을 방지한다.
  • 그룹 기반으로 데이터 분할을 보장하므로 더 신뢰도 높은 평가를 제공한다.

사용 예시

  • 의료 데이터처럼 동일한 환자에게서 나온 데이터를 다룰 때.
  • 동일한 장비로 측정된 데이터를 사용하는 경우.

 


Augmentation

 

1. Cutout

이미지의 일부 영역을 랜덤하게 제거하는 방식이다. 이는 이미지 데이터를 학습할 때 모델이 특정 픽셀이나 패턴에 의존하지 않도록 유도하여 일반화 성능을 향상시키는 데 도움을 준다. CoarseDropout은 특히 Object DetectionImage Classification에서 효과적으로 사용된다.

 

 

Albumentations 라이브러리에서 제공하며, A.CoarseDropout 클래스를 사용하며, 이미지에서 지정된 크기 및 개수의 직사각형 영역을 무작위로 제거한다. 제거된 영역은 검은색(픽셀 값 0)으로 채워지며, 모델이 이 손실된 정보에 의존하지 않고 전반적인 이미지의 맥락을 학습하도록 돕는다.

transform = A.Compose([
    A.Resize(224, 224),  # 이미지 크기 조정
    A.CoarseDropout(     # CoarseDropout 적용
        max_holes=8,     # 제거할 최대 영역 개수
        min_holes=4,     # 제거할 최소 영역 개수
        max_height=20,   # 제거 영역의 최대 높이
        min_height=8,    # 제거 영역의 최소 높이
        max_width=20,    # 제거 영역의 최대 너비
        min_width=8,     # 제거 영역의 최소 너비
        p=1.0            # 적용 확률 (1.0 = 항상 적용)
    ),
])

 


2. Gridmask

GridMask는 Cutout의 단점을 보완하여 제안된 데이터 증강(Data Augmentation) 기법이다. Cutout은 이미지의 특정 영역을 무작위로 삭제해 모델의 일반화 성능을 향상시키지만, 중요한 객체의 주요 부분이나 Context 정보를 손실시킬 가능성이 있다. 이러한 단점을 극복하기 위해 GridMask는 규칙적인 박스 패턴을 사용하여 이미지의 일부분을 삭제하는 방법을 제안한다.

 

격자 형태로 규칙적으로 패턴을 삭제하먀, 삭제된 영역이 균등하게 분포되어 중요한 정보 손실을 방지한다.

또한, 이미지 전체에 걸쳐 균형 잡힌 증강 효과를 제공한다.

transform = A.Compose([
    A.Resize(224, 224),       # 이미지 크기 조정
    A.GridDropout(            # GridMask와 동일한 역할
        unit_size_min=10,     # 그리드 한 칸의 최소 크기
        unit_size_max=20,     # 그리드 한 칸의 최대 크기
        holes_number_x=5,     # 가로 방향 제거할 영역 개수
        holes_number_y=5,     # 세로 방향 제거할 영역 개수
        ratio=0.5,            # 제거될 영역 비율
        p=1.0                 # 적용 확률 (항상 적용)
    ),
    ToTensorV2(),             # PyTorch 텐서로 변환
])

 


 

3. CropNonEmptyMaskIfExists

객체가 포함된 영역을 중심으로 크롭하여 모델 학습을 효율적으로 만드는 방법이다. 이는 주로 SegmentationObject Detection 작업에서 활용되며, 객체가 없는 빈 영역을 제거하여 학습 데이터를 효과적으로 사용할 수 있다.

 

 

 

 

이미지와 마스크가 주어졌을 때, 객체가 존재하는 영역을 중심으로 크롭을 수행하며, 크롭된 이미지에는 반드시 객체가 포함되도록 보장한다. 객체가 포함되지 않은 빈 영역을 제거하여, 학습에 필요한 유의미한 정보만 남긴다.

 

 

왜 필요한가?

  • 원본 이미지에서 객체가 차지하는 영역이 작을 경우, 학습 효율이 낮아질 수 있다.
  • CropNonEmptyMaskIfExists를 사용하면 객체가 항상 크롭된 이미지 내에 위치하므로, 모델이 객체를 더 잘 학습할 수 있다.
  • 데이터 효율성을 높이고, 학습 속도와 성능을 개선할 수 있다.
transform = A.Compose([
    A.CropNonEmptyMaskIfExists(height=256, width=256),  # 객체가 포함된 영역을 중심으로 크롭
])

 

CropNonEmptyMaskIfExists는 객체 중심으로 학습 데이터를 크롭하여 모델 학습을 효율적으로 만드는 강력한 도구이다. 특히, 객체가 이미지 내 일부에만 존재하는 Segmentation 및 Detection 작업에서 필수적인 증강 기법으로, 학습 데이터의 질을 향상시킬 수 있다. Albumentations를 통해 손쉽게 구현할 수 있으므로, 데이터 증강 파이프라인에 추가해 보자!

 

 

이상입니다. 끝!

감사합니다.

728x90
반응형

댓글