VoxelNet: End-to-End Learning for Point Cloud Based 3D Object Detection
VoxelNet: End-to-End Learning for Point Cloud Based 3D Object Detection
Abstract
摘要部分,作者首先指出了3D点云中目标检测的重要性,在自动驾驶导航、家政机器人以及增强现实和虚拟现实等多个领域有重要的作用。然后,提到了现有方法的局限性,这些方法大多依赖于手工设计的特征表示,例如通过鸟瞰图投影高度稀疏的LiDAR点云与区域提议网络(RPN)进行接口。
为了克服这些限制,提出了VoxelNet,是一个无需手动特征工程的通用3D检测网络。VoxelNet将特征提取和边界框预测集成到一个单一的、端到端可训练的深度学习网络中。通过将点云分割成等间距的3D体素,并在每个体素内通过新引入的体素特征编码(VFE)层将一组点转换为统一的特征表示,从而将点云编码为描述性的体积表示。
接下来,提到了VoxelNet与RPN的连接,用于生成检测结果。作者展示了在KITTI汽车检测基准测试中,VoxelNet在性能上大幅度超越了现有的基于LiDAR的3D检测方法。此外,VoxelNet在3D检测行人和骑行者的检测中也取得了较好的结果。
Introduction
作者首先阐述了3D目标检测在自动驾驶导航、家政机器人以及增强现实和虚拟现实等众多应用中的核心作用。特别指出,与传统的基于图像的检测方法相比,LiDAR技术能够提供更为可靠的深度信息。然而,LiDAR点云数据的稀疏性和点密度的不均匀性,包括3D空间的非均匀采样、传感器的有效范围、遮挡以及相对姿态等,为3D目标检测带来了挑战。
现有的方法尝试通过手工设计的特征表示来优化点云数据的处理,例如通过透视图投影或将点云映射到3D体素网格中,并为每个体素编码手工设计的特征。这些方法在在适应更复杂的形状和场景、从数据中学习所需的不变性方面存在局限性。
然后,作者进一步讨论了图像在提供详细纹理信息方面的优势,并指出许多算法尝试从2D图像中推断3D边界框。然而,基于图像的3D检测方法的准确性受到深度估计准确性的限制。此外,一些基于LiDAR的3D目标检测技术使用体素网格表示,并采用不同的统计量来编码每个非空体素。还有研究将点云投影到透视图上,然后使用基于图像的特征编码方案。此外,还有一些多模态融合方法,通过结合图像和LiDAR数据来提高检测精度,尤其是在检测行人、骑自行车者等小目标或远距离目标时。本文的工作仅使用关于LiDAR的检测方法。
Related Work
作者详细介绍了与VoxelNet相关的研究工作,这些工作主要集中在3D点云中的目标检测和定位。首先回顾了一些早期的方法,这些方法使用手工设计的特征表示。早期方法在3D形状信息丰富且详细的情况下能够取得令人满意的结果,但它们不能很好地适应更复杂的形状和场景,并且难以从数据中学习所需的不变性。
随后,作者提到了一些利用图像提供详细纹理信息的算法,这些算法从2D图像中推断出3D边界框。然而,基于图像的3D检测方法的准确性受到深度估计准确性的限制。此外,还有几项基于LiDAR的3D目标检测技术使用体素网格表示,并采用不同的统计量来编码每个非空体素,这些方法将每个非空体素与6个统计量一起编码,这些统计量是从体素内包含的所有点中派生出来的。
作者还提到了一些将点云投影到透视图上,然后使用基于图像的特征编码方案的方法。此外,还有几项研究采用了多模态融合方法,通过结合图像和LiDAR数据来提高检测精度。在这项工作中,作者专注于仅使用LiDAR的检测方法,并提出了VoxelNet,用于基于点云的3D检测,直接在稀疏的3D点上操作,避免手动特征工程引入的信息瓶颈。
Contributions
提出了一种新的基于点云的3D检测的端到端可训练深度架构,VoxelNet,直接操作在稀疏的3D点上,避免了人工特征工程带来的信息瓶颈。
提出了一种有效的实现VoxelNet的方法,该方法既受益于稀疏的点结构,又受益于对体素网格的高效并行处理。
在KITTI基准上进行了实验,并表明VoxelNet在基于lidar的汽车、行人和骑行者检测基准中产生了最先进的结果。
VoxelNet
VoxelNet Architecture
这一部分详细介绍了VoxelNet的架构,包括其三个主要功能模块:特征学习网络、卷积中间层和区域提议网络(RPN)。
VoxelNet的架构
特征学习网络是VoxelNet架构的第一部分,负责将输入的点云分割成等间距的3D体素,并在每个体素内通过体素特征编码(VFE)层将点转换为特征表示。这个过程包括体素划分、点的分组、随机采样和堆叠的VFE层。VFE层通过结合点特征和局部聚合特征来实现体素内点的交互,从而编码出能够描述局部3D形状信息的特征。
VFE层
卷积中间层:在特征学习网络之后,卷积中间层使用3D卷积、批量归一化(BN)和ReLU激活函数来处理由VFE层输出的稀疏4D张量。这些层逐步扩展感受野,将局部体素特征聚合成更广泛的空间上下文,从而为形状描述添加更多信息。
RPN网络
区域提议网络(RPN):最后,卷积中间层的输出被送入RPN,该网络负责生成3D检测结果。RPN利用修改后的架构,包括全卷积层、上采样和特征映射的连接,最终输出概率得分图和回归图。
Loss Function
作者介绍了VoxelNet的损失函数以及如何通过这个损失函数来训练网络。
作者定义了一个损失函数,由分类损失和回归损失组成。分类损失用于区分正负锚点,而回归损失则用于精细调整预测的边界框。
损失函数L由几项组成,包括正锚点的分类损失、负锚点的分类损失和所有正锚点的回归损失。分类损失使用二元交叉熵损失函数,而回归损失则使用Smooth L1函数。
作者引入了平衡常数α和β来调整分类损失和回归损失在总损失中的相对重要性。
通过这个损失函数,VoxelNet能够在训练过程中同时学习到如何正确分类目标和如何精确地预测目标的3D边界框。
Efficient Implementation
作者阐述了VoxelNet的高效实现方法,主要解决GPU对密集张量结构优化而点云数据本身稀疏的矛盾。作者提出了一种策略,将稀疏的点云数据转换成可以高效处理的密集张量结构。
首先,介绍了使用稀疏4D张量来表示非空体素的特征。然后,描述了一种预处理步骤,通过初始化一个多维张量结构来存储点云中每个体素的特征,并通过哈希表快速检查和插入点,确保处理过程的时间效率。
还采用了随机化和采样技术,对点云中的点进行随机化处理,并在点多的体素中进行固定数量的随机采样,以减少计算负担并避免因点数不平衡带来的偏差。
接下来,解释了如何通过堆叠的VFE层进行点级别和体素级别的密集操作,这些操作可以在GPU上并行执行,从而加快处理速度。在计算完体素特征后,提出了一种方法来重新组织这些稀疏特征,将其映射回密集的体素网格中,使得后续的卷积操作和RPN能够在GPU上高效执行。
最后,作者提供了实验设置的详细信息,包括网络的具体配置和用于不同检测任务(如汽车、行人和自行车检测)的参数选择。通过这些方法,VoxelNet能够在保持高精度的同时,有效地处理大规模的3D点云数据。
Training Details
这一部分主要就是讲一下训练的细节
Network Details
作者详细说明了VoxelNet的网络细节和训练过程。
首先,基于KITTI数据集的LiDAR规格,设定了汽车检测任务的点云处理范围,并移除了超出图像边界的点。接着,选择了体素的大小,并设定了每个非空体素中随机采样的最大点数。使用两层VFE层,第一层将输入特征从7维转换到32维,第二层进一步将特征从32维转换到128维。最终,通过一个全连接网络层将VFE层的输出映射到128维的特征空间,生成了一个形状为128×10×400×352的稀疏张量。
为了聚合体素级别的特征,作者采用了三个卷积中间层,这些层通过3D卷积、批量归一化和ReLU激活函数逐步扩展感受野,增强了形状描述的上下文信息。输入到RPN的是一个经过重塑的特征图,其尺寸为128×400×352,对应于通道、高度和宽度。
作者还提到了在RPN中使用的锚点尺寸和旋转角度,以及锚点匹配的标准。使用了一种特定的标准来确定锚点是正样本、负样本还是不关心的样本,并为损失函数中的分类损失和回归损失设置了平衡系数。
在行人和自行车检测任务中,作者使用了与汽车检测相同的体素大小和网络配置,调整了输入范围和采样的最大点数,以更好地捕获这些小目标的形状信息。对于RPN,对第一个块中的步长进行了修改,以实现更细粒度的锚点匹配。
在训练过程中,使用了随机梯度下降(SGD)优化器,并在前150个周期使用0.01的学习率,在最后的10个周期将学习率降低到0.001。每批训练使用了16个点云。
最后,作者提到了在训练中使用的损失函数,它结合了分类损失和回归损失,使用了Smooth L1函数来优化3D边界框的预测。
Data Augmentation
这一部分作者介绍了对VoxelNet进行数据增强的方法。
由于KITTI数据集中训练点云的数量不到4000个,从头开始训练网络可能会遇到严重的过拟合问题。作者采用了三种不同的数据增强技术。
第一种数据增强是对每个真实边界框及其内的点云进行独立扰动。具体来说,围绕Z轴对边界框以及其中的点云进行随机旋转,旋转角度是从-π/10到+π/10的均匀分布随机变量。然后,对边界框的XYZ分量以及框内每个点的XYZ坐标添加高斯分布的随机平移,其中均值为0,标准差为1.0。为了确保物理上的合理性,作者在扰动后进行了碰撞检测,如果检测到碰撞,则恢复到原始状态。
第二种数据增强是全局尺度缩放。作者将所有真实边界框的XYZ坐标和尺寸以及整个点云的XYZ坐标乘以一个从0.95到1.05的均匀分布随机变量,从而增强了网络对不同大小和距离物体的检测鲁棒性。
第三种数据增强是全局旋转。作者对所有真实边界框和整个点云应用沿Z轴的全局旋转,旋转角度是从-π/4到+π/4的均匀分布随机变量。这种旋转模拟了车辆转弯的情况。
通过这三种数据增强方法,VoxelNet能够学习到更多的变化,从而提高了模型在看不见的数据上的泛化能力,并减少了过拟合的风险。
Experiments
详细描述了对VoxelNet进行的实验评估过程。
作者首先介绍了实验的评估标准和所用数据集。使用了KITTI 3D对象检测基准测试,该测试包含7481个训练图像/点云和7518个测试图像/点云,涵盖了汽车、行人和骑自行车者三个类别。每个类别的检测结果根据对象大小、遮挡状态和截断水平分为简单、中等和困难三个难度级别。
为了全面评估VoxelNet,作者遵循了之前描述的协议,并将训练数据细分为训练集和验证集,以避免同一序列的样本同时出现在训练集和验证集中。训练集包含3712个样本,验证集包含3769个样本。作者没有访问测试集的真实数据,因此使用KITTI服务器的协议进行了评估。
接下来,作者比较了VoxelNet与其他几种顶尖算法的性能,包括基于单目图像的方法(Mono3D 和 3DOP )、基于LiDAR的方法(VeloFCN 和 3D-FCN )以及多模态方法(MV )。尽管其他一些领先的方法在KITTI基准测试中使用了RGB图像和LiDAR点云的组合,但VoxelNet仅使用了KITTI数据集中提供的LiDAR数据。
作者实现了一个强基线模型以分析端到端学习的重要性,称为手工制作基线(HC-baseline),该模型从VoxelNet架构派生而来,但使用手工制作的特征代替了所提出的特征学习网络。HC-baseline使用了在中描述的鸟瞰图特征,并增加了高度通道的数量以捕获更详细的形状信息。
最后,作者在KITTI验证集上进行了评估,并使用平均精度(AP)作为比较指标。他们遵循官方KITTI评估协议,对汽车类别使用0.7的IoU阈值,对行人和骑自行车者类别使用0.5的IoU阈值。
Evaluation on KITTI Validation Set
描述了在KITTI验证集上对VoxelNet进行评估的结果。
首先按照官方KITTI评估协议,使用交并比(IoU)阈值来评估检测性能。对于汽车类别,IoU阈值设为0.7,而对于行人和骑自行车者类别,IoU阈值则设为0.5。使用了平均精度(AP)作为主要的度量指标。
在鸟瞰图(Bird's Eye View)检测任务中,VoxelNet在所有难度级别上均展现出优于其他竞争方法的性能。具体来说,VoxelNet在简单、中等和困难级别上的AP分别为89.60%、84.81%和78.57%。与此同时,作者还将VoxelNet与手工特征基线(HC-baseline)进行了比较,发现VoxelNet在行人和骑自行车者的检测任务上取得了显著更高的AP,表明端到端学习对于点云基础的检测至关重要。
在3D检测任务中,VoxelNet同样在所有难度级别上表现出色,AP分别为81.97%、65.46%和62.85%。与HC-baseline相比,VoxelNet在3D检测上的性能提升更为明显。
作者还指出,尽管VoxelNet仅使用了LiDAR数据,但其性能却显著优于一些使用了LiDAR和RGB图像组合的现有方法。此外,作者还提到了VoxelNet在KITTI测试集上的表现,通过向官方服务器提交检测结果进行了评估,并发现VoxelNet在所有任务中均优于之前发布的最先进方法。
最后,作者展示了一些定性的检测结果,将使用LiDAR检测到的3D边界框投影到RGB图像上,以便更直观地展示VoxelNet检测的准确性。
Evaluation on KITTI Test Set
讨论了VoxelNet在KITTI测试集上的性能评估。
作者在KITTI测试集上对VoxelNet进行了评估,并将结果提交给了KITTI官方服务器。评估涵盖了汽车、行人和骑自行车者三个类别的3D检测任务,包括鸟瞰图和全3D检测两种模式。
具体来说,在3D汽车检测的简单、中等和困难级别上,VoxelNet分别达到了77.47%、65.11%和57.73%的性能。在鸟瞰图检测模式下,这些数字分别为89.35%、79.26%和77.39%。对于行人检测,3D检测的AP分别为39.48%、33.69%和31.51%,鸟瞰图检测的AP分别为46.13%、40.74%和38.11%。对于骑自行车者,3D检测的AP分别为61.22%、48.36%和44.37%,鸟瞰图检测的AP分别为66.70%、54.76%和50.55%。
结果证明了VoxelNet在不同类别和难度级别上的有效性,而且也显示了其在仅使用LiDAR数据的情况下,相较于其他多模态方法的优势。作者还提到了VoxelNet的推理时间,指出在TitanX GPU和1.7GHz CPU上,网络的总运行时间为33毫秒。
Conclusion
大多数现有的基于激光雷达的3D检测方法依赖于手工制作的特征表示,例如鸟瞰投影。本文消除了人工特征工程的瓶颈,提出了VoxelNet,是一种新颖的端到端可训练的基于点云的三维检测深度架构。可以直接在稀疏的三维点上操作,有效地捕获三维形状信息。还提出了一种有效的VoxelNet实现,它受益于点云稀疏性和体素网格上的并行处理。
在KITTI汽车检测任务上的实验表明,VoxelNet在很大程度上优于最先进的基于LiDAR的3D检测方法。在更具挑战性的任务中,例如行人和骑自行车的人的3D检测,VoxelNet也展示了令人鼓舞的结果,表明它提供了更好的3D表示。
未来的工作包括扩展VoxelNet,用于联合激光雷达和基于图像的端到端3D检测,以进一步提高检测和定位精度
相关文章:

VoxelNet: End-to-End Learning for Point Cloud Based 3D Object Detection
VoxelNet: End-to-End Learning for Point Cloud Based 3D Object Detection Abstract 摘要部分,作者首先指出了3D点云中目标检测的重要性,在自动驾驶导航、家政机器人以及增强现实和虚拟现实等多个领域有重要的作用。然后,提到了现有方法的…...

结构开发笔记(三):solidworks软件(二):小试牛刀,绘制一个立方体
若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/141122350 长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV…...

LLM 量化算法AutoRound 0.3 发布及原理浅析
这里写自定义目录标题 AutoRound V0.3 特性原理浅析其他工作AutoRound 原理 AutoRound(https://github.com/intel/auto-round)在Llama3.1-8B-Instruct上效果明显优于AWQ/GPTQ等方法,在10个任务的平均准确率上我们以63.93%由于AWQ的63.15%和GP…...

汽车免拆诊断案例 | 2013款北京现代悦动车发动机偶尔无法起动
故障现象 一辆2013款北京现代悦动车,搭载G4FC发动机,累计行驶里程约为13.9万km。车主反映,发动机偶尔无法起动着机,断开点火开关,等待一会儿又可以起动着机。 故障诊断 接车后反复试车,当发动机无法起动着…...

React、AntD,封装动态表单
在React中使用Ant Design(简称AntD)来封装动态表单是一个常见的需求,特别是在需要灵活配置表单字段的场景下。以下是一个基本的步骤和示例代码,展示如何使用React和AntD来封装一个动态表单。 步骤 1: 安装必要的库 首先,确保你的项目中已经安装了react和antd。如果还没有…...

【Linux基础】Linux中的开发工具(3)--make/makefile和git的使用
目录 前言一,Linux项目自动化构建工具-make/makefile1. 背景2. 依赖关系和依赖方法3. 项目清理4. 使用方法和原理5. .PHONY的作用6. makefile中符号的使用 二,进度条的实现1. 理解回车换行2. 理解行缓冲区3. 版本14. 版本2 三,Linux上git的使…...

过滤了字母、数字、_、$的webshell命令执行技巧
目录 对于php5以上首先要解决的问题有 解决技巧 1.code长度小于35位 2.没有字母、数字、_ 、$ 3.怎么把文件放进服务器 4.怎么执行文件里面的内容 1.执行Linux命令 2.执行文件里面的shell命令 5.构造完整的code参数 6.我们还可以通过修改文件里面shell命令,…...

python-A+B again
[题目描述] 小理有一个非常简单的问题给你,给你两个整数 A 和 B,你的任务是计算 AB。输入格式: 输入共 2∗T1 行。 输入的第一行包含一个整数 T 表示测试实例的个数,然后 2∗T 行,分别表示 A 和 B 两个正整数。注意整数…...

C语言—函数递归
一、递归概念 递归其实是⼀种解决问题的⽅法,在C语⾔中,递归就是函数⾃⼰调⽤⾃⼰。下面举一个例子: 上述就是⼀个简单的递归程序,只不过上⾯的递归只是为了演⽰递归的基本形式,不是为了解决问题,代码最终…...

结构开发笔记(四):solidworks软件(三):绘制36x36方块摄像头示意体
若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/141187797 长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV…...

【机器学习】Caltech-101的基本概念和使用方法以及Caltech-101和ImageNet的联系和区别
引言 Caltech-101数据集是一个广泛用于对象识别任务的数据库,它包含了大约9,000张图像,这些图像来自101个不同的对象类别。每个类别包含的图像数量大约在40到800张之间,大多数类别大约有50张图像。图像的分辨率大致为300200像素 文章目录 引言…...

mysql Ubuntu安装与远程连接配置
一、安装(Ubuntu22环境安装mysql8) 这里使用Xshell链接Ubuntu和mysql windows进行操作,特别提醒:安装之前建议对Ubuntu快照处理备份,避免安装中出错导致Ubuntu崩溃。 查看是否安装的有可以用指令:ps -ef|…...

c语言中比较特殊的输入格式
目录 一.%[ ] 格式说明符 1.基本用法 (1)读取字母字符: (2)读取数字字符: (3)读取所有字符直到遇到空格: (4)读取直到换行符: 2.使用范围和组合: 3.^ 取反操作 4.注意事项 (1). 字符范围的正确表示 (2). 避免字符集中的特殊字符冲突 (3).避免空字符集 (4). 输入长…...

远程命令行控制SSH
第一次接触SSH是ROS小车作为服务端,通过ubuntu电脑客户端访问。因为机器人接键盘和屏幕操作起来不方便,所以使用SSH进行连接,方便对小车的操作。 1.服务端安装 打开终端查看ssh是否安装 sudo service ssh status 如果未安装 sudo apt upd…...

钢铁百科:A572Gr60和SA572Gr60材质分析、A572Gr60和SA572Gr60简介
A572Gr60和SA572Gr60是两种常用的结构钢板,它们在材质、执行标准、化学成分、力学性能、交货状态、应用范围和常用规格方面有所不同。 材质: A572Gr60:属于美国材料与试验协会(ASTM)标准下的A572系列高性能结构钢&…...

一次sql请求,返回分页数据和总条数
日常搬砖,总少不了需要获取分页数据和总行数。 一直以来的实践是编码两次sql请求,分别拉分页数据和totalCount。 最近我在思考: 常规实践为什么不是 在一次sql请求中中执行多次sql查询或多次更新,显而易见的优势: ① 能…...

2.5 pyautogui 实现微信自动回复
第四节:实战微信自动回复 课程目标 学习如何通过pyautogui完成微信自动回复 课程内容 编码实现 import pyautogui as pg import time from pyautogui import ImageNotFoundException import pyperclip from cnocr import CnOcr import random ocr CnOcr() msg…...

观存储历史,论数据未来
数据存储 这几天我反复观看了腾讯云社区的《中国数据库前世今生》纪录片,每次的感受都大相径庭。以下是我在这段时间里对纪录片的两个不同感想,希望感兴趣的小伙伴们也能去观看一番。 一个是关于国产数据库的发展趋势的探讨:https://blog.c…...

linux:对目录的操作
一、对目录操作 1,打开目标目录 2.读取目录,, 3.关闭目录 目录 当文件看,只不过操作函数和操作文件函数不一样。 *1.opendir DIR *opendir(const char *name); 功能:打开一个目录获得一个目录流指针 参数:name:目录名 返回值…...

详解Redis 高可用的方式 Redis Cluster
Redis 高可用方式 Redis 提供了多种高可用性方案,主要包括以下几种方式: 主从复制(Replication) 主从复制是最基本的高可用性方案,通过将数据从一个主节点复制到多个从节点来实现数据的冗余和读写分离。主节点负责所…...

$clog2(1)=0
项目场景: 写ip 时, 使用参数化的方式实现2w1r 时,出现计算读返回index 时,减下溢! 问题描述 verilog中会使用parameter 参数化,例如使用dpth 和$clog2(dpth)addr 。 常见的写法没有什么问题。 module …...

开发学习日记1
用这个系列博客记录下学习开发的一些小收获 git的使用: 说来惭愧,学到了大二,git的使用还是一团糟,记录一下如何使用git进行团队合作开发 当要加入其他人的项目时首先你要创建自己的分支(克隆一下其他分支ÿ…...

孙宇晨领航波场TRON:引领数字资产迈向崭新纪元
在风起云涌的数字资产领域,孙宇晨这个名字始终与创新、突破和引领紧密相连。作为波场TRON的创始人,他不仅是一位远见卓识的领导者,更是推动数字资产迈向新纪元的坚实力量。 自波场TRON诞生以来,孙宇晨便以其敏锐的洞察力…...

python运维(twenty-four day)
一、python基础 1、环境python2、python3 [rootpython ~]# yum list installed | grep python #检查是否有python包 [rootpython ~]# yum list installed | grep epel #检查是否有epel包 [rootpython ~]# yum -y install epel-release [rootpython ~]# yum -y instal…...

Eureka原理实践
1. 简介 1.1. 概述 Eureka是Netflix开源的一个服务注册与发现框架,它在微服务架构中扮演着至关重要的角色。 Eureka由两个核心组件组成: Eureka Server(服务注册中心):负责存储、管理和提供服务实例信息,如服务名、IP地址、端口号等。Eureka Server通常采用集群部署以保…...

Ant-Design-Vue快速上手指南+排坑
1. 简介 1.1. 概述 Ant-Design-Vue是由阿里巴巴开源的一个基于Vue.js框架的企业级UI设计语言。它旨在帮助开发者构建设计优雅、体验流畅的企业级应用。Ant-Design-Vue提供了一系列高质量的Vue组件,包括表单、表格、布局、导航、图标等,可以帮助开发者快速搭建应用程序界面。…...

mysql5.7安装
1.创建一个software文件 2.先下载mysql的repo源 wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm 3安装源包 rpm -ivh mysql-community-release-el7-5.noarch.rpm 可能会报错 改成命令 rpm -ivh mysql-community-release-el7-5.noarch.rpm --nodeps…...

UE开发中的设计模式(三) —— 对象池模式
在FPS游戏中,射击会生成子弹,在命中敌人后子弹会被销毁,那么会导致子弹对象频繁地创建和销毁,会造成运行效率降低且会产生内存碎片问题,而对象池模式可以很好地解决这个问题。 文章目录 问题提出概述问题解决总结 问题…...

Mocha测试框架:JavaScript自动化测试的瑞士军刀
在JavaScript开发中,自动化测试是确保代码质量和可靠性的关键环节。Mocha是一个广泛使用的JavaScript测试框架,它支持多种断言库,允许开发者编写简洁、灵活的测试用例。Mocha特别适用于Node.js环境,但也可以在浏览器中运行。本文将…...

flask实现Streaming内容传输
当传输大量内存,以至于超出内存大小,一般http服务器会报500错误,这时可以使用Streaming流的方式来传输内容,类似ChatGPT和视频流那样的输出方式,flask里要用到生成器和直接响应。 from flask import stream_with_cont…...