COCO的API简介【python3仅针对Detection】

0、导入coco相关库

import pycocotools.coco as coco
from pycocotools.cocoeval import COCOeval

1、COCO类简介:初始化参数必须为标注文件即gt.coco或者None

2、COCOeval类简介:参数1==COCO类的gt的对象,参数2==COCO类的result的对象

1、加载gt.coco,返回COCO类的gt.coco的对象

gt_obj=coco.COCO(path+"gt.coco")

执行完以上代码,会输出下图所示的提示信息:

2、加载result.json,返回COCO类的result.json的对象。【即gt_obj与res_obj是相同的类(COCO)的对象

res_obj=coco_obj.loadRes(resPath+"result.json")

执行完以上代码,会输出下图所示的提示信息:

3、 整合信息,将gt.coco与result.json联系起来,返回COCOeval类的对象。【即该对象同时拥有gt.coco与result.json的信息并指定用gt.coco的annotations的哪个字段进行计算指标

coco_eval=COCOeval(gt_obj,res_obj,"bbox")

执行完以上代码,不会输出任何信息

4、设置需要计算指标的模型类别,如果不设置则计算所有类别的平均指标。

coco_eval.params.catIds=data_gt["categories"][n]["id"]

执行完以上代码,不会输出任何信息

5、以指定的gt.coco的annotations字段为准例如"bbox",计算每张图片的所设置的模型类别的结果,核心是计算iou。

coco_eval.evaluate()

执行完以上代码,会输出下图所示的提示信息:

6、累计每张图片的评估结果

coco_eval.accumulate()

执行完以上代码,会输出下图所示的提示信息:

7、打印结果

coco_eval.summarize()

执行完以上代码,会输出下图所示的提示信息【绿框是MAP,红框中的是AP50】:

总结1:以下为计算MAP/AP50的完整代码

8、COCOeval类中的实例的属性COCOeval.params.iouThrs代表了IOU可选的范围,即IOU的可选取coco_eval.params.iouThrs中的任意一个数

print(coco_eval.params.iouThrs)######是一个numpy类型的array[0.5  0.55 0.6  0.65 0.7  0.75 0.8  0.85 0.9  0.95]

执行完以上代码,输出下图所示信息:

9、COCOeval类中的实例的属性COCOeval.eval代表了计算的结果,COCOeval.eval是一个字典,需要计算哪个指标从该字典中获取即可。

print(coco_eval.eval.keys())####coco_eval.eval是一个字典,包含了所有计算的指标信息

执行完以上代码,输出下图所示信息: 

10、计算IOU为某几个值的precison。如果IOU选取了coco_eval.params.iouThrs中的所有值,那么就是MAP。如果IOU只选取了0.5,那么就是AP50。

iou_min_index=coco_eval.params.iouThrs.tolist().index(iou_min)
iou_max_index=coco_eval.params.iouThrs.tolist().index(iou_max)
each_IOU_precision = coco_eval.eval['precision'][iou_min_index:iou_max_index+1, :, 0, 0, 2]#####获取IOU为0.5~0.95的precision
MAP=round(np.mean(each_IOU_precision) * 100, 2)####计算所有IOU的precision的均值即MAP
min_IOU_precision = coco_eval.eval['precision'][iou_min_index:iou_min_index + 1, :, 0, 0,2]  #####获取IOU为0.5的precision
AP50 = round(np.mean(min_IOU_precision) * 100, 2)  ####计算所有IOU的precision的均值即MAP

总结2:以下为打印精确度更高的MAP&&AP50的完整代码即计算MAP/AP50的小数点后两位

以上代码中的result.json的格式为:

以上代码的gt.coco的格式如下:

{
    "images": [
        {
            "file_name": "ZYLC_zunyi_lc_ch02012_20220403145835.mp4.cut0.jpg",
            "height": 2160,
            "width": 3840,
            "id": "ZYLC_zunyi_lc_ch02012_20220403145835.mp4.cut0.jpg"
        },
        {
            "file_name": "ZYLC_zunyi_lc_ch01006_20220403133234.mp4.cut0.jpg",
            "height": 2160,
            "width": 3840,
            "id": "ZYLC_zunyi_lc_ch01006_20220403133234.mp4.cut0.jpg"
        }
    ],
    "annotations": [
        {
            "segmentation": [],
            "area": 9450,
            "iscrowd": 0,
            "image_id": "ZYLC_zunyi_lc_ch02012_20220403145835.mp4.cut0.jpg",
            "bbox": [
                3318,
                194,
                135,
                70
            ],
            "id": 1,
            "category_id": 3
        },
         {
            "segmentation": [],
            "area": 114737,
            "iscrowd": 0,
            "image_id": "ZYLC_zunyi_lc_ch02012_20220403145835.mp4.cut0.jpg",
            "bbox": [
                3158,
                118,
                443,
                259
            ],
            "id": 3,
            "category_id": 1
        },
        {
            "segmentation": [],
            "area": 317550,
            "iscrowd": 0,
            "image_id": "ZYLC_zunyi_lc_ch01006_20220403133234.mp4.cut0.jpg",
            "bbox": [
                2752,
                1035,
                730,
                435
            ],
            "id": 4,
            "category_id": 2
        }
   ],
  "categories": [
        {
            "id": 1,
            "name": "car"
        },
        {
            "id": 2,
            "name": "front"
        },
        {
            "id": 3,
            "name": "rear"
        }
    ]
}

详见:COCO数据集API(单类map,recall,统计) - 百度文库

疑似缺点:COCOAPI无法设置过滤min_size的框,暂时本人未找到具体API【懂的伙伴可以留言】

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值