目标检测:2如何生成自己的数据集

目录

1. 数据采集

2. 图像标注

3. 开源已标记数据集

4. 数据集划分

参考:


1. 数据采集


数据采集是深度学习和人工智能任务中至关重要的一步,它为模型提供了必要的训练样本和测试数据。在实际应用中,数据采集的方法多种多样,每种方法都有其独特的优势和适用场景。本次将介绍如何标记数据集、

一、什么是数据标注?
数据标注即通过分类、画框、标注、注释等,对图片、语 音、文本、视频等数据进行处理,标记对象的特征,以作为机器学习基础 素材的过程。机器学习需要反复学习以训练模型和提高精度,同时自动驾驶、语言大模型、AI医疗、等各大应用场景都需要标注数据。

二、数据标注的分类
对于数据标注,按照不同的分类标准,可以有不同划分。以标注对象作为分类基础,可将数据标注划分为图像标注、语音标注、文本标注以及视频标注

2. 图像标注

图像标注是一个将标签添加到图像上的过程。图像标注类型包括拉框、语义分割、实例分割、 目标检测、图像分类、关键点、线段标注、文字识别转写、点云标注、属性判断等。图像标注在人工智能与各行各业应用相结合的研究过程中扮演着重要的角色:通过对路况图片中的汽车和行人进行筛选、分类、标框, 可以提高安防摄像头以及无人驾驶系统的识别能力。

  • 通过LabelImg来标注矩形框;
  • 通过LabelMe来进行多边形框的标定;
  • 通过PPOCRLabel来完成文本识别标注任务;
  • 通过roLabelImg来解决旋转目标检测的功能;
  • 通过DarkLabel来完成视频文件的标注及对象的跟踪功能;
  • 通过ELAN完成对视频序列中人物动作的识别以及对应字幕的捕捉;

简单的使用,在线标注数据集的工具Make Sense。

开始标注

打开Make Sense点击Get Start即可开始标注。

进入下一个页面,点击Drop images并选中所有数据集。

点击 Object Detection ,并添加标签,笔者这里以安全帽为例,所以创建标签Helmet。然后手动画出安全帽对应的矩形。

 

               

标注完成后,点击Action->Export Annotation,即可导出Yolo格式的标签。

导出的文件如下所示

<object-class> <x> <y> <width> <height>

其中,object-class为类别,x,y,width和height是指目标的中心点坐标及宽高信息。

3. 开源已标记数据集


使用开源数据集是一种常见且有效的数据采集方法。开源数据集通常已经过标记和验证,可大大节省数据采集和标注的时间和资源成本。例如ImageNet数据集,包含超过1400万张图像,可用于深度学习模型训练。此外,还有像Coco、DOTA数据集等,笔者在这里为大家整理了常见的深度学习开源数据集地址,具体如下,以供参考。

coco数据集:https://cocodataset.org
Pascal Voc数据集:https://pjreddie.com/projects/pascal-voc-dataset-mirror/

猫咪数据集:http://m6z.cn/5TAgbw
宠物图像数据集:http://m6z.cn/5TAgdC
HMDB人类动作识别数据集:http://m6z.cn/6gGlzF
KITTI道路数据集:http://m6z.cn/5xz4OW
MPII人体模型数据集:http://m6z.cn/69aaIe
天池铝型材表面缺陷数据集:http://m6z.cn/61EksR
防护装备-头盔和背心检测:http://m6z.cn/61zarT
Linkopings交通标志数据集:http://m6z.cn/68ldS0
RMFD口罩遮挡人脸数据集:http://m6z.cn/61z9Fv
生活垃圾数据集:http://m6z.cn/6n5Adu
火焰和烟雾图像数据集:http://m6z.cn/6fzn0f
MTFL人脸识别数据集:http://m6z.cn/6fHmaT

4. 数据集划分

有了数据集之后,对齐划分,分别分为train,val,test三块。

创建helmet_dataset/images保存图像文件,创建helmet_dataset/labels保存标记文件。

分割脚本如下:

import os
import shutil
import zipfile
from sklearn.model_selection import train_test_split# 定义目录路径
dataset_directory = r'helmet_dataset'
images_directory = os.path.join(dataset_directory, 'images')
labels_directory = os.path.join(dataset_directory, 'labels')# 定义备份 zip 文件路径
backup_zip_path = os.path.join(dataset_directory, 'helmet_dataset.zip')# 将整个数据集目录压缩备份
with zipfile.ZipFile(backup_zip_path, 'w') as backup_zip:for folder in [images_directory, labels_directory]:for root, dirs, files in os.walk(folder):for file in files:file_path = os.path.join(root, file)backup_zip.write(file_path, os.path.relpath(file_path, dataset_directory))# 所有图像文件名(不带扩展名)的列表
image_filenames = [os.path.splitext(filename)[0] for filename in os.listdir(images_directory) if filename.endswith('.jpg')]# 定义拆分比例
train_ratio = 0.7
validation_ratio = 0.2
test_ratio = 0.1# 执行拆分
train_filenames, test_filenames = train_test_split(image_filenames, test_size=1 - train_ratio)
validation_filenames, test_filenames = train_test_split(test_filenames, test_size=test_ratio/(test_ratio + validation_ratio))# 创建目录并移动文件的函数
def create_and_move_files(file_list, source_folder, destination_folder, file_extension):os.makedirs(destination_folder, exist_ok=True)for filename in file_list:shutil.move(os.path.join(source_folder, filename + file_extension),os.path.join(destination_folder, filename + file_extension))# 为每个集创建目录并移动文件
sets_directories = {'train': os.path.join(dataset_directory, 'train'),'val': os.path.join(dataset_directory, 'val'),'test': os.path.join(dataset_directory, 'test')
}for set_name, file_list in zip(['train', 'val', 'test'], [train_filenames, validation_filenames, test_filenames]):images_set_directory = os.path.join(sets_directories[set_name], 'images')labels_set_directory = os.path.join(sets_directories[set_name], 'labels')create_and_move_files(file_list, images_directory, images_set_directory, '.jpg')create_and_move_files(file_list, labels_directory, labels_set_directory, '.txt')# 删除空的images和labels文件夹
for folder in [images_directory, labels_directory]:if os.path.exists(folder) and not os.listdir(folder):os.rmdir(folder)# 返回备份文件路径和已创建目录的路径
print(backup_zip_path, sets_directories)

创建好的数据集,留待使用,下一次学习如何利用数据集训练。

参考:

目标检测:1预备知识

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

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

相关文章

3.0 Hadoop 概念

本章着重介绍 Hadoop 中的概念和组成部分&#xff0c;属于理论章节。如果你比较着急可以跳过。但作者不建议跳过&#xff0c;因为它与后面的章节息息相关。 Hadoop 整体设计 Hadoop 框架是用于计算机集群大数据处理的框架&#xff0c;所以它必须是一个可以部署在多台计算机上…

Multisim14.0仿真(五十)基于CD4518的计数器设计

一、CD4518简介: CD4518是二、十进制(8421编码)同步加计数器,内含两个单元的加计数器。每单个单元有两个时钟输入端CLK和EN,可用时钟脉冲的上升沿或下降沿触发。可知,若用ENABLE信号下降沿触发,触发信号由EN端输入,CLK端置“0”;若用CL℃K信号上升沿触发,触发信号由C…

《Python 网络爬虫简易速速上手小册》第1章:Python 网络爬虫基础(2024 最新版)

文章目录 1.1 网络爬虫简介1.1.1 重点基础知识讲解1.1.2 重点案例&#xff1a;社交媒体数据分析1.1.3 拓展案例1&#xff1a;电商网站价格监控1.1.4 拓展案例2&#xff1a;新闻聚合服务 1.2 网络爬虫的工作原理1.2.1 重点基础知识讲解1.2.2 重点案例&#xff1a;股票市场数据采…

生物素 PEG4 甲基四嗪,Biotin-PEG4-methyltetrazine,用于标记、追踪和分离特定的分子或细胞

生物素四聚乙二醇甲基四嗪&#xff0c;生物素 PEG4 甲基四嗪&#xff0c;Biotin-PEG4-methyltetrazine&#xff0c;用于标记、追踪和分离特定的分子或细胞 您好&#xff0c;欢迎来到新研之家 文章关键词&#xff1a;生物素四聚乙二醇甲基四嗪&#xff0c;生物素 PEG4 甲基四嗪…

反洗钱_总结

反洗钱基础知识 文章目录 一、反洗钱的相关概念1.1 洗钱1.1.1洗钱(Money Laundering)的由来1.1.2 洗钱的概念1.1.3 洗钱的基本过程 1.2 反洗钱 二、反洗钱国际组织和国际标准2.1 反洗钱国际组织2.2 反洗钱国际标准2.3 中国与FAFT 三、我国反洗钱法律法规四、反洗钱工作主要内容…

2024三掌柜赠书活动第八期:Web3与DAO:下一代互联网演进逻辑

目录 前言关于Web3和DAO关于《Web3与DAO&#xff1a;下一代互联网演进逻辑》编辑推荐内容简介作者简介精彩书评图书目录书中前言/序言《Web3与DAO&#xff1a;下一代互联网演进逻辑》全书速览结束语 前言 随着区块链技术的崛起&#xff0c;Web3和DAO成为了当前互联网领域炙手…

开源Vue UI框架

文章目录 Element UIElement PlusVuetifyiViewView UI PlusQuasarAnt Design VueBuefyvue-materialDevUITinyVuenutuitdesign-vuearco-design-vueNaive UIBootstrapVue Element UI Element UI是一套为开发者、设计师和产品经理准备的基于Vue 2.0的组件库&#xff0c;提供了丰富…

QXlsx Qt操作excel

QXlsx 是一个用于处理Excel文件的开源C库。它允许你在你的C应用程序中读取和写入Microsoft Excel文件&#xff08;.xlsx格式&#xff09;。该库支持多种操作&#xff0c;包括创建新的工作簿、读取和写入单元格数据、格式化单元格、以及其他与Excel文件相关的功能。 支持跨平台…

云服务器也能挂游戏 安卓模拟器

安卓模拟器云服务器 什么是BlueStacks模拟器主机&#xff1f; 特网科技基于Windows操作系统预装了BlueStacks Android模拟器您能够通过Android模拟器安装Android应用程序、如APP游戏、安卓APP、APP游戏等。 我可以在主机上安装应用程序吗&#xff1f; 你可以在BlueStacks模…

力扣292-Nim游戏

Nim游戏 题目链接 解题思路: 棋子数目结局解释0必输1必赢2必赢3必赢4必输无论拿1&#xff0c;2&#xff0c;3&#xff0c;最后一个棋子都会被对手拿走5必赢先拿一个&#xff0c;剩余4个&#xff0c;无论对手怎么拿&#xff0c;最后一个妻子都会被我们拿走6必赢先拿两个&#x…

Pytorch: torch.linspace等间隔数值函数

torch.linspace 是 PyTorch 提供的一个用于生成等间隔数值的函数。具体而言&#xff0c;torch.linspace 会在指定的区间内生成指定数量的等间隔数值。 torch.linspace(start, end, steps100, dtypeNone, layouttorch.strided, deviceNone, requires_gradFalse)参数说明&#x…

斗破年番:七星斗宗地魔老鬼,首战吊打萧炎,毁灭莲逼出千百二老

Hello,小伙伴们&#xff0c;我是拾荒君。 国漫《斗破苍穹年番》第82期超前爆料&#xff0c;在万众瞩目之下&#xff0c;卡点帝再次展现了他的卡点救场技巧。此次&#xff0c;韩枫为了除掉萧炎&#xff0c;以他击杀魔炎谷四位长老为借口&#xff0c;请来了七品斗宗地魔老鬼。更…

STM32定时器中断

定时器可以对输入的时钟进行计数&#xff0c;并在计数值达到设定值时发出中断 定时器就是一个计数器 预分频器&#xff1a;对系统时钟进行分频得到定时器时钟频率 自动重装在值&#xff1a;计数多少个进入中断 基本定时器两个&#xff0c;tim6和7&#xff0c;挂载在apb1 通…

《Python 网络爬虫简易速速上手小册》第6章:Python 爬虫的优化策略(2024 最新版)

文章目录 6.1 提高爬虫的效率6.1.1 重点基础知识讲解6.1.2 重点案例&#xff1a;使用 asyncio 和 aiohttp 实现异步爬虫6.1.3 拓展案例 1&#xff1a;利用 Scrapy 的并发特性6.1.4 拓展案例 2&#xff1a;使用缓存来避免重复请求 6.2 处理大规模数据爬取6.2.1 重点基础知识讲解…

ES6中新增Array.of()函数的用法详解

new Array()方法 ES6为Array增加了of函数用一种明确的含义将一个或多个值转换成数组。因为用new Array()构造数组的时候&#xff0c;是有二意性的。 构造时&#xff0c;传一个参数&#xff0c;实际上是指定数组的长度&#xff0c;表示生成多大的数组。 构造时&#xff0c;传…

QT6调用音频输入输出(超详细)

目录 一、QT6音频调用与QT5的区别 1.QAudioSource代替QAudioInput类 2.QAudioSink代替QAudioOutput类 二、音频操作中Push和Pull的区别 三、依托于Websocket实现实时对讲机 1.AudioIputDevices类 2.AudioOutputDevices类 3.实现的AudioHandler类完整内容 本人实际是要完…

2024机械工程师面试题

1.常用的机械画图软件有哪些 SolidWorks、Pro/e、CATIA、UG、Creo、CAD、inventor。CAXA电子图板. 2.第一视角是___&#xff0c;第三视角是___&#xff1b; 只要区别是&#xff1a;物体所处的位置不同。一般中国都使用第一视角的。 3.气缸属于_____执行元件&#xff0c;电磁…

微信小程序编译出现 project.config.json 文件内容错误

问题描述&#xff1a; 更新微信开发工具后&#xff0c;使用微信开发工具编译时出现project.config.json 文件内容错误。 原因&#xff1a;当前使用的微信开发工具非稳定版本。 解决方法&#xff1a; 在 manifest.json中加入以下代码&#xff1a; "mp-weixin" : …

ubuntu 系统切换root用户

文章目录 切换命令如下sudo 命令sudo -i 命令如果想一直使用root权限&#xff0c;要通过su切换到root用户 ubuntu镜像系统&#xff0c;默认分配的是ubuntu账号&#xff0c;但是我习惯用你root&#xff0c;因为有些命令在ubuntu账号上运行不了&#xff0c;下面来看下如何在 ubun…

Scrapy:Python中强大的网络爬虫框架

Scrapy&#xff1a;Python中强大的网络爬虫框架 在当今信息爆炸的时代&#xff0c;从互联网上获取数据已经成为许多应用程序的核心需求。Scrapy是一款基于Python的强大网络爬虫框架&#xff0c;它提供了一种灵活且高效的方式来提取、处理和存储互联网上的数据。本文将介绍Scrap…