coco_eval 使用

参考

coco eval 解析
COCO目标检测比赛中的模型评价指标介绍!

coco 的评估函数对应的是 pycocotools 中的 cocoeval.py 文件。
从整体上来看,整个 COCOeval 类的框架如图:
在这里插入图片描述

基础的用法为

# The usage for CocoEval is as follows:
cocoGt=..., cocoDt=...       # load dataset and results
E = CocoEval(cocoGt,cocoDt); # initialize CocoEval object
E.params.recThrs = ...;      # set parameters as desired
E.evaluate();                # run per image evaluation
E.accumulate();              # accumulate per image results
E.summarize();               # display summary metrics of results

cocoGt, cocoDt 应该是什么格式?如果是COCO 格式,注意需要增加 score 值。(how?)

__init__ 初始化函数

参数解释如下:
在这里插入图片描述
注意几个字母的含义
N: 用于评估的img_id 的个数
K: 用于评估的cat_id 的个数
T: iouThrs 的个数
R: recThrs 的个数
A: 对象面积分段后的数量
M: maxDets 每张图片检测的最大检测框数量

_prepare

根据传入的初始化参数做一些前置化的处理

    def _prepare(self):
        '''
        Prepare ._gts and ._dts for evaluation based on params
        :return: None
        '''
        def _toMask(anns, coco):
            # modify ann['segmentation'] by reference
            for ann in anns:
                rle = coco.annToRLE(ann)
                ann['segmentation'] = rle
        p = self.params
        if p.useCats:
            gts=self.cocoGt.loadAnns(self.cocoGt.getAnnIds(imgIds=p.imgIds, catIds=p.catIds))
            dts=self.cocoDt.loadAnns(self.cocoDt.getAnnIds(imgIds=p.imgIds, catIds=p.catIds))
        else:
            gts=self.cocoGt.loadAnns(self.cocoGt.getAnnIds(imgIds=p.imgIds))
            dts=self.cocoDt.loadAnns(self.cocoDt.getAnnIds(imgIds=p.imgIds))

        # convert ground truth to mask if iouType == 'segm'
        if p.iouType == 'segm':
            _toMask(gts, self.cocoGt)
            _toMask(dts, self.cocoDt)
        # set ignore flag
        for gt in gts:
            gt['ignore'] = gt['ignore'] if 'ignore' in gt else 0
            gt['ignore'] = 'iscrowd' in gt and gt['iscrowd']
            if p.iouType == 'keypoints':
                gt['ignore'] = (gt['num_keypoints'] == 0) or gt['ignore']
        self._gts = defaultdict(list)       # gt for evaluation
        self._dts = defaultdict(list)       # dt for evaluation
        for gt in gts:
            self._gts[gt['image_id'], gt['category_id']].append(gt)
        for dt in dts:
            self._dts[dt['image_id'], dt['category_id']].append(dt)
        self.evalImgs = defaultdict(list)   # per-image per-category evaluation results
        self.eval     = {
   
   }                  # accumulated evaluation results

computeIoU(self, imgId, catId):

根据image_id和cat_id计算这张图片里 cat_id 的所有GT、DT的iou矩阵,主要用于bbox和segmentation;
这里就是涉及到单张图片的单个类别的计算。

computeOks(self, imgId, catId):

根据image_id和cat_id计算这张图片里所有GT、DT的Oks矩阵,也就是Sec 1.2.里OKS的计算源码出处。这里OKS矩阵的维度是

OKS 矩阵是什么?
所以是只有是 keypoints 的检测,才使用这个函数?

 if p.iouType == 'segm' or p.iouType == 'bbox':
      computeIoU = self.computeIoU
  elif p.iouType == 'keypoints':
      computeIoU = self.computeOks

evaluateImg

perform evaluation for single category and image.
对单张图片的单个类别做统计。

maxDets 每张图片的最大检测数
useCats 指定类别评估

cocoGt, cocoDt 都是 COCO API 数据

过程会计算每张图的结果吗?会的,每张图每个类别分别计算,最后汇总的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

RessCris

老铁门多支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值