YOLO V2 的mAP数据测试

  • 我看到很多博客已经有了更加简单的方法。大家可以去看一下,直接使用fastrcnn的map脚本,本片博客是项目中用于评测网络的,并不是故意那么绕的,因为原版map计算和我们yolo采集的数据集有些不兼容,而且我们为了更加准确的判断,会在计算map的时候修改其iou数值,confidence数据,以及面积过滤,坐标过滤等,大家如果只是想求解map,建议转其他博客。博主看到一个教程比较简单,但是没有试过,原理是一样的。https://blog.csdn.net/LeeWanzhi/article/details/79690275 虽然态度不好,可能看起来比较简单吧。

正文

yolo的官方上上显示,yolo v2具有76.8%的mAP,与SSD 500持平,单在fps上冥想的以碾压的优势胜出。除此之外,tiny-yolo也有着57.1%的mAP。之前博主一直在作yolov2和tinu-yolo的移植和改进,训练了接近3000张数据。但是经过实际的测试发现,tiny-yolo网络的实际效果并没有官网宣称的那么好,即使将迭代次数改为60000,也无济于事。但是yolov2网络的效果却是不容小觑的,基本博主的大部分检测物体都能够很好的识别。于是博主准备实际测量yolov2和tiny-yolo的实际的mAP值。

首先解释一下什么是mAP,目标检测中衡量识别精度的指标是mAP(mean average precision)。多个类别物体检测中,每一个类别都可以根据recall和precision绘制一条曲线,AP就是该曲线下的面积,mAP是多个类别AP的平均值。以上介绍来自于知乎论坛。具体的信息可以去百度或者google搜索。
因为是使用的voc规范的数据集,所以应该有训练图片的源文件,xml文件。但是这些文件并不能被yolo网络直接检测,需要转为描述文件,即每张图片对应的描述文件txt,里面记载每张图片出现检测物体的类别,位置,大小。但是对于fast-rcnn里面的mAP计算程序来说,他需要的确实另外一种格式,博主在进行格式转换的时候出了很多bug,所以现在将训练个voc格式和识别的格式统一起来,方便于mAP值的测定。
要测量训练出的网络的效果首先要有一定数量的测试数据集。测试数据集需要有图片和每张图片对应的xml描述文件,而不需要有txt的描述语言,所以相对来说还少了一步转换。使用
./darknet detector valid cfg/voc.data cfg/lucky-voc.cfg backup/lucky-slippers-color_30000.weights -out 123 -thresh 0.5
以上代码是使用的yolo网络自带的valid函数接口来测试大量的图片,然后保存在123.txt文件里,也可以是其他的文件,名字,位置自己决定。
首先cfg/voc.data里面是一些路径的描述,具体内容为
classes= 1
train = /home/lucky/open/tuoxie_VOC/train.txt
valid = /home/lucky/open/tuoxie_VOC/valid.txt
names = data/voc.names
backup = backup

因为我的识别物体只有一个,所以class为1,train是指的训练的数据地址描述文件,valid是值测试的地址描述文件。后面的name是类别描述文件,backup一般是训练的时候存储的路径。我们需要修改的只有valid这一项,指向需要测试的文件名。
cfg/lucky-voc.cfg是指的配置文件,和训练,检测时一样。
backup/lucky-slippers-color_30000.weights是指你使用的权重。
-out 是参数,输出到后面紧跟着的文件名。
-thresh是输出阀值参数,然而在实际测试的时候并没有什么作用,因为源代码中并没有被设定。这里我设为0.5.
运行完这一句话,之后darknet开始加载权重文件,然后根据你提供的测试文件的目录开始逐个识别检测。最后运行完之后,图片如下

(we use gpu!!!忽略不看,这是博主之前在测试gpu和cpu速度的时候输出)
接着就可以在文件./results/看到刚才的输出文件123tuoxie.txt,yolo会把识别到的东西分类,然后在自定的名字之后加上类别名,就像这里的123tuxie一样。。。
里面的内容也是有些奇怪,貌似并没有什么逻辑,不是是不是博主的操作不对,还是博主在之前优化的时候不小心改了yolo的源码。(从数据上看,设定的阀值确实没有用。源码中也可以看到。)

先不管那么多,下面开始mAP的计算。mAP的计算是使用的fast-rcnn里的voc_eval函数。博主修改了一下,可以更直接的得到我们想要的数据。首先确定的是所有的测试图片都和其对应的xml文件在一起,不然寻找匹配的描述文件的时候会出错。请注意,所有分类的图片都要放在同一个目录!!!就像下图一样

其次将计算的源码下载到本地,很小的文件voc-eval-github

git clone git@github.com:lucky-ing/voc_eval.git

里面只有一个文件123.py,使用

python 123.py /home/lucky/yolo/darknet/results/123tuoxie.txt /home/lucky/open/tuoxie_VOC/valid.txt tuoxie

/home/lucky/yolo/darknet/results/123tuoxie.txt是指刚才测试后的数据地址。/home/lucky/open/tuoxie_VOC/valid.txt,是测试的图片地址描述文件,和上面的voc.data是同一个文件。第四个参数tuoxie,是我们要计算mAP的类别名。然后,回车,运行,

不同的class有不同的valid文件,所以不同的分类需要一个一个测试。

最新更新:

这个用来测试mAP的文件因为麻烦,收到很多质问,博主在这一并回复。

  • 为什么计算mAP的时候还需要xml文件?

  • 答:因为yolo网络valid出来的是多个文件夹,每个文件夹代表一个分类检测出来的所有的情况,但是这些情况的信息使用使用像素位置来表示的。即,如果在480×480的图片中,里面检测出来的物体框图都是使用像素的位置,例如
    20171015_210945 0.006307 292.750244 123.649994 354.466797 264.518311
    代表着在20171015_210945图片中,检测出一个置信度为0.006307的物体,位置在292.750244 123.649994 354.466797 264.518311,这表示的是方框的对角的像素坐标。但是我们训练时候的标注文件(.txt)里面使用却是相对比例信息,例如
    0.4 0.5 0.2 0.1
    这个是指在图片比例0.4,0.5点有一个宽0.2,高0.1的物体。这就导致了求解mAP的时候信息格式是不对等的,所以只能从源xml文件找标注的信息。

  • 为什么voc_eval文件计算的时候会保存一个txt文件?

  • 答:因为xml的文件的原因,他需要统一路径,所以保存了文件,然后再读取,现在博主已经更新了,不会再保存文件了。

  • 为什么读取valid文件错误?

  • 因为博主设定的图片格式只有.jpg,现在已经支持.jpg .JPEG .png .PNG图像格式了。

  • 为什么在使用voc_eval文件计算mAP的时候会显示目录错误。

  • 请注意,是否将所有的测试图片都放在了同一个文件夹,请注意,一定要将所有的测试图片放在同一个文件夹内!!

  • 为什么有时候会有split之类的错误?

  • 博主遇到了这个问题,后来分析是因为测试集的名字有空格,所以导致在提取信息的时候会产生问题。如果真的是这个问题,那就需要修改yolo源码了,使yolo输出的文件用:或者其他符号来表示,然后提取的时候就不会出现这种问题。

新添加的功能

  • 支持了查全率和查准率的图像的调取,保存在了目录下的123.jpg

contact

欢迎读者一起讨论,或者联系博主邮件:lucky_lsq@163.com

  • 6
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 16
    评论
yolo是目前目标检测领域比较流行的深度学习方法之一,其通过卷积神经网络实现目标的识别和定位。而yolomap曲线可视化则是yolo这个目标检测方法常用的评价指标之一,主要是用来展示模型的性能表现和不同模型的对比。下面我们来详细介绍一下yolomap曲线可视化。 yolomap曲线可视化主要是通过不同的IOU(交并比)阈值和不同的类别阈值来展示模型在不同条件下的表现情况。其中,IOU阈值是指检测结果框与真实目标框的重叠率,常用的IOU阈值有0.5、0.75、0.95等。类别阈值是指模型输出的各类别得分中,取值大于某一阈值的才会被认为是该类别,常用的类别阈值有0.1、0.5、0.75等。yolomap曲线可视化常用的评价指标是平均精度(mean average precision,mAP),mAP是模型在相应条件下所有类别AP(Average Precision)的平均值,其中AP定义为:对于一个类别,以类别概率为置信度,按照置信度排序,计算在每个排名下的Precision和Recall,并计算P-R曲线下的面积(AUC),即为该类别的AP。mAP越高,说明模型在不同条件下的表现越好。 yolomap曲线可视化图一般是以IOU阈值为横坐标,mAP为纵坐标,在同一张图中绘制不同类别阈值下的mAP与IOU的关系曲线。通过观察yolomap曲线可视化图,可以得出以下几点结论:(1)在相同的类别阈值下,随着IOU阈值的提高,mAP一般也会有所提高;(2)在相同的IOU阈值下,随着类别阈值的提高,mAP一般会先增大后减小,这是因为当类别阈值过大时,虽然可以减少背景噪音,但同时也会忽略掉一些真正有用的目标;(3)通过yolomap曲线可视化图,可以比较不同网络模型在不同条件下的性能表现。比如,同样在IOU阈值为0.5时,模型A的mAP明显高于模型B,说明模型A在一定条件下表现更优秀。 总之,yolomap曲线可视化是一种比较直观的评价目标检测模型性能的方法,通过观察不同条件下的mAP变化情况,可以得出模型优劣的结论,为进一步优化模型提供指导。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值