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

创建新的数据集范式

尚未完成
想创建一个新的数据集,基于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_init

class BaseDataset:
    METAINFO
    _fully_initialized
    def __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

### OpenMMLab框架在Windows上的安装与配置 #### 选择合适的环境设置工具 为了简化依赖管理和虚拟环境创建,推荐使用Anaconda作为Python包管理器和环境管理系统。这有助于避免版本冲突并保持工作区整洁。 #### 创建独立的工作环境 通过命令提示符或者PowerShell执行如下指令来建立一个新的Conda环境,命名为`openmmlab_env`,其中包含了Python解释器以及必要的基础库[^2]: ```bash conda create --name openmmlab_env python=3.8 -y ``` 激活新建的环境以便后续操作在此环境中进行: ```bash conda activate openmmlab_env ``` #### 安装PyTorch及相关CUDA工具包 考虑到性能优化的需求,建议依据个人硬件条件挑选相匹配版本的PyTorch及其对应的CUDA扩展程序。对于大多数现代显卡而言,可以采用以下方式快速部署最新稳定版PyTorch加上CUDA支持(假设使用的是CUDA 11.x): ```bash conda install pytorch torchvision torchaudio cudatoolkit=11.3 -c pytorch ``` #### 获取MMCV源码仓库 由于MMCV是整个OpenMMLab生态系统的基石,因此有必要先克隆官方GitHub存储库至本地机器上,并按照指示完成编译过程。注意要确保已预先安装Git客户端才能顺利拉取代码文件: ```bash git clone https://github.com/open-mmlab/mmcv.git cd mmcv pip install -e . ``` #### 下载目标子项目 根据具体应用场景选取相应的OpenMMLab组件下载下来,比如专注于图像分割任务的话可以选择MMSegmentation。同样地利用Git获取远程资源之后再依照文档说明实施进一步的操作步骤[^3]: ```bash git clone https://github.com/open-mmlab/mmsegmentation.git cd mmsegmentation pip install -r requirements/build.txt pip install -e . ``` 验证安装无误后即可着手准备实验数据集、调整参数设定开展研究活动了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值