mmdetection 目标检测测试时打印各类别准确率(AP),打印iou为0.5时各类AP

第一个问题:测试时打印各类别准确率(AP)

方法1:在mmdet/datasets/coco.py中找到evaluate函数,大概第300多行,将classwise设为True,默认为False

    def evaluate(self,
                 results,
                 metric='bbox',
                 logger=None,
                 jsonfile_prefix=None,
                 # 是否显示每个类别
                 classwise=True,

若改动后未生效可试试运行下面的命令重新编译代码使修改生效

python setup.py install build

方法2(推荐):运行tools/test.py的时候加上 --options "classwise=True"

第二个问题:打印iou为0.5时各类AP

发现在classwise设为True后虽然打印了各类ap,但是并非是iou为0.5时的ap,于是有了此问题

方法1:在mmdet/datasets/coco.py中找到evaluate函数,设置iou阈值,iou_thrs=[0.5]  

def evaluate(self,
                 results,
                 metric='bbox',
                 logger=None,
                 jsonfile_prefix=None,
                 classwise=True,
                 proposal_nums=(100, 300, 1000),
                 iou_thrs=[0.5],
                 metric_items=None): 

方法2:测试时在指令后面加上 --show-score-thr 0.5 

方法3:修改mmdet/datasets/coco.py中的evaluate_det_segm函数以下部分

if classwise:  # Compute per-category AP
    # Compute per-category AP
    # from https://github.com/facebookresearch/detectron2/
    precisions = cocoEval.eval['precision']
    # precision: (iou, recall, cls, area range, max dets)
    assert len(self.cat_ids) == precisions.shape[2]

    results_per_category = []
    for idx, catId in enumerate(self.cat_ids):
        # area range index 0: all area ranges
        # max dets index -1: typically 100 per image
        nm = self.coco.loadCats(catId)[0]
        #precision = precisions[:, :, idx, 0, -1]
        precision = precisions[0, :, idx, 0, -1]  #在这里进行了修改
        precision = precision[precision > -1]
        if precision.size:
            ap = np.mean(precision)
        else:
            ap = float('nan')
        results_per_category.append(
            (f'{nm["name"]}', f'{float(ap):0.3f}'))

若修改源码后未生效可使用如下代码重新编译

python setup.py install build

 打印出了各类在iou为0.5时的ap

mmdetection 目标检测测试时打印各类别准确率(AP),打印iou为0.5时各类AP_第1张图片

你可能感兴趣的:(目标检测,人工智能,计算机视觉)