IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> OpenPCDet解析 -> 正文阅读

[人工智能]OpenPCDet解析

一、OpenPCDet 简介

1.1 简介

OpenPCDet: Open-MMLab 面向LiDAR点云表征的3D目标检测代码库

OpenPCDet的github链接

  • OpenPCDet 是一套基于PyTorch实现的点云3D目标检测代码库

  • 设计思想点云数据集(KITTI、NuScene、Lyft、Waymo、PandaSet等)在数据格式与3D坐标系上往往定义各不相同,各式各样的点云感知算法(point-based、 voxel-based、one-stage/two-stage等)也形态各异
    因此基于数据-模型分离的顶层代码框架设计思想,设计一个统一的架构,使得相关研究者可以在一个统一的框架内进行各种组合实验

1.2 数据-模型分离的顶层代码框架

PCDet定义了统一的规范化3D坐标表示贯穿整个数据处理与模型计算,从而将数据模块模型处理模块完全分离。
具体框架如下图所示:
在这里插入图片描述

数据模型分离的优点:

  • 研究者在研发不同结构模型时,统一使用标准化的3D坐标系进行各种相关处理(比如计算loss、RoI Pooling和模型后处理等),而无需理会不同数据集的坐标表示差异性
  • 研究者在添加新数据集时,只需写少量代码将原始数据转化到标准化坐标定义下,PCDet将自动进行数据增强并适配到各种模型中。

1.3 统一的3D目标检测坐标定义

PCDet 中我们采用了固定的统一点云坐标系,以及更规范的3D检测框定义,贯穿整个数据增强、处理、模型计算以及检测后处理过程。3D检测框的7维信息定义如下:

3D bounding box: (cx, cy, cz, dx, dy, dz, heading)

每个维度解释如下:

  • (cx, cy, cz) 为物体3D框的几何中心位置
  • (dx, dy, dz)分别为物体3D框在heading角度为0时沿着x-y-z三个方向的长度
  • heading为物体在俯视图下的朝向角 (沿着x轴方向为0度角,逆时针x到y角度增加)。
    在这里插入图片描述

1.4 模块化模型拓扑设计

我们在PCDet中搭建3D目标检测框架只需要写config文件将所需模块定义清楚,然后PCDet将自动根据模块间的拓扑顺序组合为3D目标检测框架,来进行训练和测试。
模块化设计如下图所示:
在这里插入图片描述
PCDet可以支持目前已有的绝大多数面向LiDAR点云的3D目标检测算法,包括voxel-based,point-based,point-voxel hybrid以及one-stage/two-stage等等3D目标检测算法。 如下图所示:
在这里插入图片描述

二、 代码解析

2.1 框架介绍

文件结构如下图所示:
在这里插入图片描述
各个目录的作用如下:
在这里插入图片描述

2.2 数据处理流程

在这里插入图片描述

  • 步骤1: __getitem__
    作用:从磁盘上加载数据并统一坐标系。
    如果只更换数据集,则需要重写__getitem__

  • 步骤2: data_augmentor
    作用: 数据增强的方法,例如随机裁剪、随机旋转等…
    在这里插入图片描述

  • 步骤3:point_feature_encoder
    作用:选择一些特征的编码,输入的特征是points:(N,3+C_in) 经过选择和编码后,输出的特征是points:(N,3+C_out)
    在这里插入图片描述

  • 步骤4: data_processor
    作用:处理输入的数据,比如mask_point_boxes_outside_range、sample_points等
    在这里插入图片描述

  • 步骤5: collate_batch
    作用:将数据整理成batch

2.3 模型拓扑的依赖关系

在这里插入图片描述
建立model的过程在【pcdet/models/detectors/detector3d_template.py】中。
在这里插入图片描述
其中build_networks 是根据拓扑信息(module_topology)建立网络, 并保存在module list 中。
在这里插入图片描述
其中module_topology 的定义如下:
在这里插入图片描述

2.4 模型的前向传播和最优

point_rcnn 为例,定义了一个PointRCNN的类,继承的是Detector3DTemplate的类。
在这里插入图片描述

  • 前向传播

    • 首先遍历module_list, 通过topology 顺序的调用各个模型。如果是训练过程(training ), 则调用get_traing_loss 计算损失。如果是推理过程,则调用post_processing 进行后处理
  • 最优化
    计算的损失包括两个部分

    • DETECTOR.get_training_loss()
    • HEAD.get_loss()

2.5 模型

2.5.1 detector

detector的存放位置:
在这里插入图片描述

对于所有detector的顶级模板如下

  • 建立网络结构(Build_networks)
  • 前向传播(Forword)
  • 计算损失(Loss calculation)
  • 后处理 (Post_processing:NMS+score threshold)

2.5.2 3D backbone network

backones_3d的存放位置:
在这里插入图片描述
3d主干网络的作用:提取基于体素的或者基于点云的特征。

3d主干网络主要有如下几种:

  • 3d encoder with sparse convolution(with VFE)
    • 功能:通过稀疏卷积进行编码
    • 实例:VoxelBackBone8x、VolxelResBackBone8x
  • 3d UNet with sparse convolution(with VFE)
    • 功能:通过稀疏网络进行编码和解码两个部分
    • 实例:UNetV2
  • point-wise networks(PointNet++)
    • 功能: 用PointNet++ 直接提取点的特征
    • 实例:PointNet2MSG

2.5.3 2D Backbone network

backones_2d的存放位置:
在这里插入图片描述

2d主干网络的作用: 提取2d特征图。
3d主干网络主要有如下几种:

  • Map_to_bev_module(把3d特征映射到2d上)
    • HeightCompression
    • PointPillarScatter
  • 2d convolution encoder with FPN-like unsampling
    • BaseBEVBackbone

2.5.4 Denseheads

Denseheads的存放位置:
在这里插入图片描述

  • 任务:生成dense 3d boxes, 真正进行检测的过程。
    AnchorHead包含如下两部分:
    • target assigning:对于每个anchor判断是否是正样本以及要朝着那个groud truth 回归。
    • head loss calculation:计算loss,包括分类和回归的损失。

分类:

  • 基于BEV 特征的 Dense head (继承于AnchorHeadTemplate)
    • AnchorHeadSingle: 只输入一个特征图,基于anchor进行检测
    • AnchorHeadMulti:输入多个特征图,基于anchor检测
    • CentorHead:anchor- free检测,对于每个pixel输出一个检测框。
  • 基于点特征的Dense head (继承于PointHeadTemplate)
    • PointHeadSimple: 只做分割,判断每个点是前景点还是背景点。
    • PointHeadBox: 不仅做分割,还做预测。对于每个点预测一个3d 的bonding box。
    • PointIntraPartOffsetHead: 除了分割和预测外,还可以预测Intra part offset

2.5.5 RoIHeads

RoIHeads的存放位置:

在这里插入图片描述

  • 任务:Refine 3D proposals with RoI-aligned features
    • Extract RoI-aligned features
    • proposal_layer
    • ProposalTargetLayer
    • Head loss calcution
  • 二阶段的ROI检测(继承于ROITemplate)
    • PointRCNNHead
    • PartA2Head
    • PVRCNNHead

2.6 配置文件

配置文件的存放路径:
在这里插入图片描述
通过.yaml文件进行多层次的配置。
例如如下图所示的pv_rcnn.yaml 是个整体的配置。其中嵌套了三个下一级的配置,包括DATA_CONFIGMODELOPTIMIZATION
在这里插入图片描述

三、拓展开发

3.1 使用自定义的数据集

步骤如下:

  1. 继承DatesetTemplate 写自己的DatasetModule
  2. 重载self.__getitem__() 函数来加载点云或者gt_boxes, 并把它们转换成统一的坐标系。
  3. 调用self.prepare_data() 去处理数据
  4. 重载self.generate_prediction_dicts() 函数把预测结果转换成我们需要的格式。
  5. 重载self.evaluation() 函数来评估模型的性能

3.2 使用自定义的模型

步骤如下:

  1. 继承DetectorTemplate 来写自定义的detector
  2. 写自定义的配置文件
  3. 在对应的目录下写对应的模型
  4. 重载forward() 函数
  5. 重载get_training_loss() 函数
  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-10-22 21:15:35  更:2022-10-22 21:16:17 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 22:40:48-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码