YOLOV3-keras版本下计算自己数据集的mAP
大家好,这是本小白的第一篇博客,主要是在作者"倔强的大萝卜"这篇文章 【YOLOV3-keras-MAP】YOLOV3-keras版本的mAP计算(https://blog.csdn.net/plSong_CSDN/article/details/89502117)的基础上,进行补充,最终实现自己数据集的keras-yolov3的mAP计算。前提是,已经训练好了h5文件。
原博主直接给出了代码包 https://github.com/Cartucho/mAP,其博客也有关键代码的解释,但并没有给出整个连续的实现过程,我看评论里也有一些同是小白的盆友求具体代码,我把它连贯起来了,在这里记录总结一下~
前言
首先引用一下 目标检测问题中的-MAP 里的几个基本概念:
MAP(mean Average Precision):均值平均精度。目标检测模型的性能评估
Ground Truth:对于任何算法,度量总是与数据的真实值(Ground Truth)进行比较,Ground Truth就是数据的真实值。Ground Truth包括图像中的目标的类别以及图像中每个目标的边界框。
Iou:交并比。交并比是模型所预测的检测框和真实(Ground Truth)的检测框的交集和并集之间的比例。
如何计算可以查看原博主 目标检测问题中的-MAP 这篇博文,本文主要讲实现方法。
1 下载mAP压缩包
原博主给出了这个下载地址 mAP代码下载
下载后解压到keras-yolo3的主目录下,若要计算自己的数据,可以把压缩包里mAP-master/input下的三个文件夹(detection_results, ground_truth, images-optional)里的内容清空,以便后续放入自己的数据。
实现mAP的计算主要就是把相应的文件放入到 detection_results, ground_truth, images-optional 这三个文件夹中,然后根据压缩包里的main.py 文件直接生成结果。下面依次解释我是咋实现的。
2 images-optional文件夹
先从最简单的开始吧,images-optional文件夹主要是放你要测试(test)的图像数据的。
第一种方法是,你只需要把你准备的测试图片粘进去
第二种方法是,你可以在main.py 文件中把IMG_PATH的路径引到你放测试图片的文件夹。下面是main.py 文件中的部分代码,修改即可。
GT_PATH = os.path.join(os.getcwd(), 'input', 'ground-truth')
DR_PATH = os.path.join(os.getcwd(), 'input', 'detection-results')
# if there are no images then no animation can be shown
# IMG_PATH = os.path.join(os.getcwd(), 'input', 'images-optional') 默认是images-optional
IMG_PATH = '/home/bu807/Downloads/keras-yolo3-master2/keras-yolo3-master2/test' #也可以引到自己的test路径
粘完图片,或者改完路径后,images-optional文件夹就搞定了。最简单。
3 ground_truth文件夹
ground_truth用来放真实值,就是你当初标的框的位置大小,如下:一张图里,眼睛 鼻子 嘴巴 的类型、位置和大小。
格式是:classname left top right bottom
eye 86 274 146 305
eye 214 273 282 303
nose 138 334 220 385
mouth 139 404 220 437
这里需要放入原始值的txt文件,我们可以根据xml文件生成。首先,需要将xml导入到ground_truth文件夹;然后,通过covert_gt_xml.py转成txt文件。
3.1 将xml导入到ground_truth文件夹
第一种方法,你的测试图片少的话,可以直接把相应的xml文件粘到ground_truth文件夹。
第二种方法,你的测试图片很多/一个一个找不好找,我简单写了一个代码(如下:findxml.py,你可以把它放在mAP-master/scripts/extra下 ),可以从你的Annotations文件夹中找到相应的xml文件,然后粘到ground_truth文件夹。