目标检测笔记-概述和常用数据集

概述和常用数据集

0.概述

  • 要有分类网络相关基础知识
    捕获
  • 目标检测分为两类: One-Stage,Two-Stage

1.Two-Stage: Faster R-CNN

1)通过专门模块去生成候选框(RPN),寻找前景以及调整边界框基于anchors

2)基于之前生成的候选框进行进一步分类以及调整边界框基于proposals

2.One-Stage: SSD,YOLO

基于anchors直接进行分类以及调整边界框

One-Stage,Two-Stage对比: One-Stage检测速度更快Two-Stage检测准确度更高

1.TF官方提供的API

up视频详见https://www.bilibili.com/video/BV1KE411E7Ch?spm_id_from=333.999.0.0

2.PASCAL VOC2012数据集

捕获

  • 数据集目录

捕获

  • 使用方法:
  1. 读取train.txt文件的每一行信息(图片名称)
  2. Annotations文件夹下找到对应的.xml文件
  3. 通过.xml文件可以获得图片信息(宽度,高度,目标位置等)
  4. JPEGImages文件夹下找到相应的图片,载入内存。

3. MS COCO数据集及使用

捕获

在使用时有Object80类stuff91类,Object80类是stuff91类的子集,一般目标检测只需要用到Object80类,具体看使用场景。

相对于PASCAL VOC 预训练效果更好,但耗时更多

Coco数据集官网http://cocodataset.org/

网盘地址:链接:https://pan.baidu.com/s/1_kQBJxB019cXpzfqNz7ANA 提取码:m6s5

捕获

捕获

bilibili up讲解视频https://www.bilibili.com/video/BV1TK4y1o78H?spm_id_from=333.999.0.0

推荐博文链接: https://blog.csdn.net/qq_37541097/article/details/112248194

github链接https://github.com/WZMIAOMIAO/deep-learning-for-image-processing

更多详解可看官网文档http://cocodataset.org/#format-data

Ps:自己的数据划分测试集是没有意义的,因为数据分布基本一致

import json
# 查看json文件的数据结构
json_path = "G:/coco2017/annotations/instances_val2017.json"
json_labels = json.load(open(json_path,"r"))
print(json_labels)
# >>>json_label
#      |-info:描述文件信息
#      |-licenses:无影响信息
#      |-image:5000个元素对应5000张图片,包含图片信息
#      |-annotations:3w+元素对应3w+目标
#      |    |-segmentation:分割信息
#      |    |-area:面积
#      |    |-iscrowed:是否重叠,一般只选为0的训练
#      |    |-image_id:图片id
#      |    |-bbox:标记框信息(左上坐标,长宽)
#      |    |_category_id:类别名称
#      |_categories:80个元素对应80个类
# PS:categories中id不连续,训练时需注意。
# 关于coco官方的工具pycocotools的安装
# liunx:pip install pycocotools
# windows:pip install pycocotools-windows
import os
from pycocotools.coco import COCO
from PIL import Image,ImageDraw
import matplotlib.pyplot as plt

json_path = "G:/coco2017/annotations/instances_val2017.json"
img_path = "G:/coco2017/val2017"
# 导入coco数据
coco = COCO(annotation_file=json_path)
# 得到所有图片的索引
ids = list(sorted(coco.imgs.keys()))
print("number of image:%d"%len(ids))
# 得到所有的coco分类标签
coco_classes = dict([(v["id"], v["name"]) for k,v in coco.cats.items()])
# 遍历前三张图片
for img_id in ids[:3]:
    # 获取对应图像id的所有annotations ids信息
    ann_ids = coco.getAnnIds(img_id)
    # 根据annotations idx信息获取所有标注信息
    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')
    # 绘制图片
    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"]])  # 绘制类名称
    # 显示图片
    plt.imshow(img)
    plt.show()
# coco中目标检测结果的文件形式
'''
[{
"image_id"      :int,  # 记录该目标所属图像的id
"category_id"   :int,  # 记录预测该目标的类别索引
"bbox"          :[x,y,w,h]  # 记录预测该目标的边界框信息
"score"         :float  # 记录预测该目标的概率
}]
'''
# 训练的结果输出保存为json形式,与验证集上的结果进行比较
from pycocotools.coco import COCO
from pycocotools.cocoeval import COCOeval
# 载入验证集的标注文件
coco_ture = COCO(annotation_file="./val_2017.json")
# 载入网络在coco2017验证集上的预测结果
coco_pre = coco_ture.loadRes('./predict_results.json')
# 输出预测的效果,指标mAP,具体看第5小节
coco_evaluator = COCOeval(cocoGt=coco_ture, cocoDt=coco_pre, iouType="bbox")
coco_evaluator.evaluate()
coco_evaluator.accumulate()
coco_evaluator.summarize()

4.创建自己的数据集LabelImg&Labelme

LabelImg生成的有xml文件与VOC2012一致

Labelme不只是能够标注目标检测的样本,也可进行语义分割等其他样本标注。

  • 下载安装:pip install labelImg
  • 输入labelImg打开软件

捕获

5.目标检测coco常见指标

TP(True Positive):IOU>0.5的检测框的数量(同一Ground Truth只计算一次)。

FP(Flase Positive):IOU<=0.5的检测框(或是检测到同一Ground Truth的多余检测框)的数量。

FN(False Negative):没有检测到的Ground Truth的数量。

Precision(查准率):TP/(TP+FP) 模型预测的所有目标中,预测正确的比例。

Recall(查全率):TP/(TP+FN) 所有真实目标中,模型预测正确的目标比例。

AP(Average Precision): P-R(Precision-Recall)曲线下面积。

mAP(mean Average Precision):即各类别AP的平均值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值