【土堆】目标检测の入门实战——手把手教你使用 Make Sense 和 CVAT 在线标注 VOC 数据集与 COCO 数据集 用 PyTorch 读取自制 COCO 数据集

本文主要是介绍【土堆】目标检测の入门实战——手把手教你使用 Make Sense 和 CVAT 在线标注 VOC 数据集与 COCO 数据集 用 PyTorch 读取自制 COCO 数据集,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

前言

一、什么是目标检测

二、VOC 数据集 

1、下载 VOC 数据集

2、介绍 VOC 数据集

三、COCO 数据集

1、下载 COCO 数据集

2、介绍 COCO 数据集

四、在线标注数据集

1、Make Sense

2、CVAT

五、本地标注数据集

1、精灵标注助手

六、论 Python 的元组、字典与数组

七、用 PyTorch 加载 COCO 数据集

八、用 PyTorch 读取自己的 COCO 数据集 


前言

视频教程为 B 站我是土堆的 PyTorch 深度学习目标检测入门实战系列,所有代码均为视频演示版本,非本人原创。

一、什么是目标检测

目标检测 Object Detection :检测,不仅要找到图片上的所关心的目标 位置 ,同时还要识别出这个目标是什么 类别 。目标,根据我们应用的场景进行定义。比如在人脸检测场景中,我们可以把 人脸 当作目标。在文字检测场景中,我们可以把 文字 当作目标。如今,更多的科研研究都是聚焦于自然场景中的目标检测,检测的目标主要就是生活中常见的物体类别,这类检测问题的特点是目标种类多,目标位置较为复杂多样。

【补充】主流的目标检测都是以 矩阵框 的形式进行输出的,而语义分割比目标检测的精度更高。

二、VOC 数据集 

PASCAL VOC 官网:The PASCAL Visual Object Classes Homepage

torchvision.datasets.VOCDetection 官方文档:VOCDetection — Torchvision 0.16 documentation

torchvision.datasets.VOCSegmentation 官方文档:VOCSegmentation — Torchvision 0.16 documentation

【补充】推荐使用 Google 浏览器,在 Microsoft Bing 网站中搜索 PASCAL VOC ,点击进入PASCAL VOC 官网。

1、下载 VOC 数据集

我们通常使用 VOC 2007 数据集和 VOC 2012 数据集,具体原因见下图:

VOC 2007 版:The PASCAL Visual Object Classes Challenge 2007 (VOC2007)

VOC 2012 版:The PASCAL Visual Object Classes Challenge 2012 (VOC2012)

2、介绍 VOC 数据集

在官网下载 VOC 数据集后,我们需要大致了解 VOC 数据集的文件夹结构:

  1.  Annotations :包含 xml 文件,描述了图片的各种信息,特别是目标的位置坐标
  2.  ImageSets :主要关注 Main 文件夹的内容,里面的文件包含了不同类别目标的训练数据集与验证数据集图片名称
  3.  JPEGImages :原图片
  4.  SegmentationClass :用于语义分割
  5.  SegmentationObject :用于语义分割

【操作1】在进入 ImageSets 文件夹后,我们可以发现里面有三个按竞赛分类的文件夹,其中 Main 文件夹是需要我们在做 目标检测 时重点关注的:

【操作2】在进入 Main 文件夹后,可以看到有 train.txt 训练数据集、 val.txt 验证数据集和 trainval.txt 训练与验证数据集三类。 

【操作3】在 PyCharm 中打开 Annotations 标注文件夹中的任意 .xml 文件,查看文件内容:

【操作4】可以借助 Gifgit 网站来验证 .xml 文件中 xmin 、ymin 、xmax 、ymax 所确定的标注框的位置。

三、COCO 数据集

COCO 官网:COCO - Common Objects in Context

【补充】VOC 数据集和 COCO 数据集是使用较多的数据集,COCO 数据集比 VOC 数据集大,适用于大型项目。

1、下载 COCO 数据集

我们通常使用 COCO 2017 数据集,具体的下载地址可以参考下表,推荐使用迅雷下载:

        2017 Train Images 训练集        http://images.cocodataset.org/zips/train2017.zip
        2017 Val Images 验证集        http://images.cocodataset.org/zips/val2017.zip
        2017 Test Images 测试集        http://images.cocodataset.org/zips/test2017.zip
        2017 训练集与验证集的对应标注        http://images.cocodataset.org/annotations/annotations_trainval2017.zip

因为我进入 COCO 官网后加载不出 DownLoad 页面,所以我只能根据官网提供的 GitHub 找到数据集的下载地址:

2、介绍 COCO 数据集

由于电脑存储空间的限制,我只下载了 COCO 2017 的验证集和对应标注,标注文件夹的结构大致如下:

由于 intances_val2017.json 文件内容比较多,所以我选用土堆的视频教程的截图来讲解两个示例,相关文字已经展示在图中,不再赘述。

【示例1】重点关注 images 和 annotations 两部分的内容,annotations 中的 image_id 与 images 中的 id 相对应。

【示例2】上面讲的是单个物体的 json 内容,现在来讲多个物体的 json 内容,多个物体可以分 多个单物体 群体 两种形式,需要关注 iscrowd 字段和语义分割 segmentation 中的 counts 字段。 

四、在线标注数据集

1、Make Sense

Make Sense 官网:Make Sense

【操作1】在 Make Sense 官网点击 Get Started 快速开始,将准备的 Images 上传至平台。 

【操作2】为导入的 Images 添加标签 Labels,可以使用 + 逐个添加标签,也可以 Load labels from file 一次性添加标签。

【操作3】对导入的 Images 进行标注,可以手动进行标注,也可以使用已经训练好的模型进行标注。

 这是使用矩形框进行手动框选和标注:

这是使用已经训练好的 COCO SSD 模型进行标注:

【操作4】将 Images 的标注导出,在 Actions 中选择 Export Annotations ,导出为包含 VOC XML 格式文件的压缩包。

2、CVAT

 CVAT 官网:Computer Vision Annotation Tool

【补充】与 Make Sense 官网相比,CVAT 官网更适合团队协作,更适合大型项目。 

【操作1】在 CVAT 网站创建新项目,命名为 Example ,再添加若干 Label 标签,包括但不限于 Person 、Cat 、Airplane 等。

【操作2】在 Example 项目中新建任务,命名为 1-4 ,导入若干图片。

【操作3】在 CVAT 中,我们可以用现成的 Model 对图片进行标注,具体如图所示,我选用的是 YOLO v7 模型,当然,我们也可以手动标注哈!

【操作4】在标注玩所有图片后,点击 Menu - Export job dataset 导出 COCO 数据集,这里我们可以看到 CVAT 官网提供导出的数据集类型比较多~

【操作5】在 PyCharm 中打开刚刚导出的 COCO 数据集的 json 文件,点击 Code - Reformat Code 可以规范 json 格式,方便我们查看文件内容。

五、本地标注数据集

1、精灵标注助手

精灵标注助手下载地址:精灵标注助手-人工智能数据集标注工具

【操作1】点击左侧工具栏的 矩形框 ,对图片进行手动框选,然后在右侧选择标注信息,最后点击底部的  就完成了对该图片的标注。

【操作2】 点击左侧的工具栏的 导出 ,选择输出方式为 pascal-voc 导出数据集。

六、论 Python 的元组、字典与数组

 在用 PyTorch 加载 COCO 数据集之前,我们需要先来了解一下 Python 的元组、字典与数组,这可以帮助我们更好地看懂【七】【八】的代码。

# 元组 a = (1, 2), a[1] == 1
# 字典 b = {'username': 'Vin', 'sex': 'man', 'age': 23}, b['username'] == 'Vin'
# 数组 c = [1, 2, 3], c[1] == 2a = (1, 2)
b = {'username': 'Vin', 'sex': 'man', 'age': 23}
c = [1, 2, 3]print(a[0])             # [Run] 1
print(b['username'])    # [Run] Vin
print(c[1])             # [Run] 2

七、用 PyTorch 加载 COCO 数据集

torchvision.datasets.CocoCaptions 官方文档:CocoCaptions — Torchvision 0.16 documentation

torchvision.datasets.CocoDetection 官方文档:CocoDetection — Torchvision 0.16 documentation 

【操作1】如上图所示,在 PyCharm 中,我们用 PyTorch 加载 COCO 数据集前,需要先安装 pycocotools ,具体操作如下:

  1.  安装 cython :pip install -U cython
  2.  安装 pycocotools :pip install pycocotools-windows

【操作2】创建 COCO 数据集 coco_dataset ,通过 print 打印可以发现它由两部分构成的元组,第一部分类似于 images ,第二部分类似于 annotations

【操作3】对代码进行调试,我们可以借助 Evaluate 工具查看 coco_dataset[0] 的具体结构,不难发现其第二部分是由多个字典构成的,重点关注 bbox

【操作4】在上面的基础上,我们将 coco_dataset[0] 元组的两部分分别赋给 image info

【操作5】遍历 info 依次取出各个 annotation ,将 annotation 字典中 bbox 的对应值分别赋给 左上角 右下角 的点坐标,以确定图中 标注框 的位置。

【完整代码】 

import torchvision
from PIL import ImageDrawcoco_dataset = torchvision.datasets.CocoDetection(root='E:\\迅雷下载\\COCO2017\\val2017',annFile='E:\\迅雷下载\\COCO2017\\annotations\\instances_val2017.json')
image, info = coco_dataset[0]
# image.show()image_handler = ImageDraw.ImageDraw(image)for annotation in info:x_min, y_min, width, height = annotation['bbox']color = (255, 255, 255)image_handler.rectangle((x_min, y_min, x_min + width, y_min + height), outline=color)image.show()

 

八、用 PyTorch 读取自己的 COCO 数据集 

【说明】在这个环节,我们需要先借助在线标注数据集的网站,如 Make Sense 或 CVAT ,导入图片,进行矩形框框选,最后导出自己的 COCO 数据集。 

【操作1】在 CVAT 网站创建新项目,命名为 MyDataset_COCO ,再添加若干 Label 标签,包括但不限于 Cat 、Dog、Car 等。

【操作2】在 MyDataset_COCO 项目中新建任务,命名为 Task1,导入若干图片。

【操作3】 在 Task1 任务页面,点击对应的 Job 进入工作页面,对导入的图片依次进行手动标注,最后导出为 COCO 数据集。

【操作4】在 PyCharm 中编写相关代码,用 PyTorch 读取自己的 COCO 数据集,其实就是在【六】的基础上改了文件的路径。

import torchvision
from PIL import ImageDrawcoco_dataset = torchvision.datasets.CocoDetection(root='E:\\迅雷下载\\temp\\CVAT-COCO\\pic',annFile='E:\\迅雷下载\\temp\\CVAT-COCO\\annotations\\mydataset_coco.json')
image, info = coco_dataset[2]
# image.show()image_handler = ImageDraw.ImageDraw(image)for annotation in info:x_min, y_min, width, height = annotation['bbox']color = (255, 255, 255)image_handler.rectangle((x_min, y_min, x_min + width, y_min + height), outline=color)image.show()

 

这篇关于【土堆】目标检测の入门实战——手把手教你使用 Make Sense 和 CVAT 在线标注 VOC 数据集与 COCO 数据集 用 PyTorch 读取自制 COCO 数据集的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/737696

相关文章

网页解析 lxml 库--实战

lxml库使用流程 lxml 是 Python 的第三方解析库,完全使用 Python 语言编写,它对 XPath表达式提供了良好的支 持,因此能够了高效地解析 HTML/XML 文档。本节讲解如何通过 lxml 库解析 HTML 文档。 pip install lxml lxm| 库提供了一个 etree 模块,该模块专门用来解析 HTML/XML 文档,下面来介绍一下 lxml 库

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

关于数据埋点,你需要了解这些基本知识

产品汪每天都在和数据打交道,你知道数据来自哪里吗? 移动app端内的用户行为数据大多来自埋点,了解一些埋点知识,能和数据分析师、技术侃大山,参与到前期的数据采集,更重要是让最终的埋点数据能为我所用,否则可怜巴巴等上几个月是常有的事。   埋点类型 根据埋点方式,可以区分为: 手动埋点半自动埋点全自动埋点 秉承“任何事物都有两面性”的道理:自动程度高的,能解决通用统计,便于统一化管理,但个性化定

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

异构存储(冷热数据分离)

异构存储主要解决不同的数据,存储在不同类型的硬盘中,达到最佳性能的问题。 异构存储Shell操作 (1)查看当前有哪些存储策略可以用 [lytfly@hadoop102 hadoop-3.1.4]$ hdfs storagepolicies -listPolicies (2)为指定路径(数据存储目录)设置指定的存储策略 hdfs storagepolicies -setStoragePo

Hadoop集群数据均衡之磁盘间数据均衡

生产环境,由于硬盘空间不足,往往需要增加一块硬盘。刚加载的硬盘没有数据时,可以执行磁盘数据均衡命令。(Hadoop3.x新特性) plan后面带的节点的名字必须是已经存在的,并且是需要均衡的节点。 如果节点不存在,会报如下错误: 如果节点只有一个硬盘的话,不会创建均衡计划: (1)生成均衡计划 hdfs diskbalancer -plan hadoop102 (2)执行均衡计划 hd