深度学习中常见的激活函数
激活函数(Activation...
机器学习中的梯度下降与损失函数
梯度下降(Gradient Descent GD)简单来说就是一种寻找目标函数最小化的方法,它利用梯度信息,通过不断迭代调整参数来寻找合适的目标值。 什么是梯度? 关于梯度的引入,可以分为四个概念:导数->偏导->方向导数->梯度 导数:当函数定义域和取值都在实数域中时,导数可以表示函数曲线上的切线斜率。 偏导数:偏导其实就是多元函数一个多变量的函数的偏导数是它关于其中一个变量的导数,而保持其他变量恒定。因为曲面上的每一点都有无穷多条切线,描述这种函数的导数相当困难。偏导数就是选择其中一条切线,并求出它的斜率...
PointPillar算法思路
PointPillar 是一种用于三维物体检测的深度学习模型,尤其适用于激光雷达点云数据的处理。它的设计思想相对简洁,并且在保持高效性的同时能获得较高的精度。 论文地址 代码地址 前言 本文要解析的模型叫做PointPillars,是2019年出自工业界的一篇Paper。 该模型最主要的特点是检测速度和精度的平衡。该模型的平均检测速度达到了62Hz,最快速度达到了105Hz,确实遥遥领先了其他的模型。这里我们引入CIA-SSD模型中的精度-速度图,具体对比如下所示。 截止CIA-SSD论文发表前,PointPillars的检测速度都是遥遥领先的,而且精度也不低。 现有的一些研究喜欢将不规则、稀疏的点云数据按照以下两种方式进行处理,然后引入RPN层进行3D Bbox...
OpenPCDet中关于spconv的一些问题解决方案
最近在修改对OpenPCDet中一些算法做改进评估的时候碰到了一系列的和spconv模组相关的问题,找到了一些解决方法。 本人的服务器环境: 操作系统版本:Ubuntu20.04 GPU:3090Ti CUDA版本:11.3 Pytorch:1.8.1 Python:3.8 问题1: File “/home/OpenPCDet/pcdet/utils/spconv_utils.py”, line 4, in if float(spconv.version[2:]) >= 2.2: AttributeError: module ‘spconv’ has no attribute ‘version’ 原本以为是版本过低的问题,查资料发现是安装了多个spconv版本 123pip uninstall spconv-cu113pip uninstall spconvpip install spconv-cu113 测试版本: 12import spconvprint(spconv.__version__) 问题2: AttributeError: module...
OpenPCDet框架下模型的数据采样训练
在OpenPCDet中,KITTI 数据集的 ImageSet 中已经包含了训练和测试数据的索引信息,这使得可以不必直接扫描点云数据文件来获取某个特定的数据集。通过修改 ImageSet 中的索引,就可以直接选择不同的数据帧来进行训练、测试或推理。 1. KITTI 数据集中的 ImageSet imageset 文件夹包含了多个文本文件,其中每个文件列出了训练和测试数据的帧索引。这些文件通常以如下格式命名: 123456data/ ├── kitti/ │ ├── ImageSets/ │ │ ├── train.txt # 训练集的帧索引 │ │ ├── val.txt # 验证集的帧索引 │ │ └── test.txt # 测试集的帧索引 每个 txt 文件中列出了一系列的帧编号,例如: 1234000000000001000002... 这些帧编号对应的是 velodyne 文件夹中的 .bin 点云数据文件. 2....
Uncertainty Estimation学习笔记(一)
为什么要研究uncertainty? 训练好的[神经网络模型本质是一个拥有大量确定参数的函数,不管你给什么输入,它都能给你一个输出。这会导致两种我们不愿意看到的意外情况: 对明明错误的预测结果,模型输出的[置信度]却很高 对没有见过的输入(OoD,Out-of-ditribution),比如给一个识别猫/狗的模型输入一张桌子图片,模型一定会输出:”这是猫“ or “这是狗”,而不是告诉我们 “它似乎不是猫,也不是狗” 所以,我们希望模型能输出 uncertainty,辅助使用模型的人进行更好地决策。比如上面的例子中,我们希望对错误分类的样本、OoD样本,模型能够给出一个较高的uncertainty。 uncertainy是什么? 参考NIPS2017年的论文 What Uncertainties Do We Need in Bayesian Deep Learning for Computer Vision? ,Gal阐述了两种uncertainty:Aleatoric uncertainty(i.e. data uncertainty) 和 Epistemic...
卷积神经网络(CNN)的原理
引言 卷积神经网络(Convolutional Neural Network,CNN)是一种在计算机视觉领域取得了巨大成功的深度学习模型。它们的设计灵感来自于生物学中的视觉系统,旨在模拟人类视觉处理的方式。在过去的几年中,CNN已经在图像识别、目标检测、图像生成和许多其他领域取得了显著的进展,成为了计算机视觉和深度学习研究的重要组成部分。 卷积是什么? 教科书上一般定义函数f,g的卷积f*g(n)如下: 连续形式: 离散形式: 并且也解释了,先对g函数进行翻转,相当于在数轴上把g函数从右边褶到左边去,也就是卷积的“卷”的由来。 然后再把g函数平移到n,在这个位置对两个函数的对应点相乘,然后相加,这个过程是卷积的“积”的过程。 对卷积的通俗理解 所谓两个函数的卷积,本质上就是先将一个函数翻转,然后进行滑动叠加 在连续情况下,叠加指的是对两个函数的乘积求积分,在离散情况下就是加权求和,为简单起见就统一称为叠加。 整体看来是这么个过程: 翻转——>滑动——>叠加——>滑动——>叠加——>滑动——>叠加...
OpenPCDet的详细部署与复现
OpenPCDet简介 OpenPCDet是一个用于3D目标检测的开源工具箱,它提供了多种数据集的加载器,支持多种模型,并且易于扩展。 本人使用硬件与环境 Linux操作系统(Ubuntu20.04) Python环境(Anaconda下独立创建) CPU: 11th Gen Intel® Core™ i9-11900K @ 3.50GHz × 16 GPU: NVIDIA GeForce RTX 3090 cuda:11.3 配置步骤 创建虚拟环境 1conda create -n pcdet python=3.8 激活进入虚拟环境 1conda activate pcdet 安装pytorch 查看cuda版本 1nvcc -V 查看运行结果 查看对应版本下载命令行 https://pytorch.org/get-started/previous-versions/ 可以使用pip或conda 下载安装,本人选择conda 1conda install pytorch==1.12.1 torchvision==0.13.1 torchaudio==0.12.1...
UnrealEngine中的GameMode和GameSate详解
在虚幻引擎(Unreal Engine)中,GameMode 和 GameState 都是多人游戏中的核心类,但它们的分工和用途有显著区别。以下是它们的对比和典型应用场景: 1. GameMode(游戏规则管理者) 职责 仅存在于服务器端(不会复制到客户端)。 定义游戏的核心规则:胜利条件、玩家生成逻辑、回合制规则等。 管理玩家登录/退出(通过Login/Logout等事件)。 生成并持有PlayerController、PlayerState等。 典型用途 12345678// 示例:在GameMode中设置玩家生成逻辑void AMyGameMode::PostLogin(APlayerController* NewPlayer) { Super::PostLogin(NewPlayer); // 生成玩家角色 if (NewPlayer->GetPawn() == nullptr) { SpawnPlayerAtTransform(NewPlayer, SpawnTransform); ...
虚幻5.1UUserWidget不再包含OnLevelRemovedFromWorld的问题
在跟着Blaster课程项目写Menu插件的时候,在Menu.h中一直报以下错误无法编译,百思不得其解. 严重性代码说明项目文件33行禁止显示状态详细信息 错误C3668“UMenu::OnLevelRemovedFromWorld”: 包含重写说明符“override”的方法没有重写任何基类方法MenuSystem F:\UE\UEproject\MultiplayCourse\MenuSystem\Plugins\MultiplayerSessions\Source\MultiplayerSessions\Public\Menu.h23 查阅资料后发现是虚幻5.1和5.0的版本问题: 虚幻5.1 UUserWidget不再包含OnLevelRemovedFromWorld.我们可以重载一个类似的函数用于达到相同的效果: 1virtual void NativeDestruct() override; .cpp文件中实现: 12345void UMenu::NativeDestruct(){ MenuTearDown(); ...