前言
根据B站up(霹雳吧啦Wz)的课程记的笔记
视频出处:PASCAL VOC2012数据集讲解与制作自己的数据集_哔哩哔哩_bilibili
博主B站:霹雳吧啦Wz
博主CSDN:霹雳吧啦Wz_太阳花的小绿豆_CSDN博客-深度学习,软件安装,Tensorflow领域博主
PASCAL VOC
一共有20个检测类别,包含于20个大类。
文件大概状态:主要关注标黄的文件
一般流程:
1、 读取train文件的每一行信息txt
2、在Annptations去找到对应的.xml文件,去解析这个文件。就知道这个图片的高度、宽度,还有标注信息。
3、在JPEGImages文件夹下面找到这个图片,再载入内存。
标注数据集
用labelImg,在github下载:
三个文件夹
就那样用吧。
MS COCO数据集
用pycocotool读取图片和标记信息:
from pycocotools.coco import COCO
json_path = "./instances_val2017.json"#标注信息
img_path = "./val2017" 图片文件夹
coco = COCO(annotation_fole=json_path) #读取验证集的标签文件。
ids = list(sorted(coco.img.keys()) #获取所有图像的索引,之后用来遍历
#遍历所有目标的索引,类别名称,转化为字典。
coco_classes = dict([(v["id"], v["name"]) for k, v in coco.cats.items()])
#遍历前三张图像,绘制标注信息。
for img_id in ids[:3]:
ann_ids = coco.getAnnIds(imgIds=img_id) #获取对应图片的标注类别的索引
targets = coco.loadAnns(ann_ids) #获取图片上所有的标注信息
path = coco.loadImgs(img_id)[0]['file_name'] #读取图片名称
#找到这张图片,转成RGB格式,读取它。
img = Image.open(os.path.join(img_path, path)).convert('RGB')
#在这张图片上绘制box信息,
draw = ImageDraw.Draw(img)
遍历所有目标框框。
for target in targets:
x,y,w,h=target["bbox"]
x1,y1,x2,y2 = x,y,int(x+w),int(y+h)
draw.rectangle((x1,y1,x2,y2))#绘制矩形框
draw.text((x1,y1),coco_classes[target["category_id"]]) #左上角写类别名称
#show image
plt.imshow(img)
plt.show()
算mAP
from pycocotools.coco import COCO
from pycocotools.cocoeval import COCOeval
#accumulate predictions from all images
#载入coco2017验证集标注文件
coco_true = COCO(annotation_file= "./instance_val2017.json")
coco_pre = coco_true.loadRes("./predict_results.json")
coco_evaluator = COCOeval(cocoGt=coco_true, cocoDt=coco——pre, iouType="bbox")
coco_evaluator.evaluate()
coco_evaluator.accumulate()
coco_evaluator.accumulate()