深度学习目标检测入门实战
一、什么是目标检测
(一)目标检测:位置 + 类别
主流的目标检测,都是矩阵框的形式输出
人脸检测:目标-人脸
文字检测:目标-文字
(二)语义分割:更高精度
二、目标检测常用的数据集(开源)
(一)VOC数据集
官网:http://host.robots.ox.ac.uk/pascal/VOC/
(1)背景知识
- 很多领域数据集的开源往往都伴随着竞赛的产生,VOC就是PASCAL竞赛中所使用的数据集
比赛形式:
数据集
评分系统
- VOC 2005 ~ 2012 发展历史
所以大家更偏向于使用 VOC2007、VOC2012 数据集
(2)数据集的下载
强烈建议把数据集链接复制到迅雷中下载!!!
除了原始官方的下载路径,还有P2P资源,其他人下载此文件,迅雷开着,也愿意分享,我们就可以从这些地方获得资源,可大大提升下载速度
法一:用VOC官网
- 进入不同年份的竞赛
- 在 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,后面写代码的时候,替换一下路径即可
完