[OpenMMLab]创建新的数据集格式

news/2024/4/26 1:55:26/文章来源:https://blog.csdn.net/LY_970909/article/details/129233350

创建新的数据集范式

尚未完成
想创建一个新的数据集,基于coco建立新的数据集,首先了解coco数据集的接口以及定义。

注意,pipeline与json文件,json文件应该是原始数据重构得到的标注文件,不要在原始数据中对数据做修改,而在pipeline中修改json文件的标注内容。

obj01 ape
obj02 benchvise
obj03  bowl
obj04 cam
obj05 can
obj06 cat
obj07 cup
obj08 driller
obj09 duck
obj10 eggbox
obj11 glue
obj12 Holepuncher
obj13 iron
obj14 lamp
obj15 phone

由于linemod_preprocessed中已定义的训练数据集过少,所以将train.txt与test.txt互换

为复现yolo6d,将采用linemod_proprecessed数据集,由于linemod bop与linemod_proprecessed文件结构不同,为了不对原文件做出改动,所以将分成两个制作json脚本;

一共八个角点,分别为:

[[min_x, min_y, min_z], [min_x, min_y, max_z],
[min_x, max_y, min_z], [min_x, max_y, max_z],
[max_x, min_y, min_z], [max_x, min_y, max_z],
[max_x, max_y, min_z], [max_x, max_y, max_z]]

一共15个模型信息,为了节省内存损耗,在使用ply信息时,使用map来对ply文件进行索引。

base_dataset

def force_full_initclass BaseDataset:METAINFO_fully_initializeddef __init__() 									# 构造函数def get_data_info(self, idx)					# 根据idx返回data_list数据信息def full_init									# def metainfo(self)								# 获取_metainfo信息def parse_data_info(self, raw_data_info:dict)*	# 从ann_file中解析标注信息def filter_data									# 过滤def get_cat_ids									# 获取idx对应的类别信息def __getitem__									# 根据idx求索引值def load_data_list(self)**						# 通过ann_file加载标注信息,并格式化格式def _load_metainfo(cls, metainfo)				# 加载self.metainfo信息def _join_prefix(self)							# 将根目录与文件前缀链接def get_subset_(self, indices)					# 将自身变为子数据集def get_subset									# return子数据集def _get_serialized_subset						# 获取序列数据集def _get_unserialized_subset					# 获取无序数据集def _serialize_data								# full_init调用def rand_another								# 获取随机数def prepare_data								# 获得经过pipeline返回的值def __len__										# 数据集长度def _copy_without_annotation					# 对annotation深拷贝

实例化一个dataset

方法一:直接实例化一个类

dataset = YOLO6DDataset(data_root=data_root,ann_file=train_ann_file,data_prefix=dict(img_path='data/02/rgb/'),filter_cfg=None,pipeline=train_pipeline)

方法二:创建一个dict,然后build

dataset = dict(type=YOLO6DDataset,ann_file=train_ann_file,data_prefix=dict(img_path='data/02/rgb/'),filter_cfg=None,pipeline=train_pipeline)dataset = DATASETS.build(dataset)

在初始化数据集中,full_init()有很重要的作用,

  • 通过load_data_list()加载json文件中的信息,该函数仅在full_init中调用
  • 通过filter_data()过滤信息
  • 根据dataset中是否存在_indices,来获取unserialize_data
  • 根据serialize_data,来得到data_bytesdata_address

额外说明:

load_data_list()是对json文件中data_list部分进行处理,通过parse_data_info()将其转为目标形式的data_list

Transform

在得到数据集后,并没有具体的图片信息,为了通过json文件信息dataset.data_list获取实例的图片和标注信息,就需要设定pipeline中的LoadImageFromFileLoad6DAnnotations对结果进行处理。

1、首先要从数据集中得到具体的数据: data_info = dataset.get_data_info(idx)

2、对具体数据进行pipeline处理: dataset.pipleline(data_info)

DATASET的方法中,prepare_data已经包含上述两个流程,所以可以采用:

result = dataset.prepare_data(1)

另外,可以直接索引,在__getitem__中包含了prepare_data方法

dataset[1]

PackInputs

为了能够在不同模块之间传输数据,在对数据处理之后,还需要对输入数据进行打包,即PackInputs

该数据处理最后返回一个dict,其中包括

dict:- 'inputs': 前向传播到model中数据- 'data_sample':打包数据的真值样本
  • inputs就是传输进入的数据,例如一张图;

  • data_sample通过建立DataSampleInstanceData来构建,其中mapping_table中的属性是为了构建InstanceData而定,构件好InstanceData之后,传入DataSample对象中;另外,根据在类初始化的时候所建立的meat_keys,建立metainfo对象,并赋给data_sample

以上为构建PackInputs的流程。其中DataSampleInstanceData需要重写一下,流程如下。

DataSample

父类:BaseDataElement,支持Tensor-like和dict-like操作的基本数据接口

包含的元素可分为两类:datametainfo,其中data一般为任务上的预测结果和真值,另一个metainfo是示例数据,例如img_idimg_shapeimg_path等。

DataSample的初始化

def __init__(self, *, metainfo: Optional[dict] = None, **kwargs) -> None:self._metainfo_fields: set = set()self._data_fields: set = set()if metainfo is not None:self.set_metainfo(metainfo=metainfo)if kwargs:self.set_data(kwargs)

通过set_metainfoset_data来实例化属性,其中_metainfo_fields_data_fields保存实例化的属性名称。

后期需要更改的地方:

关于instances应该有什么

不同任务应该有不同的instance,例如2d检测使用instances,语义分割用seg_instances

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

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

相关文章

大数据处理各组件概念及作用

一、数据采集: 1.1 Flume集群:数据采集工具,如写脚本将不同源端的数据采集后进行数据存储,或推送至Kafka等; 1.2 FTP集群:文件传输工具; 1.3 Kafka集群:消息队列,未避免…

高压放大器在应力波法套筒灌浆密实度检测研究中的应用

实验名称:高压放大器在应力波法套筒灌浆密实度检测研究中的应用研究方向:无损检测测试目的:钢筋套筒灌浆连接技术被广泛应用于装配式建筑节点连接中,但灌浆不密实将导致节点失效的风险。因此,施工中对套筒灌浆的密实度…

Spark 分析计算连续三周登录的用户数

前言:本文用到了窗口函数 range between,可以参考这篇博客进行了解——窗口函数rows between 、range between的使用 创建数据环境 在 MySQL 中创建数据测试表 log_data: create table if not exists log_data( log_id varchar(200) comm…

代码随想录【Day27】| 39. 组合总和、40. 组合总和 II、131. 分割回文串

39. 组合总和 题目链接 题目描述: 给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的数字可以无限制重复被选取。 说明: 所有数字(包括 tar…

taobao.top.secret.bill.detail( 服务商的商家解密账单详情查询 )

¥免费必须用户授权 服务商的商家解密账单详情查询,仅对90天内的账单提供SLA保障。 公共参数 请求地址: HTTP地址 http://gw.api.taobao.com/router/rest 公共请求参数: 公共响应参数: 请求参数 响应参数 点击获取key和secret 请求示例 TaobaoClient…

js 拖动--动态改变div的宽高大小

index.html 如下&#xff1a;&#xff08;可以新建一个index.html文件直接复制&#xff0c;打开运行&#xff09; <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta http-equiv"X-UA-Compatible&qu…

Mybatis源码学习笔记(五)之Mybatis框架缓存机制原理解析

1 Mybatis框架的缓存模块 MyBatis 内置了一个强大的事务性查询缓存机制&#xff0c;它可以非常方便地配置和定制。Mybatis框架中的缓存分为一级缓存和二级缓存&#xff0c;三级缓存基本都要借助自定义缓存或第三方服务来进行实现。但本质上是一样的&#xff0c;都是借助Cache接…

【Python学习笔记】第十九节 Python 面向对象(一)

在现实世界中&#xff0c;随处可见的一种事物就是对象&#xff0c;对象是事物存在的实体&#xff0c;如学生、汽车等。人类解决问题的方式总是将复杂的事物简单化&#xff0c;于是就会思考这些对象都是由哪些部分组成的。通常都会将对象划分为两个部分&#xff0c;即静态部分与…

SSL证书对虚拟主机的用处有哪些?

虚拟主机是指在同一台服务器上&#xff0c;通过不同的域名或IP地址为多个网站提供服务的一种网络主机。而SSL证书则是一种数字证书&#xff0c;它用于加密网站与用户之间的通信&#xff0c;确保数据传输的安全性和完整性。在虚拟主机上&#xff0c;SSL证书有以下几个用处&#…

HiveSql一天一个小技巧:如何巧用分布函数percent_rank()求去掉最大最小值的平均薪水问题

0 问题描述参考链接(3条消息) HiveSql面试题12--如何分析去掉最大最小值的平均薪水&#xff08;字节跳动&#xff09;_莫叫石榴姐的博客-CSDN博客文中已经给出了三种解法&#xff0c;这里我们借助于此题&#xff0c;来研究如何用percent_rank()函数求解&#xff0c;简化解题思路…

深入理解C#的协变和逆变及其限制原因

阅读本文需要的一些前置知识&#xff1a; C#基本语法、C#的泛型使用、C#的运行过程 由于协变和逆变存在一些细节&#xff0c;在阅读时请注意“接口”和“类型”的差异&#xff0c;此外&#xff0c;文中有可能在不同的语境中将“结构体”和“值类型”混用&#xff0c;但表达的同…

深入浅出1588v2(PTP)里的时间同步原理

1.时间同步1.1 单步同步(OneStep)单步同步最为简单&#xff0c;master向slave发送一个sync的同步包&#xff0c;同步包里带有这条信息发送时master的当前时间t1&#xff0c;假如这条信息从master传输到slave需要的传输时间是D&#xff0c;那么slave收到信息时&#xff0c;maste…

BIM小技巧丨关于如何在Revit明细表中显示门窗面积

在明细表中显示门窗面积(以门明细表为例)在新建一个门明细表后&#xff0c;可以发现在Revit中不能直接使用明细表统计门窗面积。 这时&#xff0c;可以通过使用添加“计算值”的方式来处理&#xff0c;得到如下图所示&#xff0c;两种不同的面积统计结果&#xff1a; 除此之外&…

前端基础之CSS扫盲

文章目录一. CSS基本规范1. 基本语法格式2. 在HTML引入CSS3. 选择器分类二. CSS常用属性1. 文本属性2. 文本格式3. 背景属性4. 圆角矩形和圆5. 元素的显示模式6. CSS盒子模型7. 弹性布局光使用HTML来写一个前端页面的话其实只是写了一个大体的框架, 整体的页面并不工整美观, 而…

ledcode【用队列实现栈】

目录 题目描述&#xff1a; 解析题目 代码解析 1.封装一个队列 1.2封装带两个队列的结构体 1.3封装指向队列的结构体 1.4入栈函数实现 1.5出栈函数实现 1.6取栈顶数据 1.7判空函数实现 题目描述&#xff1a; 解析题目 这个题我是用c语言写的&#xff0c;所以队列的pu…

JavaSE-3 Java运行原理

一、Java的运行过程 &#x1f34e;Java程序运行时,必须经过编译和运行两个步骤。 首先将后缀名为.java的源文件进行编译,最终生成后缀名为.class的字节码文件。然后Java虚拟机将字节码文件进行解释执行,并将结果显示出来。具体过程如下图所示。 &#x1f349;Java程序的运行过…

【Python数据挖掘入门】2.2文本分析-中文分词(jieba库cut方法/自定义词典load_userdict/语料库分词)

中文分词就是将一个汉字序列切分成一个一个单独的词。例如&#xff1a; 另外还有停用词的概念&#xff0c;停用词是指在数据处理时&#xff0c;需要过滤掉的某些字或词。 一、jieba库 安装过程见&#xff1a;https://blog.csdn.net/momomuabc/article/details/128198306 ji…

数字IC手撕代码--小米科技(除法器设计)

前言&#xff1a; 本专栏旨在记录高频笔面试手撕代码题&#xff0c;以备数字前端秋招&#xff0c;本专栏所有文章提供原理分析、代码及波形&#xff0c;所有代码均经过本人验证。目录如下&#xff1a;1.数字IC手撕代码-分频器&#xff08;任意偶数分频&#xff09;2.数字IC手撕…

原始GAN-pytorch-生成MNIST数据集(代码)

文章目录原始GAN生成MNIST数据集1. Data loading and preparing2. Dataset and Model parameter3. Result save path4. Model define6. Training7. predict原始GAN生成MNIST数据集 原理很简单&#xff0c;可以参考原理部分原始GAN-pytorch-生成MNIST数据集&#xff08;原理&am…

记一次线上es慢查询导致的服务不可用

现象 某日线上业务同学反馈订单列表查询页面一直loding&#xff0c;然后提示请求超时&#xff0c;几分钟之后恢复正常 接到报障之后&#xff0c;马上根据接口URL&#xff0c;定位到了请求链路&#xff0c;发现是es查询超时&#xff0c;这里我们的业务订单表数据是由几百万的&a…