动手学深度学习——数据集

news2026/4/28 6:28:14
1. 前言在前面的内容中我们已经学习了什么是物体检测什么是边界框边界框如何表示目标的位置但是仅仅理解这些概念还不够。如果想真正训练一个物体检测模型我们还必须解决一个核心问题训练数据从哪里来标签又该怎么组织这就引出了本节要学习的内容物体检测数据集Dataset。在图像分类任务中一个样本通常只对应一个类别标签比如这张图片是猫这张图片是狗但在物体检测中情况明显更复杂。因为一张图像中可能包含多个目标而每个目标不仅有类别还要有对应的边界框位置。所以检测数据集的组织方式比分类数据集复杂得多。这一节我们就来学习目标检测数据集长什么样图像和标签是如何对应的标签中通常包含哪些信息《动手学深度学习》中是如何读取检测数据集的2. 为什么物体检测需要专门的数据集格式在分类任务中标签通常非常简单一个数字就够了。例如0 表示猫1 表示狗2 表示汽车模型只需要学习“输入图像 → 输出类别”即可。但是在目标检测中模型需要完成两件事判断目标是什么判断目标在哪里所以一个标签已经不再只是一个类别编号而通常要同时包含目标类别边界框坐标如果一张图中有多个目标那么标签中还需要记录多个目标的信息。也就是说目标检测数据集必须能够描述一张图片中有几个目标每个目标属于什么类别每个目标的位置坐标是多少这就是为什么检测任务需要更复杂的数据组织形式。3. 目标检测数据集的基本组成一个完整的目标检测数据集通常由两部分组成3.1 图像文件也就是原始图片例如img1.jpgimg2.jpgimg3.jpg这些图片中包含我们要检测的目标。3.2 标注文件标注文件记录图片中的真实目标信息也就是常说的ground truth真实标注。对于每个目标通常需要标注类别名称或类别编号边界框位置例如一张图片中有一只狗和一只猫那么对应标注可能类似于[ [dog, x_min, y_min, x_max, y_max], [cat, x_min, y_min, x_max, y_max] ]这就表示图片中有两个目标第一个是狗对应一个边界框第二个是猫对应另一个边界框4. 目标检测标签通常长什么样为了便于训练检测标签往往会写成结构化格式。常见形式包括XMLJSONTXTCSV不同数据集格式不一样但核心信息其实都类似。4.1 VOC 风格Pascal VOC 常用 XML 文件保存标注。每张图片对应一个 XML 文件里面记录图片大小每个目标的类别每个目标的边界框坐标例如一个目标大致会标成类别dogxmin60ymin45xmax378ymax5164.2 COCO 风格COCO 数据集通常用 JSON 文件统一保存标注信息。它不仅保存类别和边界框还可能保存segmentation分割信息area目标面积iscrowd是否为密集对象COCO 的组织更复杂但功能也更强。4.3 YOLO 风格YOLO 系列常用 TXT 文件保存标签通常每张图对应一个.txt文件。每一行表示一个目标格式一般是class_id x_center y_center width height这里的坐标通常会做归一化处理即缩放到 0 到 1 之间。这种格式非常紧凑也便于训练。5. 李沐课程中使用的数据集形式在《动手学深度学习》的物体检测部分李沐老师为了便于教学没有一开始就上特别复杂的 VOC 或 COCO而是先用了一个比较小、比较容易理解的数据集示例。这类教学数据集的特点一般是数据量不大便于快速读取标签结构清晰适合演示检测数据的基本组织方式它的核心目的不是追求工业级规模而是帮助我们理解一张图像是如何与多个边界框标签对应起来的。在教学中往往会将图像路径和边界框标签通过表格、列表或者字典形式进行管理。例如某个样本可能包含图片文件名一个或多个目标类别每个目标的边界框坐标6. 物体检测数据集和分类数据集的根本区别这是很容易考察、也很适合写进博客的一点。6.1 分类数据集分类数据集通常是(图片, 类别标签)例如(cat.jpg, 0) (dog.jpg, 1) (car.jpg, 2)也就是说一张图通常只对应一个标签。6.2 检测数据集检测数据集通常是(图片, 多个目标的类别 多个边界框)例如(img.jpg, [ [class1, x1, y1, x2, y2], [class2, x1, y1, x2, y2] ])这表示同一张图中可能有多个目标。所以检测数据集相比分类数据集的核心难点就在于标签不再是单个值每张图对应的目标数量不固定每个目标都要有类别和位置7. 一个简单的检测数据集示意为了更好理解我们可以看一个简单例子。假设有一张图片catdog.jpg其中有两只动物一只狗一只猫那么它的标注可以写成[ [dog, 60, 45, 378, 516], [cat, 400, 112, 655, 493] ]其中dog表示目标类别(60, 45, 378, 516)表示狗的边界框cat表示另一个目标类别(400, 112, 655, 493)表示猫的边界框这个例子已经能很好说明检测数据集的本质一张图片对应的不再是一个类别而是一组“类别 位置”的组合。8. 数据集读取为什么重要很多初学者会觉得数据集不就是“拿来训练”的吗好像没什么可学的。但实际上深度学习项目里数据读取和标签组织常常决定了整个训练流程能否顺利跑起来。尤其在目标检测中数据集读取至少关系到以下几个问题8.1 图像与标签是否能正确对应比如0001.jpg对应的是不是0001.xml图像路径有没有写错标签文件有没有缺失只要这里出问题训练就会直接报错或者标签错位。8.2 边界框坐标是否正确例如左上角和右下角有没有写反宽高是否为正数坐标是否超出图像范围这些问题都会直接影响模型训练质量。8.3 类别编号是否统一比如cat是否统一映射成 0dog是否统一映射成 1不同文件里的类别顺序是否一致如果类别映射混乱模型训练结果就会完全错误。8.4 不同图片目标数量不同这是检测任务非常典型的特点。有些图片只有 1 个目标有些有 10 个目标所以标签长度并不固定。这就意味着检测数据加载时不能像分类那样简单地直接堆成规则矩阵而要做更灵活的处理。9. 《动手学深度学习》中数据集读取的核心思想虽然教学代码通常不会设计得像工业框架那样复杂但它背后的思想很值得理解。其核心通常包括这几步9.1 读取图像文件先把图片从磁盘加载进来转成张量或者数组形式。9.2 读取对应标签再根据图片编号找到对应的标注信息包括目标类别边界框坐标9.3 将类别和边界框整理成统一格式例如整理成[class_id, x_min, y_min, x_max, y_max]或者[x_min, y_min, x_max, y_max, class_id]具体顺序可以不同但必须统一。9.4 返回训练样本最终一个样本通常会以这样的形式交给模型(图像张量, 标签信息)这里的标签信息可能是一个二维结构因为一张图里可能有多个目标。10. 数据增强与数据集的关系在真正训练检测模型时数据集往往不仅仅是“读出来”就结束了还会配合数据增强Data Augmentation。例如常见增强包括随机裁剪翻转缩放改变颜色Mosaic 拼接但是检测任务中的数据增强比分类更复杂原因在于图像变了边界框也必须跟着一起变。比如图片缩放后框坐标也要按比例缩放图片左右翻转后框的位置也要重新计算图片裁剪后框可能被截断甚至消失所以检测数据集处理不只是“读图”更是“图像与标签同步变换”的过程。11. 为什么高质量数据集对检测任务尤其重要在目标检测里数据质量的重要性甚至比很多人想象得还高。因为模型要同时学两件事识别类别回归位置这意味着只要标签稍微不准影响就会比分类任务更明显。例如边界框画得过大会让模型学到错误背景边界框画得过小会截掉目标关键信息类别标签错了会直接误导模型漏标目标会让模型以为某些真实目标是背景所以在检测任务中常常有一句很实用的话垃圾标注喂不出好检测器。12. 本节总结这一节我们学习了物体检测中的“数据集”基础知识核心内容可以总结为以下几点。12.1 检测数据集比分类数据集复杂分类通常是一张图对应一个类别而检测是一张图对应多个目标每个目标都有类别和边界框。12.2 检测标签必须同时描述“是什么”和“在哪里”也就是类别信息位置信息这两部分缺一不可。12.3 常见检测数据集格式有多种包括VOC 的 XMLCOCO 的 JSONYOLO 的 TXT它们形式不同但核心都在描述目标类别和边界框。12.4 数据读取是检测训练的重要前提只有图像、类别、边界框三者正确对应模型训练才能顺利进行。13. 学习感悟很多人学习深度学习时更容易把注意力放在模型结构上比如卷积层、注意力机制、YOLO、Transformer。但真正做项目后会发现数据集往往才是最基础、也最容易出问题的一环。尤其在目标检测中数据不只是图片本身还包括复杂的目标标注信息。如果不能先把数据集结构理解清楚后面的锚框匹配、损失函数计算、模型训练过程都会显得很抽象。所以这一节虽然没有复杂公式也没有特别炫的模型结构但它其实是目标检测真正落地的起点。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2509051.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…