您的位置:首页 > 其它

车牌检测回归任务(三、目标检测模型评估)

2018-07-26 11:32 369 查看

目标检测模型评估的常用指标是召回率(Recall),精度(Precision),IoU(交并比),其实在Tensorflow中有对应的API(tf.metrics.Accuracy),但是本人为了更深入的理解这些概念,所以自写。

思路:将预测的四个坐标在单通道图像进行填充绘制,即目标区域为1,非目标区域为0,计算非0像素的个数就是目标区域的面积。当然也可以直接利用不规则四边形的面积来计算(博客:https://blog.csdn.net/attitude_yu/article/details/81204694)。真实与预测相交区域的面积也是通过最简单的计算像素的个数来获得。

[code]import  numpy as np
import cv2

Width = 64
Height = 64
def coord_convert_arr(coord):
img = np.zeros((Height, Width))
fill_coord = np.array(coord, np.int32).reshape((4,2))
new_img = cv2.fillPoly(img, [fill_coord], 1) #2121
# 获得非0区域的像素个数
non_zero = cv2.countNonZero(new_img)+1
#print("non zero num:",non_zero)
# 转化为单行数组
arr = new_img.reshape((1,Height*Width))[0]
return arr, non_zero

# 获得相交区域的像素个数
def inter_pixel_num(label_arr, pred_arr):
count = 0
for idx in range(Width*Height):
if label_arr[idx]==1 and pred_arr[idx]==1:
count +=1
return count
# 将归一化后的坐标调整为原图上的坐标
def adjust_coord(coord):
for idx in range(8):
if idx%2==0:
coord[idx]=coord[idx]*Width
else:
coord[idx]=coord[idx]*Height
return coord

# 将调整后的坐标恢复为归一化的坐标
def recovery_coord(coord):
for idx in range(8):
if idx%2==0:
coord[idx]=coord[idx]/Width
else:
coord[idx]=coord[idx]/Height
return coord

# 根据像素个数计算召回 精度 IoU
def recall_precision_Iou(label, pred):
# label_ = adjust_coord(label)
# pred_ = adjust_coord(pred)
label_ = label
pred_ = pred
label_arr, label_area = coord_convert_arr(label_)
pred_arr, pred_area = coord_convert_arr(pred_)
inter_area = inter_pixel_num(label_arr, pred_arr)
#print("label_area:{}   pred_area:{}   inter_ area:{}".format(label_area, pred_area, inter_area))

recall = inter_area/float(label_area)
precision = inter_area/float(pred_area)
IoU= inter_area/float(label_area+pred_area-inter_area)
return recall, precision, IoU

 

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: