본문 바로가기
  • Hello_
Python

[Python] Dice score 코드 만들기 (segmentation 평가)

by LDwDL 2023. 1. 9.
728x90
반응형

본 포스팅은 Dice score에 대한 기본적인 내용을 정리 후 python에서 segmentation 성능 평가 사용되도록 contour dice score 및 bbox dice score 계산하는 코드를 구성하고자 한다.

 

Dice score coefficient (DSC)

Dice score는 segmentation 성능 평가를 할 때 주로 사용이 되며, 두 가지 배열 혹은 영역의 유사도를 정량적으로 파악할 수 있도록 해준다. 

아래 그림과 같이 파란색 영역(X)빨간색 영역(Y)의 Dice score를 계산하고자 할 때, 수식은 아래와 같다. 

분자에 두 영역의 교집합의 두배가 입력되며, 분모에는 각각의 영역의 합으로 구성된다.

 

Ref : https://www.kaggle.com/code/yerramvarun/understanding-dice-coefficient

 

 

Python 적용 (Binary, same coordinate)

아래 코드는 X와 Y의 Dice score를 리턴하는 함수이다.

X와 Y가 같은 크기 및 좌표일 때, 각 영역의 배열을 .view(-1)을 사용하여 flatten해준다. 이후 이 두 배열을 곱해주어 겹치는 부분이 아니면 0이 되도록 해서 교집합을 구해준다.

 

def Dice_score(X, Y):
    smooth = 1e-6

    X_flat = X.contiguous().view(-1)
    Y_flat = Y.contiguous().view(-1)
    intersection = (X_flat * Y_flat).sum()

    return ((2. * intersection + smooth) / ((X_flat+Y_flat).sum() + smooth))

 

리턴에는 위 설명된 수식을 그대로 적용하여 구성된다.

 

 

 

 

728x90
반응형

댓글