【MMDetection3D实战5】Dataset 和 model配置文件解析

文章目录

    • 1. Dataset 配置文件解析
      • 1. 1 定义全局变量
      • 1. 1 数据处理pipeline
        • (1) train_pipeline
        • (2) test_pipeline
        • (3) eval_pipeline
      • 1. 2 data 字典的定义
    • 2. model 配置文件解析
      • 2. 1 体素化voxel_layer
      • 2. 2 voxel_encoder
      • 2. 3 middle_encoder
      • 2. 4 2D 检测网络(backbone + neck + detection head)
        • 2.4.1 backone+neck
        • 2.4.2 detection head
      • 2. 5 train_cfg 和 test_cfg
        • 2.5.1 train_cfg
        • 2.5.1 test_cfg

本文以Kitti数据集以及PointPillar 模型的配置文件来举例,详细解析数据集和模型配置相关的内容。

在MMDetection3D(mmdet3d)项目的configs目录下提供了不同版本的各类3d模型配置文件,大概有40多种主流和前沿的3D模型。支持Lidar-based Camera-basedMulti-modal (多模态)3D 目标检测模型以及 3D语义分割模型。模型的配置文件在项目的confgs文件夹中,根据项目需要找到对应的模型,比如pointpillars可以看到mmdet3d帮我们适配了各种版本的pointpillars模型。配置文件中包含了:模型结构数据处理的pipeline训练相关的配置(优化器、超参数、训练验证的轮数以及指标评估)等。

  • 当我们需要训练一个3D模型时,只需要准备好配置文件预训练权重以及自定义数据集即可。其中不同模型训练的配置文件MMDetection3D已经提供了,另外也提供了对应版本的SOTA预训练权重,可到官网进行下载。

  • 配置文件中包含了:模型结构配置数据处理的pipeline训练相关的配置,因此配置文件中它会继承, 通过_base_变量存储需要继承的文件:模型的配置文件dataset的配置文件优化器相关的配置文件、以及runtime的配置文件(定义日志级别、workdir、resume的模型路径等)
    在这里插入图片描述

  • 另外,如果我们自己需要修改配置文件,只需要继承官方提供的配置文件基础上,做一些局部的改动即可,大部分配置都不需要修改,使用起来非常便利。

在这里插入图片描述

  • 整个训练和测试的配置文件,包含了:模型的配置文件dataset的配置文件优化器相关的配置文件、以及runtime的配置文件, 其中模型的配置文件dataset的配置文件是两个最核心的配置文件,因此接下来会重点介绍这两个配置文件。优化器和runtime的配置比较简单,基本看看就明白。

1. Dataset 配置文件解析

KITTI数据集为例进行解析,Dataset的配置文件路径在: configs/_base_/datasets/kitti-3d-3class.py。它定义了:数据采样db_sampler,数据处理的pipeline : train_pipeline、test_pipeline、val_pipeline, 以及data(完整的data处理定义); 还有一些全局变量,如:dataset_type、data_root、class_names、point_cloud_range
在这里插入图片描述

1. 1 定义全局变量

kitti-3d-3clas.py 定义了如下几个全局变量

  • dataset_type: 因为是kitti数据集,所以默认为KittiDataset。也可以是其他数据集,比如 LyftDataset,WaymoDataset,NuScenesDataset, 也可以是自定义的数据集类型。
  • data_root:定义数据存放的跟目录,比如data/kitti/
  • class_names: 数据的类别名,比如KITTI数据集的类型为:[‘Pedestrian’, ‘Cyclist’, ‘Car’]
  • point_cloud_range: 点云覆盖的有效范围,用于过滤点云数据。比如KITTI 对应的范围为: [-50, -50, -5, 50, 50, 3]
  • input_modality: 设定使用的数据对应的模态信息。对于pointpillars,用于lidar点云检测,所以 use_lidar=True
    input_modality = dict(
    use_lidar=True,
    use_camera=False,
    use_radar=False,
    use_map=False,
    use_external=False)
    

1. 1 数据处理pipeline

当代码解析了数据的类型dataset_type, 就会获取点云路径图像路径.pkl格式的标注数据路径,得到了数据的路径和标注之后,对于训练和测试我们需要对点云数据做一定的处理才能送入模型进程训练或推理,数据的pipeline就是用来数据处理的,主要包括train_pipeline(用于处理训练数据)和test_pipeline(默认test和val都使用一样的pipeline)以及eval_pipeline(处理数据,用于评估模型效果)

(1) train_pipeline

train_pipeline是用来处理用于训练的点云数据,脚本如下:

train_pipeline = [dict(type='LoadPointsFromFile',coord_type='LIDAR',load_dim=4,use_dim=4,file_client_args=file_client_args),dict(type='LoadAnnotations3D',with_bbox_3d=True,with_label_3d=True,file_client_args=file_client_args),dict(type='ObjectSample', db_sampler=db_sampler),dict(type='ObjectNoise',num_try=100,translation_std=[1.0, 1.0, 0.5],global_rot_range=[0.0, 0.0],rot_range=[-0.78539816, 0.78539816]),dict(type='RandomFlip3D', flip_ratio_bev_horizontal=0.5),dict(type='GlobalRotScaleTrans',rot_range=[-0.78539816, 0.78539816],scale_ratio_range=[0.95, 1.05]),dict(type='PointsRangeFilter', point_cloud_range=point_cloud_range),dict(type='ObjectRangeFilter', point_cloud_range=point_cloud_range),dict(type='PointShuffle'),dict(type='DefaultFormatBundle3D', class_names=class_names),dict(type='Collect3D', keys=['points', 'gt_bboxes_3d', 'gt_labels_3d'])
]
  • 可以看到pipeline中定义的第一个数据处理操作,就是从文件中读取点云(LoadPointsFromFile),根据我们定义点云路径,把点云文件中存储的nx4的数据读取出来
  • 第二个操作是加载3D标注数据,它会把我们处理好(create_data.py)的标注文件数据读取出来。
  • 然后定义了一个数据增强的操作ObjectSample,也就是会把其他场景中的一些物体的点云,迁移到当前场景的点云数据中,做数据增强。
  • 紧接着ObjectNoise也是一种数据增强操作,对点云数据做一些微小的平移和旋转,增加一些扰动的噪声
  • 然后会对点云数据做一些随机的翻转(RandomFlip3D),以及旋转、缩放和平移操作GlobalRotScaleTrans
  • 紧接着会把我们关注范围以内的点云数据筛选出来(PointsRangeFilter和ObjectRangeFilter),可能点云数据放大、旋转、平移后有些数据就出去了,需要过滤掉。
  • 然后,对点云数据随机打乱顺序
  • 最后将所需要的数据,包括点云,3D 标注框和标签数据打包在一起(Collect3D),形成一个字典,供模型的训练或推理测试。
(2) test_pipeline

测试的pipeline的脚本如下:

test_pipeline = [dict(type='LoadPointsFromFile',coord_type='LIDAR',load_dim=4,use_dim=4,file_client_args=file_client_args),dict(type='MultiScaleFlipAug3D',img_scale=(1333, 800),pts_scale_ratio=1

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

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

相关文章

详解(实现)堆的接口函数

文章目录 堆堆的顺序存储 准备工作创建头文件Heap.h创建源文件Heap.c头文件的包含定义保存堆数据的结构体 初始化销毁堆插入数据向上调整算法图解算法代码 删除堆顶向下调整算法图解代码 取出堆顶数据求堆的数据个数判断堆是否为空全部代码Heap.hHeap.c 再了解堆之前我们先要了…

AI毕业论文降重GPTS,避免AI检测,高效完成论文

视频演示 AI毕业论文降重GPTS,避免AI检测,高效完成论文! 开发目的 “毕业论文降重”GPTS应用,作用为:重新表述学术论文,降低相似性评分,避免AI检测。 使用地址 地址:毕业论文降重…

unraid docker.img扩容

unraid 弹Docker image disk utilization of 99%,容器下载/更新失败 我的版本是6.11.5,docker.img满了导致容器不能更新,遇到同样问题的可以先用docker命令清除一下仓库(当然不一定能清理出来,我已经清理过只清理出来1G多点&…

【四 (3)数据可视化之 Seaborn 常用图表及代码实现 】

目录 文章导航一、介绍二、安装Seaborn三、导入Seaborn四、设置可以中文显示五、占比类图表1、饼图2、环形图 六、比较排序类1、条形图2、箱线图3、小提琴图 七、趋势类图表1、折线图 八、频率分布类1、直方图 九、关系类图表1、散点图2、成对关系图3、热力图 文章导航 【一 简…

基于SpringBoot+Vue交流和分享平台的设计与实现(源码+部署说明+演示视频+源码介绍)

您好,我是码农飞哥(wei158556),感谢您阅读本文,欢迎一键三连哦。💪🏻 1. Python基础专栏,基础知识一网打尽,9.9元买不了吃亏,买不了上当。 Python从入门到精通…

Apache zookeeper kafka 开启SASL安全认证

背景:我之前安装的kafka没有开启安全鉴权,在没有任何凭证的情况下都可以访问kafka。搜了一圈资料,发现有关于sasl、acl相关的,准备试试。 简介 Kafka是一个高吞吐量、分布式的发布-订阅消息系统。Kafka核心模块使用Scala语言开发…

【人工智能入门必看的最全Python编程实战(5)】

--------------------------------------------------------------------- 1.AIGC未来发展前景 未完持续… 1.1 人工智能相关科研重要性 拥有一篇人工智能科研论文及专利软著竞赛是保研考研留学深造以及找工作的关键门票!!! 拥有一篇人工…

AIDD简介——分类和回归任务

🌞欢迎来到AI生物医药的世界 🌈博客主页:卿云阁 💌欢迎关注🎉点赞👍收藏⭐️留言📝 🌟本文由卿云阁原创! 🌠本阶段属于练气阶段,希望各位仙友顺利…

《ARM汇编与逆向工程 蓝狐卷 基础知识》

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。…

Ubuntu20下C/C++编程开启TCP KeepAlive

1、在linux下,测试tcp保活,可以使用tcp自带keepalive功能。 2、几个重要参数: tcp_keepalive_time:对端在指定时间内没有数据传输,则向对端发送一个keepalive packet,单位:秒 tcp_keep…

拌合楼内部管理系统开发(一)立个flag,开始做准备

前言:项目背景情况介绍 公司有意开发一套适合拌合楼的内部管理系统给到客户使用,接触过一家拌合楼行业内号称标杆的企业,去过参观学习的都觉得他们软件好用,但是从软件开发角度看,就是crud钉钉机器人无人值守。虽然公司…

Python语法糖

N u m P y NumPy NumPy的 n d i t e r nditer nditer nditer 是 NumPy 提供的一种多维迭代器,用于对多维数组进行迭代操作。它可以替代传统的嵌套循环,在处理多维数组时更加方便和高效。 迭代器可以按照不同的顺序遍历数组的元素,也可以控制…

JDK8和JDK11在Ubuntu18上切换(解决nvvp启动报错)

本文主要介绍JDK8和JDK11在Ubuntu18上切换,以供读者能够理解该技术的定义、原理、应用。 🎬个人简介:一个全栈工程师的升级之路! 📋个人专栏:计算机杂记 🎀CSDN主页 发狂的小花 🌄人…

C++的类和对象(七):友元、内部类

目录 友元 友元函数 友元类 内部类 匿名对象 拷贝对象时的一些编译器优化 再次理解类和对象 友元 基本概念:友元提供了一种突破封装的方式,有时提供了便利,但是友元会增加耦合度,破坏了封装,所以友元不宜多用&…

[嵌入式系统-39]:龙芯1B 开发学习套件 -10-PMON启动过程Sstart.S详解

目录 一、龙芯向量表与启动程序的入口(复位向量) 1.1 复位向量: 1.2 代码执行流程 1.3 计算机的南桥 VS 北桥 二、PMON代码执行流程 三、Start.S详解 3.1 CPU初始化时所需要的宏定义 (1)与CPU相关的一些宏定义…

北斗卫星在桥隧坡安全监测领域的应用及前景展望

北斗卫星在桥隧坡安全监测领域的应用及前景展望 北斗卫星系统是中国独立研发的卫星导航定位系统,具有全球覆盖、高精度定位和海量数据传输等优势。随着卫星导航技术的快速发展,北斗卫星在桥隧坡安全监测领域正发挥着重要的作用,并为相关领域…

element-plus 完成下拉切换功能

项目场景: element-plus element-plus 完成下拉切换功能,选用了popover 组件去进行样式修改,本来大概是要实现下面这样的样式效果,没想到调整的时候,这个选择的高亮模块总是超出。 实现效果: 解决方案&am…

android HAL层崩溃排查记录

要最近在调试系统HDMI CEC功能时,遇到一个奇怪的崩溃问题,这边记录下。 初步分析 先上日志: --------- beginning of crash 03-06 10:48:25.503 1133 1133 F DEBUG : *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** **…

微信小程序 - 基于scroll view 实现下拉刷新

简介 本文会基于scroll view 实现下拉刷新效果&#xff0c;在下拉的时候会进入loading状态。 实现效果 效果如上图所示&#xff0c;在下拉到底部时候&#xff0c;会出现loading条&#xff0c;在处理完成后loading条消失。 具体代码 布局 <scroll-view scroll-y style&qu…