计算map

https://zhuanlan.zhihu.com/p/101566089
https://blog.csdn.net/amusi1994/article/details/81564504

前言

本文只介绍如何利用YOLOv3训练好的model来计算VOC数据集的mAP。

举一反三,很容易理解如何利用自己训练的model来计算自己的数据集的mAP。

1 运行detector valid命令,进行测试

./darknet detector valid cfg/voc.data cfg/yolov3-voc.cfg backup/VOC/yolov3-voc_final.weights -out "" -gpu 0 -thresh .5
  • 1
  • 2

注意:-out “” 双引号其实可以加内容的,但建议初次使用时不要加自定义内容,网上很多教程都加了,其实一点用都没有。之后可以再慢慢探索。

运行速度很快,大概90秒

在这里插入图片描述

运行结束后,在results文件夹下生成20个.txt文件,为什么是20个,因为VOC数据集就是20类呀。

在这里插入图片描述

2 下载voc_eval.py

https://github.com/rbgirshick/py-faster-rcnn/tree/master/lib/datasets

3 新建compute_mAP.py

写入

from voc_eval import voc_eval

print voc_eval(’/home/cxx/Amusi/Object_Detection/YOLO/darknet/results/{}.txt’, ‘/home/cxx/Amusi/Object_Detection/YOLO/darknet/datasets/pjreddie-VOC/VOCdevkit/VOC2007/Annotations/{}.xml’, ‘/home/cxx/Amusi/Object_Detection/YOLO/darknet/datasets/pjreddie-VOC/VOCdevkit/VOC2007/ImageSets/Main/test.txt’, ‘person’, ‘.’)

  • 1
  • 2
  • 3

注意要修改上述内容的路径

要在python2的环境下运行compute_mAP.py。

运行完成后,其实会在当前路径下生成一个annots.pkl。这个文件很重要,如果你换了数据集,对新的类别来计算mAP,则需要将之前生成的annots.pkl删掉,才能正常计算。

其实上述代码是对person类计算mAP,输出的结果如下所示:

在这里插入图片描述

输出的最后一项内容,才是person类的mAP,即为0.852959。

同理,将compute_mAP.py中的person改成aeroplane,即可以计算aeroplane的mAP。

上述内容,其实是网上千篇一律的内容。

我在想,为什么不直接写一个.py,直接计算出所有单类别的mAP和总的mAP!

这就搞起来!

4 新建computer_Single_ALL_mAP.py

写入如下内容:

from voc_eval import voc_eval

import os

current_path = os.getcwd()
results_path = current_path+"/results"
sub_files = os.listdir(results_path)

mAP = []
for i in range(len(sub_files)):
class_name = sub_files[i].split(".txt")[0]
rec, prec, ap = voc_eval(’/home/cxx/Amusi/Object_Detection/YOLO/darknet/results/{}.txt’, ‘/home/cxx/Amusi/Object_Detection/YOLO/darknet/datasets/pjreddie-VOC/VOCdevkit/VOC2007/Annotations/{}.xml’, ‘/home/cxx/Amusi/Object_Detection/YOLO/darknet/datasets/pjreddie-VOC/VOCdevkit/VOC2007/ImageSets/Main/test.txt’, class_name, ‘.’)
print("{} :\t {} ".format(class_name, ap))
mAP.append(ap)

mAP = tuple(mAP)

print("***************************")
print(“mAP :\t {}”.format( float( sum(mAP)/len(mAP)) ))

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

注意,上述代码中的ap就是针对输入单一类别计算出的AP。

最终结果如下图所示:

在这里插入图片描述

YOLOv3对VOC进行测试,其mAP为82.29。

注:不知道上述计算方式规不规范,因为此时的mAP还挺高的。

参考

YOLOv3使用笔记——计算mAP、recall

darknet yolo 计算mAP,recall

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值