【OpenCOOD源码阅读1】—————— build_dataset在干啥?

专栏封面

  • 📛📛📛 所属专栏:【OpenCOOD源码阅读】
  • 🍺🍺🍺 作  者:【帅气的柳】
  • 🍕🍕🍕 个人简介: 我是一名计算机专业的研究生,目前研究方向是多智能体协同感知,喜欢Python 算法等,专注分享技术!
  • 🍓🍓🍓 你来看我啦!希望你能从我的博客中学习到知识,一起进步。为中国计算机添砖JAVA!!!🔆🔆🔆

    您的点赞、关注、收藏、评论是对我最大的鼓励,非常感谢 感谢 感谢!!!重要的事情说三遍。😆😆😆

前言

什么是Opencood框架

Opencood这个框架可能比较小众,主要用于自动驾驶的多智能体协作感知任务。里面集成了许多SOTA的方法。这个系列主要是想和大家一起读懂Opencood框架的整体流程,方便以后能在此基础上写自己的多智能体协同感知算法。

本篇博客主要内容

了解train.py中的build_dataset函数到底在干什么???总结一句话,build_dataset构建好数据集的整个结构,方便后续读入数据集。

数据集构建过程

train.py文件中,数据集的构建过程。

build_dataset—>IntermediateFusionDatasetWithEarlyFusion---->build_preprocessor------>SpVoxelPreprocessor

uild_dataset—>IntermediateFusionDatasetWithEarlyFusion---->build_postprocessor------>VoxelPostprocessor

最重要: uild_dataset--->IntermediateFusionDatasetWithEarlyFusion---->basedataset

build_dataset

数据集构建的起点在 train.py 中的 build_dataset,该函数会传入三个参数,意思都很明确这里就不过多的介绍。

build_dataset函数是根据配置文件中的fusion.core_method字段选择对应的数据集处理函数,其中__all__中包含的就是对应关系的字典。build_dataset最后返回的是一个对象,在我这个代码中是IntermediateFusionDatasetWithEarlyFusion对象。

__all__ = {
   
   
    'LateFusionDataset': LateFusionDataset,
    'EarlyFusionDataset': EarlyFusionDataset,
    'IntermediateFusionDataset': IntermediateFusionDataset,
    'IntermediateFusionDatasetV2': IntermediateFusionDatasetV2,
    'IntermediateFusionDatasetWithEarlyFusion': IntermediateFusionDatasetWithEarlyFusion,
    'IntermediateFusionDatasetWithEarlyFusionv2': IntermediateFusionDatasetWithEarlyFusionv2
}
def build_dataset(dataset_cfg, visualize=False, train=True):
    dataset_name = dataset_cfg['fusion']['core_method']
    error_message = f"{
     
     dataset_name} is not found. " \
                    f"Please add your processor file's name in opencood/" \
                    f"data_utils/datasets/init.py"
    assert dataset_name in ['LateFusionDataset', 'EarlyFusionDataset',
                            'IntermediateFusionDataset', 'IntermediateFusionDatasetV2',
                            'IntermediateFusionDatasetWithEarlyFusion',
                            'IntermediateFusionDatasetWithEarlyFusionv2'], error_message

    dataset = __all__[dataset_name](
        params=dataset_cfg,
        visualize=visualize,
        train=train
    )

    return dataset

IntermediateFusionDatasetWithEarlyFusion

由于IntermediateFusionDatasetWithEarlyFusion类中代码太多了,这里先介绍几个关键的。

1. __init__:进行类的初始化,实例化一些点云处理函数,如pre_processor和post_processor等
2. __getitem__:根据idx获取得到对应的数据
3. collate_batch_train和collate_batch_test的作用一样,都是将多个数据样本整合成一个批次,在DataLoader中使用collate_fn=opencood_train_dataset.collate_batch_train。

在调用build_dataset的时候,除了__init__被执行以外,剩下的三个函数都未执行。

# -*- coding: utf-8 -*-
# Author: Runsheng Xu <rxx3386@ucla.edu>
# License: TDG-Attribution-NonCommercial-NoDistrib

"""
Dataset class for intermediate fusion
"""
# 定义dataset数据集和预处理和后处理函数
class IntermediateFusionDatasetWithEarlyFusion(basedataset.BaseDataset):
    """
    This class is for intermediate fusion where each vehicle transmit the
    deep features to ego.
    """
    def __init__(self, params, visualize, train=True):
        super(IntermediateFusionDatasetWithEarlyFusion, self). \
            __init__(params, visualize, train)

        # if project first, cav's lidar will first be projected to
        # the ego's coordinate frame. otherwise, the feature will be
        # projected instead.
        self.proj_first = True
 
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值