【机器学习】图像语义分割常用指标Dice系数 敏感性 特异性 IOU及python代码实现
生活随笔
收集整理的這篇文章主要介紹了
【机器学习】图像语义分割常用指标Dice系数 敏感性 特异性 IOU及python代码实现
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
文章目錄
- 知識鋪墊
- 1. Dice系數(shù)和IOU
- 2.敏感性(=Recall)、特異性和精確度(=precision=PPV)
- 2.1 敏感性(召回率)和特異性
- 2.2 敏感性和特異性之間的關(guān)系
- 2.3 Recall和Precision之間的關(guān)系
- 3. F1
知識鋪墊
首先,對于像素點(diǎn),我們要知道,當(dāng)預(yù)測的像素點(diǎn)類別和其真實(shí)類別不同或者相同時,我們可以用混淆矩陣來表示,如下圖:
1. Dice系數(shù)和IOU
解釋鏈接
由于網(wǎng)上給的Dice系數(shù)的求解代碼基本上都是batch_size=1的,當(dāng)batch_size>1的時候,就沒法用了,因此在這里對網(wǎng)上流行的代碼和自己改的代碼分別進(jìn)行總結(jié)。
Dice系數(shù)的計算公式如下:
Dice=2×TP(TP+FN)+(TP+FP)Dice=\frac{2\times TP}{(TP+FN)+(TP+FP)}Dice=(TP+FN)+(TP+FP)2×TP?
IOU的計算公式如下:
Dice=TPTP+FN+FPDice=\frac{TP}{TP+FN+FP}Dice=TP+FN+FPTP?
2.敏感性(=Recall)、特異性和精確度(=precision=PPV)
2.1 敏感性(召回率)和特異性
Recall公式
def get_sensitivity(output, gt): # 求敏感度 se=TP/(TP+FN)SE = 0.output = output > 0.5gt = gt > 0.5TP = ((output==1).byte() + (gt==1).byte()) == 2FN = ((output==0).byte() + (gt==1).byte()) == 2#wfy:batch_num>1時,改進(jìn)if len(output)>1:for i in range(len(output)):SE += float(torch.sum(TP[i])) / (float(torch.sum(TP[i]+FN[i])) + 1e-6)else:SE = float(torch.sum(TP)) / (float(torch.sum(TP+FN)) + 1e-6) #原本只用這一句#SE = float(torch.sum(TP)) / (float(torch.sum(TP + FN)) + 1e-6) # 原本只用這一句return SE #返回batch中所有樣本的SE和特異性:
def get_specificity(SR, GT, threshold=0.5):#求特異性 sp=TN/(FP+TN)SR = SR > threshold #得到true和falseGT = GT > thresholdSP=0.# wfy# TN : True Negative# FP : False PositiveTN = ((SR == 0).byte() + (GT == 0).byte()) == 2FP = ((SR == 1).byte() + (GT == 0).byte()) == 2#wfy:batch_num>1時,改進(jìn)if len(SR)>1:for i in range(len(SR)):SP += float(torch.sum(TN[i])) / (float(torch.sum(TN[i] + FP[i])) + 1e-6)else:SP = float(torch.sum(TN)) / (float(torch.sum(TN + FP)) + 1e-6) # 原本只用這一句## SP = float(torch.sum(TN)) / (float(torch.sum(TN + FP)) + 1e-6)return SP這兩個指標(biāo)在醫(yī)療領(lǐng)域很常用,而在機(jī)器學(xué)習(xí)領(lǐng)域常用的是Recall和Precision。
2.2 敏感性和特異性之間的關(guān)系
暫略
2.3 Recall和Precision之間的關(guān)系
ppv=precision
def ppv(output, target): #陽性預(yù)測值,準(zhǔn)確率(precision)pr = TP/(TP+FP)smooth = 1e-5if torch.is_tensor(output):output = torch.sigmoid(output).data.cpu().numpy()if torch.is_tensor(target):target = target.data.cpu().numpy()ppv=0.if len(output)>1:for i in range(len(output)):intersection = (output[i] * target[i]).sum()ppv += (intersection + smooth)/(output[i].sum() + smooth)else:intersection = (output * target).sum() # 一個數(shù)字,=TPppv = (intersection + smooth)/(output.sum() + smooth)# intersection = (output * target).sum() # TPreturn ppv3. F1
def get_F1(output, gt):se = get_sensitivity(output, gt)pc = get_precision(output, gt)f1 = 2*se*pc / (se+pc+1e-6)return f1總結(jié)
以上是生活随笔為你收集整理的【机器学习】图像语义分割常用指标Dice系数 敏感性 特异性 IOU及python代码实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深入EJB
- 下一篇: matlab模拟排队论,排队论的matl