前两节详细介绍了VoxelNet的数据处理部分,本节主要介绍VoxelNet详细的模型结构及其损失函数。数据处理部分请参考:三维点云目标检测 — VoxelNet详解之数据处理 (二)_Coding的叶子的博客-CSDN博客。

1 代码环境部署

请参考:三维点云目标检测 — VoxelNet详解crop.py (一)_Coding的叶子的博客-CSDN博客。

另外有两处需要进行修改:

(1)config.py:第35、36行需要进行如下修改,否则会报错:TypeError: 'float' object cannot be interpreted as an integer。

x = np.linspace(xrange[0]+vw, xrange[1]-vw, W//2)
y = np.linspace(yrange[0]+vh, yrange[1]-vh, H//2)

(2)voxelnet.py:第163行需要进行如下修改,否则会报维度不匹配的错误。

dense_feature[:, coords[:,0], coords[:,1], coords[:,2], coords[:,3]]= sparse_features.transpose(0, 1)

2 voxelnet模型结构

Voxelnet的主要模型结构如下图所示:

voxelnet模型主要包含数据处理、VFW、SVFW、CML和RPN几个部分,其中数据处理已经在上一节中详细介绍过。

2.1 体素特征编码 VFW(voxel feature encoding layer)

假设输入体素的维度为NxTxK,N为含有点云的体素个数,T=35为体素中点的个数,K为体素中每个点的特征维度。

(1)首先,筛选出原始特征最大值不等于0的点,生成Nx3维度的mask,即对这些空值点不进行特征提取。

(2)对每个点的特征进行全连接(N,N1),得到NxTxN1维度特征pwf (point-wise feature)。

(3)对每个体素每个点的特征,每个特征维度保留最大值,相当于最大值池化,得到局部体素的全局特征Nx1xN1,然后将特征重复T次,维度恢复到NxTxN1特征laf(locally aggregated feature)。

(4)将pwf和laf进行拼接,相当于分别考虑各个体素中局部特征和全局特征。这一点与PointNet语义分割完全一致。拼接后体素特征的维度为NxTx2N1,即pwcf(point-wise concat feature)。

(5)将(1)中mask维度扩展成NxTx2N1后与pwcf相乘得到VFW层的最终输出。

因此,VFW的作用是对每个体素的局部特征和全局特征进行提取,并且将空值点的特征置为0。

2.2 SVFW(Stacked Voxel Feature Encoding)

VoxelNet连续用到两次VFW,合并称为SVFW(Stacked Voxel Feature Encoding)。VFW1中N=7、N1=16,则输出为Nx35x32;VFW1中N=32、N1=64,则输出为Nx35x128。输出的特征再次经过全连接(128,128)后在T方向进行最大池化,得到每个体素的特征,维度为Nx128 (vwfs)。

以上特征为含有点云的体素特征,体素个数为N。总的空间中体素个数为10x400x352,这个在数据部分已经介绍。将Nx128为特征,填充回所有体素中,没有特征的体素用0进行填充,进而得到稠密的体素特征128x10x400x352(vwfs)。

2.3 CML(Convolutional Middle Layer)

经过SVFE层后输出的特征维度为128x10x400x352,这些是每个体素的特征。相比于图像来说,这相当于每个像素的特征。CML(Convolutional Middle Layer)模块是采用3D卷积对整个体素空间进行特征提取,这一步在计算机视觉算法中是非常常规的一步。

(1)Conv3d(128, 64, 3, s=(2, 1, 1), p=(1, 1, 1)):64x5x200x512

(2)Conv3d(64, 64, 3, s=(1, 1, 1), p=(0, 1, 1)):64x3x400x352

(3)Conv3d(64, 64, 3, s=(2, 1, 1), p=(1, 1, 1)):64x2x400x352

经过CML模块后,特征维度降为64x2x400x352,深度方向上的维度降低为2,可以认为是与两种角度的anchor相对应。

2.4 RPN(Region Proposal Network)

RPN(Region Proposal Network)模块主要是用于anchor的分类和回归。这个在图像领域两阶段的目标检测算法中有详细介绍和应用,如faster RCNN。

将CML模块特征reshape成128x400x352作为RPN的输入。

(1)Block_1:Conv2d(128, 128, 3, 2, 1)、Conv2d(128, 128, 3, 1, 1)、Conv2d(128, 128, 3, 1, 1)、Conv2d(128, 128, 3, 1, 1):128x200x176 (x_skip_1)。

(2)Block_2:Conv2d(128, 128, 3, 2, 1)、Conv2d(128, 128, 3, 1, 1)、Conv2d(128, 128, 3, 1, 1)、Conv2d(128, 128, 3, 1, 1)、Conv2d(128, 128, 3, 1, 1):128x100x88 (x_skip_2)。

(3)Block_2:Conv2d(128, 256, 3, 2, 1)、Conv2d(256, 256, 3, 1, 1)、Conv2d(256, 256, 3, 1, 1)、Conv2d(256, 256, 3, 1, 1)、Conv2d(256, 256, 3, 1, 1):256x50x44 (x)。

(4)Deconv_1(256, 256, 4, 4):利用反卷积对x进行上采样,256x200x176(x_0)。

(5)Deconv_2(128, 256, 2, 2):利用反卷积对x_skip_2进行上采样,256x200x176(x_1)。

(6)Deconv_3(128, 256, 1, 1):利用反卷积对x_skip_1进行上采样,256x200x176(x_2)。

(7)将x_0、x_1、x_2拼接成768x200x352维度的新特征。

(8)Score_head:利用卷积Conv2d(768, 2, 1, 1)生成2x200x176个特征,用于对每个anchor的分类,psm(probability score map)。

(9)Reg_head:利用卷积Conv2d(768, 14, 1, 1)生成14x200x176个特征,用于对每个anchor的位置回归,rm(regression map)。

RPN模块中用了特征金字塔FPN提取了多尺度特征,并且进行融合。这个也可以改进成常见的逐层上采样,逐层融合,而不是最后一层采用1次拼接融合

3 损失函数

损失函数计算在一个3D的数据的标注中,包含了7个参数(x, y ,z, l, w, h, θ),其中xyz代表了一个物体的中心点在雷达坐标系中的位置。lwh代表了这个物体的长宽高。θ代表了这个物体绕Z轴旋转角度(偏航角)。因此生成的anchor也包含对应的7个参数(xa, ya ,za, la, wa, ha, θa),其中xa, ya ,za表示这个anchor在雷达坐标系中的位置。la, wa, ha反应了这个anchor的长宽高。θa表示这个anchor的角度。

损失函数的输入为rm、psm、pos_equal_one(正样本mask,200x176x2)、neg_equal_one(正样本mask,200x176x2)、targets(正样本与真实值之间的偏差,200x176x14),pos_equal_one、neg_equal_one、targets的具体处理过程请参考上一节的数据处理部分。

(1)将psm维度reshape成200x176x2后利用sigmoid转换为概率,p_pos。

(2)将rm和targets维度reshape成200x176x2x7,并分别乘以pos_equal_one,这是因为仅需要对正样本进行回归,得到rm_pos和targets_pos。

(3)分别计算正负样本分类的交叉熵损失,cls_pos_loss和cls_neg_loss。

(4)根据rm_pos和target_pos计算smoothl1loss损失,reg_loss。

(5)将1.5倍cls_pos_loss和1倍cls_neg_loss之和作为总的分类置信度损失,conf_loss,对应图中的α和β。这是因为通常正样本的数量远远小于负样本数量,通过不同的权重来增加正样本损失对总损失的贡献程度。

python三维点云从基础到深度学习_Coding的叶子的博客-CSDN博客_python三维点云重建从三维基础知识到深度学习,将按照以下目录持续进行更新。更新完成的部分可以在三维点云专栏中查看。https://blog.csdn.net/suiyingy/category_11740467.htmlhttps://blog.csdn.net/suiyingy/category_11740467.html1、点云格式介绍(已完成)常见点云存储方式有pcd、ply、bin、txt文件。open3d读写pcd和plhttps://blog.csdn.net/suiyingy/article/details/124017716

更多三维、二维感知算法和金融量化分析算法请关注“乐乐感知学堂”微信公众号,并将持续进行更新。

【三维目标检测】VoxelNet(三):模型详解相关推荐

  1. 【三维目标检测】Second 模型 (一)

    Second算法是一种基于三维点云的目标检测算法.Second算法采用了几乎与Voxelnet三维目标检测算法完全一致的设计思路,主要差异表现在将Voxelnet CML(Convolutional ...

  2. 目标检测算法YOLO-V1算法详解

    ❝ 前面我们一起学了SSD算法的相关知识,如下: SSD目标检测算法必须知道的几个关键点 目标检测算法SSD结构详解 ❞ 今天我们学习另一系列目标检测算法YOLO(You Only Look Once ...

  3. 【三维目标检测】Second 模型 (二)

    Second模型的基本介绍.稀疏卷积.mini kitti数据集等请参考本专栏的上一篇博文:[三维目标检测]Second 模型 (一)_Coding的叶子的博客-CSDN博客.本节将介绍模型的详细结构 ...

  4. 基于双目视觉的目标检测与追踪方案详解

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者 | Aimme 出品 |  焉知智能汽车 一直想通过计算机视觉的角度好好地把其在自动驾驶视觉检测 ...

  5. 【动手学PaddlePaddle2.0系列】目标检测理论与YOLOv4详解

    对计算机而言,能够"看到"的是图像被编码之后的数字,所以它很难理解高层语义概念,比如图像或者视频帧中出现的目标是人还是物体,更无法定位目标出现在图像中哪个区域.目标检测的主要目的是 ...

  6. YOLOv7(目标检测)入门教程详解---环境安装

    目录 一.前言 二.yolov7环境搭建 直接进入正题,环境搭建开始: Anaconda: Pycharm: cuda: cuda安装: cudnn: 三.虚拟环境安装 创建虚拟python环境: P ...

  7. 深度学习-目标检测YOLOV3 YOLOv4原理详解

    2.YoloV3核心基础内容 2.1 网络结构可视化 Yolov3是目标检测Yolo系列非常非常经典的算法,不过很多同学拿到Yolov3或者Yolov4的cfg文件时,并不知道如何直观的可视化查看网络 ...

  8. 目标检测网络之SPP-net详解

    SPP-net详解: 简要概述:SPP-net网络是基于R-CNN结构改进,且仅在候选区域特征提取,以及特征向量大小转化两个方面做出改进,如详细理解SPP-net请先阅读目标检测开山之作R-CNN详解 ...

  9. 谷歌 NAS + 目标检测:SpineNet论文详解

    关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 作者:bearbee 知乎链接:https://zhuanlan.zhihu.co ...

  10. 【论文解读】深度学习目标检测的开山鼻祖 |R-CNN详解 | 两阶段目标检测代表

    目录 前言 目标检测近年里程碑 深度学习目标检测 1 R-CNN简介 1.1 何为R-CNN? 1.2 摘要 1.2.1 论文综述 1.2.2 优点汇总 1.2.3 缺点汇总 2. RCNN网络结构解 ...

最新文章

  1. NetBean中的使用,比如快捷键
  2. 如何定期备份网站数据
  3. 助推曲烟数字化转型升级,开展生产业务数字化
  4. 布式事务实践 解决数据一致性 Spring事务机制
  5. 千兆交换机下面可以接多少层交换机_视频监控系统如何选择网络交换机
  6. GeoTools计算线与面的交点
  7. mysql 中文 3个字节_mysql 字节问题,中文和数字
  8. php 生产一维码,透过 PHP 生成 一维码
  9. MySQL 效能监控工具--mysqlreport -转
  10. BZOJ3707 圈地
  11. python3 flask 使用Mysql数据库
  12. Laravel 避免 Trying to get property of non-object 错误
  13. python实验题目:中文数字对照表输入一个数字,转换成中文数字。比如:1234567890 -> 壹贰叁肆伍陆柒捌玖零。
  14. Python编写后门程序
  15. 英国留学经验分享:发下呆会被拒 有特长受欢迎
  16. 利用Matplotlib绘制各类图表
  17. vuejs crc算法,16进制换算
  18. ImportError: cannot import name ‘evaluate‘ from ‘surprise‘解决方案
  19. 【STA】(1)引言
  20. 实操-安装esxi6.0和配置

热门文章

  1. 2023西安电子科技大学考研分析
  2. shell脚本编程学习笔记3(xdl)——Bash变量的运算与测试
  3. ubuntu 搜狗输入法突然只能输入拼音
  4. “米粉”心碎,小米还能继续“高端”吗?
  5. 欢迎使用CSDN-markdown编辑器凄凄切切群群群群群群群群
  6. CLB Overview
  7. 快速计算CRC校验(异或)的方法
  8. android音频管理器(AudioManager)
  9. 这对CP我磕了!Adobe XD与Flutter插件官宣了……
  10. Linux 安装仿宋字体