AP单类平均准确率

复制代码
        P_true   N_true
P_pred    TP      Fp
N_pred    FN      TN
           P       N
  1. TP(真正样本,与真实框IoU大于阈值的框) FP(假正样本,与真实框IoU小于阈值的框) TN(真负样本,背景) FN(假负样本,没有检测出的正样本)
  2. IoU:(A and B)/(A or B) A与B的交集除以A与B的并集
  3. precision:准确率,查全率。TP/(TP+FP)= TP/num_pred,数值越大,说明FP数量越少,准确率越高,但是没有考虑FN(可能有漏检)。
  4. recall:召回率,查准率。TP/(TP+FN)= TP/num_sample,数值越大,说明被检测到的正样本越多,效果越好,但是没有考虑FP(如果把背景也判断成前景,则效果不好)。
  5. F score:几何平均分,(BB+1)PR/(BBP+R),B用来调节PR的权重,当B=1,F1 score。 是precision和recall的加权,考虑两个评价指标的优劣。precision和recall是此消彼长的关系。
  6. Average Precision:单类平均准确率。是PR曲线的面积。
python 复制代码
样本     置信度       正负样本    累计tp   累计fp   precision   recall
1 		 0.97 		 True 		 1 		 0 		 1.0 		 0.1
2 		 0.87 		 True 		 2 		 0 		 1.0 		 0.2
3 		 0.84 		 True 		 3 		 0 		 1.0 		 0.3
4 		 0.8 		 True 		 4 		 0 		 1.0 		 0.4
5 		 0.69 		 False 		 4 		 1 		 0.8 		 0.4
6 		 0.58 		 True 		 5 		 1 		 0.83 		 0.5
7 		 0.43 		 False 		 5 		 2 		 0.71 		 0.5
8 		 0.19 		 True 		 6 		 2 		 0.75 		 0.6
9 		 0.02 		 False 		 6 		 3 		 0.67 		 0.6
10 		 0.03 		 False 		 6 		 4 		 0.6 		 0.6
python 复制代码
import numpy as np
img_ids = None
class_recs = None
BB = None

nd = len(img_ids)
thred = 0.5
npos = 100
tp = np.zeros(nd)
fp = np.zeros(nd)
for d in range(nd):
  R = class_recs[img_ids[d]]
  bb = BB[d,:].astype(float)      # 按照置信度排好序
  idx = -np.inf
  BBGT = R['bbox'].astype(float)  # 真实框
  if BBGT.size>0:
      # 计算IoU
      x1y1 = np.maximum(BBGT[:,:2],bb[:2])
      x2y2 = np.maximum(BBGT[:, 2:], bb[2:])
      wh = np.maximum(x2y2-x1y1+1,0)
      inters = wh[0]*wh[1]
      bb_areas = (bb[2]-bb[0]+1.0)*(bb[3]-bb[1]+1.0)
      BBGT_ares = (BBGT[:,2]-BBGT[:,0]+1.0)*(BBGT[:,3]-BBGT[:,1]+1.0)
      ious = inters/(bb_areas+BBGT_ares-inters)
      iou = np.max(ious)
      idx = np.argmax(ious)

  if idx>thred:
      if not R['difficult'][idx]:
          if not R['det'][idx]:
              tp[d]=1.
              R['det'][idx]=1
          else:
              fp[d] = 1.
  else:
      fp[d] = 1.

fp = np.cumum(fp)
tp = np.cumum(tp)
rec = tp/float(npos)
prec = tp/np.maximum(tp+fp,np.finfo(np.float64).eps)

def voc_ap(rec,prec):
  mrec = np.concatenate(([0.],rec,[1.]))
  mpre = np.concatenate(([0.],prec,[0.]))

  for i in range(mpre.size-1,0,-1):
      mpre[i-1]=np.maximum(mpre[i-1],mpre[i])

  i = np.where(mpre[1:] != mpre[:-1])[0]
  ap = np.sum((mrec[i+1]-mrec[i])*mrec[i+1])
  return ap
相关推荐
羊羊小栈5 天前
基于「YOLO目标检测 + 多模态AI分析」的水稻病害智能检测分析预警系统(LangChain框架)
人工智能·yolo·目标检测·毕业设计·创业创新·大作业
YOLO_DATA6 天前
遥感滑坡检测的数据集 2299 张 1类 yolo格式 遥感滑坡检测数据集
人工智能·深度学习·yolo·计算机视觉·无人机·yolo数据集·ai数据集
计算机编程-吉哥6 天前
YOLO26 vs YOLO11 vs YOLOv8:深度学习咖啡果实成熟度分割系统【计算机毕业设计选题推荐】
人工智能·python·深度学习·yolo·django·毕业设计
西西弗Sisyphus6 天前
YOLO26 图像分割 - 训练的数据加载:取图、在线增强与标签缓存
yolo·yolo26
YOLO_DATA7 天前
无人机高速公路道路缺陷数据集 道路损伤数据集 公路裂缝识别 AI大疆数据集 10798期
人工智能·深度学习·yolo·机器学习·cnn
YOLO数据集集合7 天前
小目标无人机、飞机、直升机检测数据集 | 小目标检测 无人机检测 空中目标识别 低空安防 反无人机9090期
深度学习·yolo·目标检测·无人机·飞机·小目标·直升机
YOLO数据集集合7 天前
全球无人机航拍树冠覆盖数据集 | 树冠分割 语义分割 无人机航拍 全球森林监测 GeoTIFF 生态恢复9083期
深度学习·yolo·目标检测·无人机·无人机视角·全球森林
Python图像识别8 天前
10-【2027毕设】YOLO11PCB缺陷检测识别系统 - Python完整源码+PyQt5界面+训练模型+数据集
python·深度学习·yolo·毕业设计·毕设
YOLO数据集集合8 天前
无人机树木识别检测数据集 | 树木检测 树种分类 无人机航拍 林业调查9082期
深度学习·yolo·目标检测·无人机·无人机视角·树冠识别·树冠
qq7422349848 天前
YOLO 之外的另一半:RF-DETR 检测实战
yolo