深度学习目标检测入门实战

一、什么是目标检测

(一)目标检测:位置 + 类别
主流的目标检测,都是矩阵框的形式输出
在这里插入图片描述

人脸检测:目标-人脸
文字检测:目标-文字

(二)语义分割:更高精度
在这里插入图片描述


二、目标检测常用的数据集(开源)

(一)VOC数据集

官网:http://host.robots.ox.ac.uk/pascal/VOC/

(1)背景知识

  • 很多领域数据集的开源往往都伴随着竞赛的产生,VOC就是PASCAL竞赛中所使用的数据集
    比赛形式:
    在这里插入图片描述
    在这里插入图片描述

数据集在这里插入图片描述
评分系统在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • VOC 2005 ~ 2012 发展历史在这里插入图片描述
    在这里插入图片描述
    所以大家更偏向于使用 VOC2007、VOC2012 数据集

(2)数据集的下载

强烈建议把数据集链接复制到迅雷中下载!!!
除了原始官方的下载路径,还有P2P资源,其他人下载此文件,迅雷开着,也愿意分享,我们就可以从这些地方获得资源,可大大提升下载速度

法一:用VOC官网

  1. 进入不同年份的竞赛
    在这里插入图片描述
  2. 在 Development Kit 中下载
    在这里插入图片描述
    法二:用Pytorch中的库
    在这里插入图片描述
    在这里插入图片描述

这里我们就以下载 VOC2007 和VOC2012为例
在这里插入图片描述
.tar是Linux上面的压缩格式,右键解压即可
在这里插入图片描述

(3)VOC2007 数据集的标注

  • VOC2007中的文件
    在这里插入图片描述
  • Annotations:其文件夹底下包含了.xml 文件,描述了图片的各种信息,特别是目标的位置坐标
    在这里插入图片描述
  • ImageSets:主要关注Main文件夹底下的内容,里面的文件包含了不同类别目标的训练/验证数据集图片名称
    在这里插入图片描述
    在这里插入图片描述
  • JPEGImages:原图片
    在这里插入图片描述
  • SementationClass/Object:用于语义分割,我们不关注
    在这里插入图片描述

(4)VOC2012 数据集的标注

会发现文件夹的结构目录和 VOC2007 的一样,唯一不同的可能就是文件夹中图片的命名方式:年份_图片标号

在这里插入图片描述

  • 对于先前以2008年为分界线,数据集不同的解释
    在这里插入图片描述
  • 复习解读
    在这里插入图片描述

(二)COCO 数据集

官网:https://cocodataset.org/#home

(1)背景知识

在这里插入图片描述
在这里插入图片描述

Explore:
在这里插入图片描述
在这里插入图片描述

Download
在这里插入图片描述

我们常用的数据集是 COCO2017

(2)数据集的下载

在这里插入图片描述
Train Images 和 Val Images 是一样的目录结构,训练数据集太大了,这里就只下验证集和标注

在这里插入图片描述

(3)COCO2017 数据集的标注

  • val2017文件夹下
    在这里插入图片描述
  • annotations文件夹下
    在这里插入图片描述
    从instances_val2017.json 中截取的一部分在这里插入图片描述
    在这里插入图片描述
  • 格式化代码的方法
    在这里插入图片描述

三、如何标注自己的数据集

(一)MakeSense(在线)

链接:https://www.makesense.ai/
在这里插入图片描述
1. 上传图片
在这里插入图片描述
2. 打标
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
3. 导出
在这里插入图片描述

  • 导出成 VOC 格式
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 导出成 YOLO 格式
    在这里插入图片描述
    在这里插入图片描述

4. 用 AI 标注的方法(这个网站这个功能加载的好慢)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(二)CVAT(在线)(强推!)

官网:https://www.cvat.ai/,可以进行多人协作,可以更好的处理大型项目,推荐!
1. 创建Project
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2. 创建task

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
3. 进入task中打标
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
4. 导出
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
5. 下载到本地打开
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

另:

  • 从这里导出task和在打标界面导出效果相同
    在这里插入图片描述
  • CVAT还支持将整个项目直接导出
    在这里插入图片描述

(三)Labelimg(虚拟环境)

(1)在虚拟环境中安装+启动

# 安装
pip install labelimg -i https://pypi.tuna.tsinghua.edu.cn/simple
# 启动
labelimg

(2)标注
在这里插入图片描述
(3)常见报错

QMimeDatabase: Error loading internal MIME dataAn error has been encountered at line

原因:直接使用了anaconda的base环境(python>3.10),安装labelimg。安装labelimg的python环境必须低于3.10,否则labelimg会出现闪退

(四)精灵标注助手(本地)

如果是自制数据集,担心自己数据集的安全性,可以考虑本地,但更推荐用网站在线标注
下载链接:http://www.jinglingbiaozhu.com/
在这里插入图片描述
1. 导入图片
在这里插入图片描述
2. 打标
在这里插入图片描述
在这里插入图片描述
3. 导出
在这里插入图片描述
4. 格式化
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


四、如何用Pytorch读取COCO数据集

(1)准备工作
配环境
在这里插入图片描述
了解读取COCO数据集所用函数
在这里插入图片描述
(2)便调试边写代码
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

import torchvision
from PIL import ImageDraw

# 路径的正确写法
# 1、加 r (加个 r 可代表不进行转义)   2、把 /写成 //   3、把 /写成 \
coco_dataset = torchvision.datasets.CocoDetection(root=r"D:\Python\COCO_Debug\val2017",
                                                  annFile=r"D:\Python\COCO_Debug\annotations\instances_val2017.json")
image,info = coco_dataset[0]
# 想要画出框,要获得图片的 handler(句柄)
image_handle = ImageDraw.ImageDraw(image)
for annotation in info:
    x_min,y_min,width,height = annotation['bbox']
    image_handle.rectangle(((x_min,y_min),(x_min+width,y_min+height)))

image.show()

五、如何用自己的数据集标注成COCO的数据格式

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

import torchvision
from PIL import ImageDraw

# 路径的正确写法
# 1、加 r (加个 r 可代表不进行转义)   2、把 / 写 //   3、把 / 写成 \
coco_dataset = torchvision.datasets.CocoDetection(root=r"MyDataset",
                                                  annFile=r"MyDataset/mydataset_coco/annotations/instances_default.json")
image,info = coco_dataset[0]
# 想要画出框,要获得图片的handler(句柄)
image_handle = ImageDraw.ImageDraw(image)
for annotation in info:
    x_min,y_min,width,height = annotation['bbox']
    image_handle.rectangle(((x_min,y_min),(x_min+width,y_min+height)))

image.show()

为什么喜欢把数据集的标注导出成标准的数据集格式,就是为了方便我们使用这些API,后面写代码的时候,替换一下路径即可


  • 7
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值