9.YOLO_v3求出map精度
(写在每篇深度学习文章系列的前面,该系列的文章是我2019年做毕设时的步骤总结,是能实现的,不和其他很多博客一样瞎糊弄人浪费时间。写下这些文章一方面为了方便后来者,一方面也为了自己以后的步骤复现等。
另外,如果我给的那些参考帖子看不了了,可以到我的博客下载区那里去下载对应的压缩文件,我把里面所有的链接网页都截了长图,所以不用担心我给的参考帖子链接失效。
其次,如果我给的参考链接侵犯了该链接博主的权益,烦请告知,必当第一时间删掉。由于本人参考帖子较多,如果侵犯了请原谅,我会删掉。也谢谢各位在路上帮助过我的,谢谢了。
还有就是,如果积分太高了,请告诉我怎么把积分降低,我也不太清楚怎么弄,积分会随着下载次数增加逐渐增加。你知道的话怎么降的话可以留言给我。
emm, 最后的最后,如果你觉得这篇博文有用,请点个赞哩,感谢!~~)
(博客下载区:https://download.youkuaiyun.com/download/lininggggggg/11224796
或者在下载区搜索名字:9.YOLO_v3求出map精度.zip–深度学习文章9)
正文
https://blog.youkuaiyun.com/weixin_38106878/article/details/89199961?tdsourcetag=s_pctim_aiomsg#commentsedit
(再加上其评论即可复现代码)
(问题1:请问为什么运行第二步会出错, os.rename(tmp_file, os.path.join(backup, tmp_file)) NameError: name ‘backup’ is not defined
解决了,把那行移动文件的代码注释即可(倒数第二行),然后手动移动即可
)
(问题2:请问博主第三步运行起来速度快吗?我的每张图片要几秒,好慢
把194行的yolo=YOLO()挪到for循环外面,载入一次模型就可以了,每次都重新载入模型初始化当然慢)
内容1:求解map的方法
方法一:(运行官方的例程)
第一步, 在GitHub上下载相关代码并解压保存到主目录下,即keras-yolo3-master这个目录下。其中,网址为https://github.com/Cartucho/mAP
第二步,在map文件夹目录下,打开main.py文件并运行,会出现运行过程,很多图片一闪而过,表示正在测试,随后测试结束后会弹出测试结果的精度。
第三步,然后测试的更加详细结果可以在目录keras-yolo3-master5\map\results下查看(此次盗用方法二的截图)
方法二:(应该是最对的方法)
第一步, 在GitHub上下载相关代码并解压保存到主目录下,即keras-yolo3-master这个目录下。其中,网址为https://github.com/Cartucho/mAP
第二步,准备好要测试的图片。一般情况下是自己手动去把之前标记后生成的图片集里按照测试的文本文件里的文件名去手动把图片和对应xml文件复制出来才可以(有些笨)。
(我也不知道这样的图片对不对,但如果不是用这个的话那测试集的图片是用来做什么的,好像没用到它的地方)
其中,将图片复制到目录keras-yolo3-master5\map\input\images-optional下
将xml复制到目录E:\GraduationProject\Data\keras-yolo3-master5\map\input\ground-truth下,之前这两个文件里的文件全删除掉即可。
第三步,将测试图片转换为每个txt文件
有现成代码可以用。打开下面的python文件,
然后,将该文件的倒数第二行注释掉(就是那个重新命名就得xml文件并将其移动到新的文件夹backup里的语句,下图的第四十行代码那里),在运行成功后最好手动将xml文件剪切到那个backup文件夹里。
第四步,在主目录下新建一个python文件,命名为yolo_detect.py,然后复制下面的代码然后运行即可
# -*- coding: utf-8 -*-
"""
Class definition of YOLO_v3 style detection model on image and video
"""
import colorsys
import os
import sys
from timeit import default_timer as timer
import numpy as np
from keras import backend as K
from keras.models import load_model
from keras.layers import Input
from PIL import Image, ImageFont, ImageDraw
from yolo3.model import yolo_eval, yolo_body, tiny_yolo_body
from yolo3.utils import letterbox_image
import os
from keras.utils import multi_gpu_model
class YOLO(object):
_defaults = {
"model_path": 'E:\GraduationProject\Data\keras-yolo3-master5\model_data/yolo.h5', ##训练好的模型的路径
"anchors_path": 'model_data/yolo_anchors.txt',
"classes_path": 'model_data/voc_classes.txt',
"score" : 0.3,
"iou" : 0.45,
"model_image_size" : (416, 416),
"gpu_num" : 0
}
@classmethod
def get_defaults(cls, n):
if n in cls._defaults:
return cls._defaults[n]
else:
return "Unrecognized attribute name '" + n + "'"
def __init__(self, **kwargs):
self.__dict__.update(self._defaults) # set up default values
self.__dict__.update(kwargs) # and update with user overrides
self.class_names = self._get_class()
self.anchors = self._get_anchors()
self.sess = K.get_session()
self.boxes, self.scores, self.classes = self.generate()
def _get_class(self):
classes_path = os.path.expanduser(self.classes_path)
with open(classes_path) as f:
class_names = f.readlines()
class_names = [c.strip() for c in class_names]
return class_names
def _get_anchors(self):
anchors_path = os.path.expanduser(self.anchors_path)
with open(anchors_path) as f:
anchors = f.readline()
anchors = [float(x) for x in anchors.split(',')]
return np.array(anchors).reshape(-1, 2)