计算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
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值