
- 📛📛📛 所属专栏:【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

最低0.47元/天 解锁文章
8万+

被折叠的 条评论
为什么被折叠?



