- Segmentation 에 적용할 수 있는 Loss function은 아래와 같다.
- BCE Loss
- 이진분류에 사용되는 Loss
- Focal Loss
- 불균형한 클래스 분포를 가진 데이터셋에서 Classification 할 때 주로 사용
- 희소한 class에 대해 더 집중되는 효과가 있음.
ALPHA = 0.8 GAMMA = 2 def FocalLoss(targets, inputs, alpha=ALPHA, gamma=GAMMA): inputs = K.flatten(inputs) targets = K.flatten(targets) BCE = K.binary_crossentropy(targets, inputs) BCE_EXP = K.exp(-BCE) focal_loss = K.mean(alpha * K.pow((1-BCE_EXP), gamma) * BCE) return focal_loss
- DICE Loss
- IoU(Intersection over Union)을 기반으로 하는 Loss function. 예측된 결과와 실제 레이블간의 겹치는 부분을 계산해서 산출함.
- 라벨링된 영역과 예측된 영역이 정확히 같으면 1, 그렇지 않으면 0을 반환함.
# Keras def DiceLoss(targets, inputs, smooth=1e-6): # flatten label and prediction tensors inputs = K.flatten(inputs) targets = K.flatten(targets) intersection = K.sum(K.dot(targets, inputs)) dice = (2*intersection + smooth) / (K.sum(targets) + K.sum(inputs) + smooth) return 1 - dice
- BCE with DICE Loss
- BCE Loss와 DICE Loss를 결합한 함수로, 주로 불균형한 클래스 분포에 대한 robust한 학습이 이루어짐.
def DiceBCELoss(targets, inputs, smooth=1e-6): # flatten label and prediction tensors inputs = K.flatten(inputs) targets = K.flatten(targets) BCE = binary_crossentropy(targets, inputs) intersection = K.sum(K.dot(targets, inputs)) dice_loss = 1 - (2*intersection + smooth) / (K.sum(targets) + K.sum(inputs) + smooth) Dice_BCE = BCE + dice_loss return Dice_BCE
- Ground Truth와 Prediction 간의 IoU 예시Jaccard(IoU) Loss
- IoU를 측정하는 방법으로, IoU는 예측된 영역과 실제 영역의 교차영역을 전체 영역으로 나눈 비율임.
- Tversky Loss
- DICE Loss의 일반화된 버전으로, 정확도와 재현율간의 균형을 맞추는 역할을 함.
- 파라미터인 alpha값과 beta 값을 통해 가중치 규제가 이루어지고, False Positive와 False Negative에 더 큰 가중치를 줌. Alpha와 Beta값은 구현하고자 하는 바에 따라 최적의 값을 찾아야함.
ALPHA = 0.5 BETA = 0.5 def TverskyLoss(targets, inputs, alpha=ALPHA, beta=BETA, smooth=1e-6): # flatten label and prediction tensors inputs = K.flatten(inputs) targets = K.flatten(targets) # True Positives, False Positives & False Negatives TP = K.sum((inputs * targets)) FP = K.sum(((1-targets) * inputs)) FN = K.sum((targets * (1-inputs))) Tversky = (TP + smooth) / (TP + alpha*FP + beta*FN + smooth) return 1 - Tversky
- BCE Loss
'Deep Learning' 카테고리의 다른 글
pytorch gpu(cuda) 정보 확인 (0) | 2024.01.17 |
---|---|
anaconda 다중 사용자(multi-user) 환경 세팅 (0) | 2024.01.15 |
Atrous Convolution 개념, 설명, 정리 (0) | 2023.12.15 |
UNET 구조, 설명 (1) | 2023.12.12 |
편향(Bias)와 분산(Variance) 개념 정리 (0) | 2023.12.11 |