0

0

准备图像AI项目数据集的七个步骤

WBOY

WBOY

发布时间:2023-09-26 23:45:04

|

1619人浏览过

|

来源于51CTO.COM

转载

译者 | 陈峻

重楼 | 审校

不知你是否注意到,数据集可能是机器学习项目中最容易被忽视的部分。在大多数人看来,数据集不过是一些快速拼凑、或已下载的预制图像的集合。而实际上,数据集是任何基于图像的人工智能(AI)项目的基石。对于任何旨在实现高准确性的机器学习项目来说,创建和管理一个平衡且结构合理的数据集,都是至关重要的。

不过,创建一个数据集并不像收集几百张图片那么简单。我们在尝试启动某个AI项目时,很可能会遇到各种隐患。下面,我将和您讨论可用来创建自己的数据集的七个典型步骤,以便您深入了解数据集大小的重要性、可能出现的数据遗漏、以及将数据集转化为数据库等要素。

注意:这些步骤将主要适用于,那些针对包含了图像数据集的对象检测和分类项目。而诸如 NLP 或图形项目等其他项目类型,则需要采用不同的方法。

步骤 1:图像大小

通常情况下,神经网络只能处理特定尺寸的图像,超过阈值的图像会被强制缩小。这意味着在使用数据集之前,我们需要选择适合的神经网络,并相应地调整图像的尺寸

正如您所知,如果将图像尺寸缩小,可能会导致精确度大幅下降,甚至使图像上的小物体消失,从而对整个识别过程造成损害。如下所示,您需要在监控摄像头所拍摄的图像中检测出车牌号码,而车牌只占整个图像的一小部分。因此,当神经网络对图像进行缩小处理时,车牌号码可能会变得非常小,无法被识别到

☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

准备图像AI项目数据集的七个步骤

如下图所示,如果能够了解网络可使用的图像尺寸,将有助于您裁剪出适当的数据集图像。

准备图像AI项目数据集的七个步骤

虽然大多数神经网络可处理的图像尺寸都比较小,但是诸如 Yolo v5x6之类的最新神经网络,则能够处理更大分辨率的图像。例如,Yolo v5xs6就能够处理宽达 1280 像素的图像。

步骤 2:了解的环境

为了确保数据集能够准确反映神经网络在运行过程中所需识别的真实图像,我们在收集数据集时需要注意以下因素:

  1. 摄像头的类型,是智能手机摄像头,还是安全摄像头
  2. 图像的大小
  3. 摄像头的位置,是在室内,还是室外
  4. 天气条件,如光照、雨、雾、雪等。

在清楚了解了神经网络待处理的真实图像后,我们就能够创建一个数据集,来准确地反映那些感兴趣的对象、及其所处的环境。

收集谷歌上的普通图片可能被认为是组建大型数据集最简单、最快捷的方法。然而,这种方法实际上很难达到较高的精确度要求。如下图所示,与真实相机拍摄的图像相比,谷歌或照片数据库中的图像通常经过“美颜”处理

准备图像AI项目数据集的七个步骤

而一个过于“漂亮”的数据集,很可能会导致较高的测试准确率。这意味着,神经网络将仅能在测试数据(从数据集中提纯过的图像集合)上良好运行,但在真实条件下运行不佳,并导致准确率低下。

步骤 3格式和注释

我们需要注意的另一个重要方面是:图片的格式。在开始项目之前,请检查您选择的框架能够支持哪些格式,而您的图片是否能够符合此类要求。虽然当前的框架已能够支持多种图片格式,但是对于 .jfif等格式仍存在问题。

注释数据可以被用来详细地说明边界框、文件名、以及可以采用的不同结构。通常,不同的神经网络和框架,需要不同的注释方法。有些需要包含边界框位置的绝对坐标,有些则需要相对坐标;有些要求每幅图像都附带有一个单独的、包含了注释的.txt 文件,而另一些仅需要一个包含了所有注释的文件。可见,即使您的数据集拥有良好的图像,如果您的框架无法处理注释的话,也将无济于事。

步骤 4:训练和验证子集

为了训练的目的,通常将数据集分为两个子集:

  1. 训练子集- 它是一组图像。神经网络将会在这组图像上进行训练。其占比为图像总数的 70% 80%。
  2. 验证子集- 是用于检查神经网络在训练过程中学习效果的较小图像集。其占比为图像总数的 20% 30% 之间。

准备图像AI项目数据集的七个步骤

通常,神经网络会使用从训练子集中提取到的物体特征,来“学习”物体的外观。也就是说,在一个训练周期结束(历时,epoch)后,神经网络会查看验证子集的数据,并尝试猜测它能够 “看 ”到那些物体。无论是正确的、还是错误的猜测,其结构都能够让神经网络进一步去深入学习。

虽然这种方法已被广泛使用,并被证明能够取得良好的效果,但我们更倾向于采用一种不同的方法,将数据集划分为如下子集:

  1. 训练子集 - 占图像总数的 70%
  2. 验证子集 - 占图像总数的 20%
  3. 测试数据集 - 约占图像总数的10%

准备图像AI项目数据集的七个步骤

由于测试子集包含了神经网络从未见过的数据集中的图像,因此开发人员可以通过该子集来测试模型,以了解其手动运行的效果,以及在处理哪些图像时会遇到困难。换句话说,该子集将有助于在项目启动前,找出神经网络可能犯错的地方,进而避免在项目启动之后,进行过多的重新训练

飞书多维表格
飞书多维表格

表格形态的AI工作流搭建工具,支持批量化的AI创作与分析任务,接入DeepSeek R1满血版

下载

步骤 5:数据遗漏

如果您用来训练机器学习算法的数据中,恰好包含了您试图预测的信息,那么就可能发生数据泄露。如下图所示,从图像识别的角度来看,当训练子集和验证子集中的同一对象的照片非常相似时,就会发生数据泄露。显然,数据遗漏对于神经网络的质量来说是极为不利的。

准备图像AI项目数据集的七个步骤

从本质上说,模型在训练数据集中看到了一幅图像后,会先提取其特征,然后进入验证数据集,进而发现看到的完全相同(或非常相似)的图像。因此,与其说模型在真实学习,不如说它只是在记忆各种信息。有时,这会导致验证数据集上的准确率,高得离谱(例如,可高达 98%),但是在生产实际中的准确率却非常低。

目前最常用的一种数据集分割方法是:将数据随机打乱,然后选取前 70% 的图像放入训练子集,剩下的 30% 则放入验证子集。这种方法就容易导致数据遗漏的产生。如下图所示,我们的当务之急是从数据集中删除所有“重复”的照片,并检查两个子集中是否存在相似的照片。

准备图像AI项目数据集的七个步骤

对此,我们可以使用简单的脚本来自动执行重复删除。当然,您可以调整重复阈值,比如:只删除完全重复的图片、或相似度高达到 90% 的图片等。总的说来,只要删除的重复内容越多,神经网络的生产精度就会越高。

步骤 6:大型数据集数据库

如果您的数据集相当大,例如:超过 10 幅图像、以及具有几十个对象类与子类的话,我们建议您创建一个简单的数据库,来存储数据集信息。这背后的原因其实非常简单:对于大型数据集而言,我们很难跟踪所有的数据。因此,如果不对数据进行某种结构化的处理,我们将无法对其进行准确分析。

通过数据库,您可以快速地诊断数据集,进而发现诸如:特定类别的图片数量过少,会导致神经网络难以识别出对象;类别之间的图片分布不够均匀;特定类别中的谷歌图片数量过多,导致该类别的准确率得分过低等情况。

通过简单的数据库,我们可以包含如下信息:

  1. 文件名
  2. 文件路径
  3. 注释数据
  4. 类数据
  5. 数据源(源自生产环境、还是谷歌等)
  6. 对象类型、名称等对象相关信息

数据库是收集数据集、统计数据不可或缺的工具。它能够帮助我们快速、轻松地查看数据集的平衡程度,以及每个类别中高质量图像的数量(从神经网络的角度来看)。通过类似下面直观呈现的数据,我们可以更快地进行分析,并将其与识别结果进行比较,从而找出准确率低下的根本原因

准备图像AI项目数据集的七个步骤

需要重新写作的内容是:一个值得注意的问题是,准确率低的原因可能是因为图片数量较少或某一类别中谷歌照片的比例较高。通过创建这样的数据库,可以大大减少生产、测试和模型再训练的时间

步骤 7:数据集增强

作为一种用于增加图像数量的技术,数据增强是对数据进行简单或复杂转换的过程,例如通过翻转或样式转化,我们可以提高数据的有效性。而据此获得的有效数据集,则无需经历过多的训练。如下图所示,此类数据转换既可以是简单到仅将图像旋转 90 度,也可以复杂到在图像中添加太阳耀斑、以模仿背光照片或镜头耀斑。

准备图像AI项目数据集的七个步骤

通常,此类增强转化都是自动执行的。例如,我们可以准备一个专门用于数据增强的 Python 库。目前,数据增强有两种类型:

  1. 训练前增强- 在训练过程开始之前,对数据进行扩增,并将其添加到训练子集中。当然,只有在数据集被划分为训练子集和验证子集之后,我们才能进行此类增加,以避免出现前文提到的数据遗漏。
  2. 训练内增强- 采用类似 PyTorch的框架内置图像变换技术。

值得注意的是,将数据集的大小增加十倍,并不会使得神经网络的效率提高十倍。事实上,这反而可能会使网络的性能比以前更差。因此,我们应当只使用与生产环境相关的增强功能。例如,对于被安装在建筑物内的摄像机,在其正常运行的情况下,是不会出现雨淋的。因此我们完全没有必要在图像中添加针对“雨景”的增强。

尽管对于那些希望将AI应用到业务中的人们来说,数据集是最不令人兴奋的部分。但不可否认的是,数据集是任何图像识别项目中的重要部分。而且在大多数图像识别项目中,数据集的管理和整理,往往会花费团队大量的时间。最后,让我们小结一下,该如何通过恰当地处置数据集,以便从AI项目中获得最佳结果:

  1. 裁剪或调整图像的大小,以满足神经网络的要求
  2. 根据天气和照明条件,采集真实图像
  3. 根据神经网络的要求,构建注释
  4. 避免使用所有的图像来训练网络。而需留一部分用于测试
  5. 删除验证数据集中的重复图像,以避免数据遗漏
  6. 创建数据库,以快速诊断数据集
  7. 尽量少用数据增强,来增加图像数量

译者介绍

陈峻(Julian Chen),51CTO社区编辑,具有十多年的IT项目实施经验,善于对内外部资源与风险实施管控,专注传播网络与信息安全知识与经验。

原文标题:7 Steps To Prepare A Dataset For An Image-Based AI Project,作者:Oleg Kokorin

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
页面置换算法
页面置换算法

页面置换算法是操作系统中用来决定在内存中哪些页面应该被换出以便为新的页面提供空间的算法。本专题为大家提供页面置换算法的相关文章,大家可以免费体验。

496

2023.08.14

数据库三范式
数据库三范式

数据库三范式是一种设计规范,用于规范化关系型数据库中的数据结构,它通过消除冗余数据、提高数据库性能和数据一致性,提供了一种有效的数据库设计方法。本专题提供数据库三范式相关的文章、下载和课程。

385

2023.06.29

如何删除数据库
如何删除数据库

删除数据库是指在MySQL中完全移除一个数据库及其所包含的所有数据和结构,作用包括:1、释放存储空间;2、确保数据的安全性;3、提高数据库的整体性能,加速查询和操作的执行速度。尽管删除数据库具有一些好处,但在执行任何删除操作之前,务必谨慎操作,并备份重要的数据。删除数据库将永久性地删除所有相关数据和结构,无法回滚。

2111

2023.08.14

vb怎么连接数据库
vb怎么连接数据库

在VB中,连接数据库通常使用ADO(ActiveX 数据对象)或 DAO(Data Access Objects)这两个技术来实现:1、引入ADO库;2、创建ADO连接对象;3、配置连接字符串;4、打开连接;5、执行SQL语句;6、处理查询结果;7、关闭连接即可。

357

2023.08.31

MySQL恢复数据库
MySQL恢复数据库

MySQL恢复数据库的方法有使用物理备份恢复、使用逻辑备份恢复、使用二进制日志恢复和使用数据库复制进行恢复等。本专题为大家提供MySQL数据库相关的文章、下载、课程内容,供大家免费下载体验。

259

2023.09.05

vb中怎么连接access数据库
vb中怎么连接access数据库

vb中连接access数据库的步骤包括引用必要的命名空间、创建连接字符串、创建连接对象、打开连接、执行SQL语句和关闭连接。本专题为大家提供连接access数据库相关的文章、下载、课程内容,供大家免费下载体验。

329

2023.10.09

数据库对象名无效怎么解决
数据库对象名无效怎么解决

数据库对象名无效解决办法:1、检查使用的对象名是否正确,确保没有拼写错误;2、检查数据库中是否已存在具有相同名称的对象,如果是,请更改对象名为一个不同的名称,然后重新创建;3、确保在连接数据库时使用了正确的用户名、密码和数据库名称;4、尝试重启数据库服务,然后再次尝试创建或使用对象;5、尝试更新驱动程序,然后再次尝试创建或使用对象。

420

2023.10.16

vb连接access数据库的方法
vb连接access数据库的方法

vb连接access数据库方法:1、使用ADO连接,首先导入System.Data.OleDb模块,然后定义一个连接字符串,接着创建一个OleDbConnection对象并使用Open() 方法打开连接;2、使用DAO连接,首先导入 Microsoft.Jet.OLEDB模块,然后定义一个连接字符串,接着创建一个JetConnection对象并使用Open()方法打开连接即可。

478

2023.10.16

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

76

2026.03.11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
麻省理工大佬Python课程
麻省理工大佬Python课程

共34课时 | 5.5万人学习

国外Web开发全栈课程全集
国外Web开发全栈课程全集

共12课时 | 1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号