【目标检测】|APs APm APl AR1 AR10代码 计算

test_coco.py
cal_area


import os
import pickle
import cv2
import matplotlib.pyplot as plt
import numpy as np
from pathlib import Path
import sys
FILE = Path(__file__).resolve()
ROOT = FILE.parents[0].parents[0]  # YOLOv5 root directory
if str(ROOT) not in sys.path:
    sys.path.append(str(ROOT))  # add ROOT to PATH
ROOT = Path(os.path.relpath(ROOT, Path.cwd()))  # relative

import src.evaluators.coco_evaluator as coco_evaluator
import src.evaluators.pascal_voc_evaluator as pascal_voc_evaluator
import src.utils.converter as converter
import src.utils.general_utils as general_utils
from src.bounding_box import BoundingBox
from src.utils.enumerators import BBFormat, BBType, MethodAveragePrecision

#############################################################
# DEFINE GROUNDTRUTHS AND DETECTIONS
#############################################################
current_dir = os.path.dirname(os.path.realpath(__file__))

dir_imgs = 'C:\\D\\code\\yolov5\\val\\images'
dir_gts = 'C:\\D\\code\\yolov5\\val\\labels'
dir_dets = 'C:\\D\\code\\yolov5\\runs\\val\\exp_CIOU300\\labels'
filepath_yolo_names = 'C:\\D\\code\\ship.names'


gt_bbs = converter.yolo2bb(dir_gts,  dir_imgs, filepath_yolo_names, bb_type=BBType.GROUND_TRUTH)
det_bbs = converter.yolo2bb(dir_dets,  dir_imgs, filepath_yolo_names, bb_type=BBType.DETECTED)


small=200**2
medium=550**2
large=np.inf#np.inf
gt_bbs = converter.yolo2bb(dir_gts,  dir_imgs, filepath_yolo_names, bb_type=BBType.GROUND_TRUTH)
N=len(gt_bbs)
N_s=0
N_m=0
N_l=0
for i in range(N):
    area_i=gt_bbs[i].get_area() 
    if area_i <small:
        N_s=N_s+1
    elif (area_i>=small) & (area_i<medium):
        N_m=N_m+1
    elif (area_i>=medium) & (area_i<large):
        N_l=N_l+1        
print(">= medium <%s large_size's num is =%s, percent is %s"%(large,N_l,N_l/N))
print(">=small <%s medium_size's num is =%s, percent is %s"%(medium,N_m,N_m/N))
print("<%s small_size's num is =%s, percent is %s"%(small,N_s,N_s/N))
print("total num",N)
#############################################################
# EVALUATE WITH COCO METRICS
#############################################################
coco_res1 = coco_evaluator.get_coco_summary(gt_bbs, det_bbs)
#coco_res2 = coco_evaluator.get_coco_metrics(gt_bbs, det_bbs)
print(coco_res1)

设置small medium large的像素范围


    small = {
        #i: _evaluate(iou_threshold=i, max_dets=100, area_range=(0, 32**2))##
        i: _evaluate(iou_threshold=i, max_dets=100, area_range=(50**2, 100**2))##
        for i in iou_thresholds
    }
    APsmall = [x['AP'] for k in small for x in small[k] if x['AP'] is not None]
    APsmall = np.nan if APsmall == [] else np.mean(APsmall)
    ARsmall = [
        x['TP'] / x['total positives'] for k in small for x in small[k] if x['TP'] is not None
    ]
    ARsmall = np.nan if ARsmall == [] else np.mean(ARsmall)

    medium = {
        #i: _evaluate(iou_threshold=i, max_dets=100, area_range=(32**2, 96**2))
        i: _evaluate(iou_threshold=i, max_dets=100, area_range=(100**2, 200**2))
        for i in iou_thresholds
    }
    APmedium = [x['AP'] for k in medium for x in medium[k] if x['AP'] is not None]
    APmedium = np.nan if APmedium == [] else np.mean(APmedium)
    ARmedium = [
        x['TP'] / x['total positives'] for k in medium for x in medium[k] if x['TP'] is not None
    ]
    ARmedium = np.nan if ARmedium == [] else np.mean(ARmedium)

    large = {
        #i: _evaluate(iou_threshold=i, max_dets=100, area_range=(96**2, np.inf))
        i: _evaluate(iou_threshold=i, max_dets=100, area_range=(550**2, np.inf))
        for i in iou_thresholds
    }

ref

https://github.com/rafaelpadilla/review_object_detection_metrics

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值