目标检测: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.rhkb.cn/news/253888.html

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

相关文章

C语言--------指针(1)

0.指针&指针变量 32位平台&#xff0c;指针变量是4个字节&#xff08;32bit/84)--------x86 64位平台&#xff0c;指针变量是8个字节&#xff08;64bit/88)--------x64 编号指针地址&#xff1b;我们平常讲的p是指针就是说p是一个指针变量&#xff1b; ************只要…

VR全景技术可以应用在哪些行业,VR全景技术有哪些优势

引言&#xff1a; VR全景技术&#xff08;Virtual Reality Panorama Technology&#xff09;是一种以虚拟现实技术为基础&#xff0c;通过360度全景影像、立体声音、交互元素等手段&#xff0c;创造出沉浸式的虚拟现实环境。该技术不仅在娱乐领域有着广泛应用&#xff0c;还可…

操作系统透视:从历史沿革到现代应用,剖析Linux与网站服务架构

目录 操作系统 windows macos Linux 服务器搭建网站 关于解释器的流程 curl -I命令 名词解释 dos bash/terminal&#xff0c;(终端) nginx/apache&#xff08;Linux平台下的&#xff09; iis&#xff08;Windows平台下的&#xff09; GUI(图形化管理接口&#xff…

基于SpringBoot和PostGIS的震中影响范围可视化实践

目录 前言 一、基础数据 1、地震基础信息 2、全国行政村 二、Java后台服务设计 1、实体类设计 2、Mapper类设计 3、控制器设计 三、前端展示 1、初始化图例 2、震中位置及影响范围标记 3、行政村点查询及标记 总结 前言 地震等自然灾害目前还是依然不能进行准确的预…

日志报错 git -c dif.mnemonicprefix=false -c core.guotepath=false 解决方法

前言: 在进行下面操作前,必须确保,你是否安装了Git。 查看Git 在命令行窗口中输入`git --version`: 如果这个命令成功显示了Git的版本信息,这表明Git已经被安装。 1. 使用Sourcetree SourceTree 是 Windows 和Mac OS X 下免费的 Git 和 Hg 客户端…

vite项目配置根据不同的打包环境使用不同的请求路径VITE_BASE_URL,包括报错解决

vite环境配置可以看官方文档&#xff1a;环境变量和模式 | Vite 官方中文文档 创建环境配置文件 在项目根目录下面创建.env和.env.production文件&#xff0c;.env是开发环境使用的&#xff0c;.env.production是生产环境使用的。 .env文件&#xff1a; # 基本环境 VITE_APP…

MySQL篇----第七篇

系列文章目录 文章目录 系列文章目录前言一、水平分区二、分库分表之后,id 主键如何处理三、存储过程(特定功能的 SQL 语句集)前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你…

将xyz格式的GRACE数据转成geotiff格式

我们需要将xyz格式的文件转成geotiff便于成图&#xff0c;或者geotiff转成xyz用于数据运算&#xff0c;下面介绍如何实现这一操作&#xff0c;采用GMT和matlab两种方法。 1.GMT转换 我们先准备一个xyz文件&#xff0c;这里是一个降水文件。在gmt中采用以下的语句实现xyz转grd…

DevOps落地笔记-20|软件质量:决定系统成功的关键

上一课时介绍通过提高工程效率来提高价值交付效率&#xff0c;从而提高企业对市场的响应速度。在提高响应速度的同时&#xff0c;也不能降低软件的质量&#xff0c;这就是所谓的“保质保量”。具备高质量软件&#xff0c;高效率的企业走得更快更远。相反&#xff0c;低劣的软件…

Linux的进程信号

注意&#xff1a;首先需要提醒一个事情&#xff0c;本节提及的进程信号和下节的信号量没有任何关系&#xff0c;请您区分对待。 1.信号概念 1.1.生活中的信号 我们在生活中通过体验现实&#xff0c;记忆了一些信号和对应的处理动作&#xff0c;这意味着信号有以下相关的特点&…

Pandas文本数据处理大全:类型判断、空白字符处理、拆分与连接【第67篇—python:文本数据】

文章目录 Pandas文本数据处理大全&#xff1a;类型判断、空白字符处理、拆分与连接1. 判断文本数据类型2. 去除空白字符3. 文本数据拆分4. 文本数据连接5. 文本数据替换6. 文本数据匹配与提取7. 文本数据的大小写转换8. 文本数据的长度计算9. 文本数据的排序10. 文本数据的分组…

大数据企业应用场景分析

目录 一、企业分析 1.1 企业领域维度分析 1.2 技术服务型维度分析 1.3 细分领域维度分析 二、大数据应用场景 2.1 数据分析 2.2 智能推荐 2.3 产品/流程优化 2.4 异常监测 2.5 智能管理 2.6 人工智能和机器学习 三、总结 前言&#xff1a;想讲清楚大数据应用对企业…

(4)【Python数据分析进阶】Machine-Learning模型与算法应用-回归、分类模型汇总

线性回归、逻辑回归算法应用请参考: https://codeknight.blog.csdn.net/article/details/135693621https://codeknight.blog.csdn.net/article/details/135693621本篇主要介绍决策树、随机森林、KNN、SVM、Bayes等有监督算法以及无监督的聚类算法和应用PCA对数据进行降维的算法…

C语言笔试题之实现C库函数 strstr()(设置标志位)

实例要求&#xff1a; 1、请你实现C库函数strstr()&#xff08;stdio.h & string.h&#xff09;&#xff0c;请在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标&#xff08;下标从 0 开始&#xff09;&#xff1b;2、函数声明&#xff1a;int strStr(char* h…

ubuntu20安装mongodb

方法一&#xff1a;直接安装(命令是直接从mongo官网Install MongoDB Community Edition on Ubuntu — MongoDB Manual复制的&#xff09; cat /etc/lsb-release sudo apt-get install -y gnupg curl curl -fsSL https://www.mongodb.org/static/pgp/server-7.0.asc | \sudo gp…

小程序中封装下拉选择框

小程序中没有现成的下拉选择组件&#xff0c;有个picker组件&#xff0c;但是是底部弹出的&#xff0c;不满足我的需求&#xff0c;所以重新封装了一个。 封装的下拉组件 html部分&#xff1a; <view class"select_all_view"><!-- 内容说明&#xff0c;可…

中小型网络系统总体规划与设计方法

目录 1.基于网络的信息系统基本结构 2.网络需求调研与系统设计原则 3.网络用户调查 4.网络节点地理位置分布情况 5.网络需求详细分析 6.应用概要分析 7.网络工程设计总体目标与设计原则 8.网络结构与拓扑构型设计方法 9.核心层网络结构设计 10.接入核心路由器 11.汇聚…

513. 找树左下角的值 - 力扣(LeetCode)

题目描述 给定一个二叉树的 根节点 root&#xff0c;请找出该二叉树的 最底层 最左边 节点的值。 假设二叉树中至少有一个节点。 题目示例 输入: root [2,1,3] 输出: 1 解题思路 深度优先搜索 使用 depth 记录遍历到的节点的深度&#xff0c;result 记录深度在 depth 的最…

幻兽帕鲁mac可以玩吗?

《幻兽帕鲁》&#xff08;英文&#xff1a;Palworld&#xff09;是一款近期在 Steam 爆红的动作冒险生存游戏&#xff0c;游戏设置在一个居住着「帕鲁」的开放世界中&#xff0c;玩家可以战斗并捕捉帕鲁&#xff0c;也能用它们来建造基地、骑乘和战斗。 不过目前《幻兽帕鲁》仅…

Appium使用初体验之参数配置,简单能够运行起来

一、服务器配置 Appium Server配置与Appium Server GUI&#xff08;可视化客户端&#xff09;中的配置对应&#xff0c;尤其是二者如果不在同一台机器上&#xff0c;那么就需要配置Appium Server GUI所在机器的IP&#xff08;Appium Server GUI的HOST也需要配置本机IP&#xf…