大家好,又见面了,我是你们的朋友全栈君。
IoU(Intersection over Union)
矩形框的IoU计算:
矩阵T的左下角坐标,右上角坐标;
矩阵G的左下角坐标,右上角坐标;
在确定坐标的情况下,与是可知的常量,所以,我们只需要求解即可。
这里我们先来看一下水平方向上的情况:
从上述的三种情况中我们可以看出:
当有重叠或者是内含的情况时,我们可以通过 计算得到重叠部分的长度.
当满足第一种情况时,发现.
竖直方向上的处理方式类似,得到.
代码:
A:
左下角坐标(left_x,left_y)
右上角坐标(right_x,right_y)
B:
左下角坐标(left_x,left_y)
右上角坐标(right_x,right_y)
def IOU(rectangle A, rectangleB):
W = min(A.right_x, B.right_x) - max(A.left_x, B.left_x)
H = min(A.right_y, B.right_y) - max(A.left_y, B.left_y)
if W <= 0 or H <= 0:
return 0;
SA = (A.right_x - A.left_x) * (A.right_y - A.left_y)
SB = (B.right_x - B.left_x) * (B.right_y - B.left_y)
cross = W * H
return cross/(SA + SB - cross)
语义分割的IoU计算:
IoU一般都是基于类进行计算的,也有基于图片计算的。一定要看清数据集的评价标准。
基于类进行计算的IoU就是将每一类的IoU计算之后累加,再进行平均,得到的就是基于全局的评价,所以我们求的IoU其实是取了均值的IoU,也就是均交并比(mean IoU)
计算公式一样:
先贴代码:
def compute_ious(pred, label, classes):
'''computes iou for one ground truth mask and predicted mask'''
ious = [] # 记录每一类的iou
for c in classes:
label_c = (label == c) # label_c为true/false矩阵
pred_c = (pred == c)
intersection = np.logical_and(pred_c, label_c).sum()
union = np.logical_or(pred_c, label_c).sum()
if union == 0:
ious.append(float('nan'))
else
ious.append(intersection / union)
return np.nanmean(ious) #返回当前图片里所有类的mean iou
def compute_iou_batch(preds, labels, classes=None):
'''computes mean iou for a batch of ground truth masks and predicted masks'''
ious = []
preds = np.copy(preds) # copy is imp
labels = np.array(labels) # tensor to np
for pred, label in zip(preds, labels): # iter one batch
ious.append(compute_ious(pred, label, classes))
iou = np.nanmean(ious) # mean iou of one batch
return iou
基于类计算的IoU时,输入pred和label的size可以有多种形式:
假设原图大小为,期望识别的目标有四种,label的形式是一张图片对应一份mask[0,1,2,3,4],0代表背景类。则根据label生成的mask为,这层mask的取值为0/1/2/3/4,则pred和label的大小都是,,这里忽略背景类的计算。此时,分别对class=1,2,3,4计算iou,并返回它们的均值。代码如上。
假设原图大小为,期望识别的目标有四种,label的形式是一张图片对应四份二进制mask[0,1],则根据label生成的mask为,这四层mask的取值为0/1,则pred和label的大小都是,。此时,一起计算四类的iou,并返回。即上述代码中compute_ious里的ious只有一个值。(不要问我为什么要这样处理标签,做的一个比赛给的标签就是这样的orz…)
至于基于图片怎么计算IoU,暂时还没用到.
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/128817.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...