对于目标检测来说,cocoeval计算box mAP的过程可以如下,
先把预测的目标框坐标结合image_id dump到一个和coco annotation格式一样的json文件。
然后调用
coco_dets = self.coco_api.loadRes(json_path)
coco_eval = COCOeval(
copy.deepcopy(self.coco_api), copy.deepcopy(coco_dets), "bbox"
)
coco_eval.evaluate()
coco_eval.accumulate()
如果要计算mask的mAP, 需要把上面的“bbox”改成“segm”
coco_eval = COCOeval(
copy.deepcopy(self.coco_api), copy.deepcopy(coco_dets), "segm"
)
coco_api的loadRes函数里有这么一个处理,
如果没有把mask写进去,就会自动把目标框的4个点连接起来当作轮廓。
if not 'segmentation' in ann:
ann['segmentation'] = [[x1, y1, x1, y2, x2, y2, x2, y1]]
annotation文件中segment也是以轮廓的polygon形式储存的。
coco annotation的格式
{
"segmentation": [[510.66,423.01,511.72,420.03,510.45......]], #两两组成(x,y)坐标,polygon格式
"area": 702.1057499999998,

文章详细介绍了在目标检测任务中,如何使用COCOAPI计算mask的mAP。首先,将预测的边界框和image_id转化为与COCOannotation相同格式的JSON文件,然后利用COCOeval进行评估。对于mask的计算,需将参数改为segm。文中提到了COCOAPI如何处理没有提供segmentation的annotation,以及polygon和RLE格式的转换过程,包括mask如何转为RLE编码并进一步用于计算mAP。
最低0.47元/天 解锁文章
884

被折叠的 条评论
为什么被折叠?



