自动驾驶3D目标检测综述(三)

前两篇综述阅读理解放在这啦,有需要自行前往观看:

第一篇:自动驾驶3D目标检测综述(一)_3d 目标检测-CSDN博客

第二篇:自动驾驶3D目标检测综述(二)_子流行稀疏卷积 gpu实现-CSDN博客

本篇是第三篇,从第四章开始介绍。


目录

一、单目3D目标检测

(一)仅基于图像的单目3D目标检测

1、单阶段基于锚点的方法

2、单阶段无锚点的方法

3、两阶段方法

4、潜力和挑战

(二)深度信息辅助的单目3D目标检测

1、基于激光雷达伪图像的方法

2、潜力和挑战

(三)先验引导的单目3D目标检测

1、目标形状

2、几何一致性

3、时间限制

4、分割

5、潜力和挑战

二、基于立体图像的3D目标检测

三、多视角3D目标检测


第四章 基于相机的3D目标检测

在这个章节主要介绍一些基于相机的3D目标检测的方法,分别会回顾和分析单目3D目标检测(又分为仅基于图像、深度信息辅助和先验引导的方法)、基于立体图像的3D目标检测和多相机下的3D目标检测方法。首先看一张基于相机3D目标检测方法的总体回顾图。

由图可以看到,基于立体图像和先验引导的3D目标算子最早被提出(2015年),紧接着是深度信息辅助的算子(2018年),再是仅基于图像的算子(2019),最后是多相机的3D目标算子(2021)。其中基于先验引导的算子方法最多,截止2022年共有19种不同的方法提出;基于多相机的算子方法最少,截止2022年仅有两种方法,分别是DERT3D和ImVoxelNet。

一、单目3D目标检测

单个图像所提供的深度信息有限(甚至可以说从单图像上无法获取深度信息),这也就导致了在3D空间中使用单图像进行目标检测非常困难。主要困难还是准确地预测3D目标的位置。虽然科学家们也在解决这个问题方面做出了很大的努力,例如例如几何约束和形状先验的方法从图像中推断深度信息,但问题仍未得到很好解决。单目的3D检测方法依旧比基于雷达的方法效果更差,这也是由于3D定义的能力较差,这也为整个研究界留下了一个开放性的挑战。

(一)仅基于图像的单目3D目标检测

启发于2D的检测方法,单目3D目标检测的一种直接的解决方案就是通过卷积神经网络从图像中回归得到3D边界框参数。这种直接回归的方法也就很自然地向2D检测网络架构借用了一些设计思路,并且能够以端到端的方式进行训练。这些方法能够被分为单阶段/两阶段或者基于锚点/无锚点的方法。仅基于图像的单目3D检测方法示意如下图所示:

可以看到分别是单阶段基于锚点的方法、单阶段无锚点和两阶段的方法。下面会详细介绍。

下图是这两种方法分类图:

1、单阶段基于锚点的方法

基于锚点的单目检测方法依靠的是一种置于每一个图像像素的2D到3D锚点框,并且使用了一种2D卷积神经网络从锚点中回归得到目标参数。每一个像素表示为[u,v],3D锚点框[w^{a},h^{a},l^{a},\theta ^{a}]_{3D},分别代表宽(width)、高(height)、长(length)和偏转角度。2D边界框[w^{a},h^{a}]_{2D},分别表示宽和高,深度信息锚点d^{a}是预先定义好的。一张图像首先通过卷积网络预测3D边界框的偏移量\delta _{3D}=[\delta _{x},\delta _{y},\delta _{z},\delta_{d},\delta _{w},\delta _{h},\delta _{l},\delta _{\theta }]和2D边界框偏移量\delta _{2D}=[\delta _{x},\delta _{y},\delta _{w},\delta _{h}]。于是,2D边界框b_{2D}=[x,y,w,h]可以解码为:

[x,y]_{2D}=[u,v]+[\delta _{x},\delta _{y}]_{2D}\cdot[w^{a},h^{a}]_{2D},

[w,h]_{2D}=e^{[\delta _{w},\delta _{h}]_{2D}}\cdot [w^{a},h^{a}]_{2D}

3D边界框b_{3D}=[x,y,z,l,w,h,\theta ]_{3D}可以解码为:

[u^{c},v^{c}] = [u,v]+[\delta _{x},\delta _{y}]_{3D}\cdot [w^{a},h^{a}]_{2D},

[w,h,l]_{3D}=e^{[\delta _{w},\delta _{h},\delta _{l}]_{3D}}\cdot [w^{a},h^{a},l^{a}]_{3D},

d^{c}=d^{a}+\delta _{3D},\theta _{3D}=\theta_{3D}^{a}+\delta_{\theta _{3D}},

其中[u^{c},v^{c}]是图像平面上的投影目标中心。最后,投影中心及其深度信息一起被转换成3D目标的中心[x,y,z]_{3D}:

d^{c}\cdot \begin{bmatrix} u^{c}\\ v^{c} \\ 1 \end{bmatrix}=K T \begin{bmatrix} x\\ y\\ x\\ 1 \end{bmatrix}_{3D}

其中K和T是摄像头的内参数和外参数。

2、单阶段无锚点的方法

单阶段无锚点的单目检测方法不借助锚点的辅助从图像中预测3D目标的各种属性。图像首先经过一个2D卷积神经网络然后再应用多个检测头单独预测目标的属性。检测头通常包含一个预测目标种类的种类检测头、一个预测大致中心点[u,v]的关键点预测头、一个基于中心点来预测中心偏移offset[\delta _{x},\delta _{y}]的偏移检测头、一个预测深度偏移\delta _{d}的深度检测头、一个预测目标尺寸[w,h,l]的尺寸检测头和一个预测目标偏转角\alpha的航向角检测头。三维目标的中心点[x,y,z]可以由投射中心[u^{c},v^{c}]和深度信息d^{c}得到:

d^{c}=\sigma ^{-1}\left ( \frac{1}{\delta _{d}+1} \right ),u^{c}=u+\delta _{x},v^{c}=v+\delta _{y}

d^{c}\cdot \begin{bmatrix} u^{c}\\ v^{c} \\ 1 \end{bmatrix}=K T \begin{bmatrix} x\\ y\\ x\\ 1 \end{bmatrix}_{3D}

这里的\sigma指的是sigmoid函数。目标的偏航角\theta可以由观察角\alpha转换得到:

\theta =\alpha +arctan\left ( \frac{x}{z} \right )

3、两阶段方法

两阶段单目检测方法通常是将传统的两阶段二维目标检测框架延伸到三维目标检测上。具体来说就是在第一阶段使用二维的检测器从输入特征图中生成二维边界框,然后在第二阶段通过从二维ROI中预测三维目标参数将二维边界框拓展到三维空间中。

4、潜力和挑战

这种仅基于图像的方法旨在通过修改的二维目标检测框架从图像中直接回归得到三维边界框参数。由于这些方法是从二维检测方法中获取灵感的,故它们也就自然地受益于二维目标检测和基于图像的网络架构的进步。大部分的方法可以不进行预训练和置后处理从而端到端的进行训练,而这是非常简单和高效的。

这种方法的关键挑战就是对于每个目标能够精准预测其深度信息d^{c}。然而,基于单目图像的深度评估是一个非常困难的问题,并且这个问题也会因为只有边框级别的监督信号而变得越来越严重。

(二)深度信息辅助的单目3D目标检测

在单目三维目标检测中深度评估是非常困难和具有挑战性的,为了能够得到更加精确的结果,许多文章中都采用了预训练的辅助性深度评估网络。具体一点就是单目图像首先经过一个预训练的深度评估器生成深度图像,接下来有两种处理单目图像和深度图像的方法:基于深度图像的方法融合图像和深度地图,采用一种专门的神经网络生成深度注意特征,这种特征能够增强检测性能。激光雷达伪图像将深度图像转换成一种激光雷达伪图像点云图,基于激光雷达的检测器被应用在点云上以预测三维目标。基于深度信息辅助的单目三维目标检测的大致阐述如下图所示:

这上面主要有三种方法:基于深度信息的单目三维目标检测方法、基于激光雷达伪图像的单目三维目标检测方法和基于碎片化的单目三维目标检测方法。

这些方法的分类如下表所示:

其中2D指的是二维的卷积神经网络,3D是点云的网络。

1、基于激光雷达伪图像的方法

基于激光雷达伪图像的方法将深度图像转换成激光雷达伪图像点云图,之后应用基于激光雷达的检测器从点云图中检测三维目标。Wang等人首先将激光雷达伪图像点云图作为一种数据表示方法引入,他们将深度地图D\epsilon \mathbb{R}^{H\times W}转换成伪点云图D\epsilon \mathbb{R}^{HW\times 3}。就是对于深度图像中每一个像素点[u,v]及其深度值d,相机坐标系统下的相应三维点坐标[x,y,z]按照以下公式进行计算:

x=\frac{\left ( u-c_{u} \right )\times z}{f_{u}},y=\frac{\left ( v-c_{c} \right )\times z}{f_{v}},z=d

[c_{u},c_{v}]代表相机主点,f_{u},f_{v}分别是水平和垂直坐标轴上的焦距。因此伪点云图D就能够通过在三维空间对深度地图中的每个像素点进行反向投影得到。D用作表示伪激光雷达点云图:其本质上是一种三维点云图但是是从深度图像而非真实激光雷达传感器中提取的。最终,将基于激光雷达的三维目标检测器应用在这种伪激光雷达点云图上来预测三维目标。有许多文章都尝试对其进行改进:有使用颜色信息对这种伪点云图进行增强的、还有引入实例分割的、设计渐进式坐标转换方案的、通过独立前景和背景的预测来增强基于像素的深度评估、从真实激光雷达点云中进行领域适应的以及一种新型物理传感器设计。

还有些人对传统利用伪激光雷达表示进行单目三维目标检测的观点进行挑战。他们进行深度调查并提供了一种有见地的观察:伪激光雷达表示的力量来自于坐标转换而不是点云表示。因此每个像素编码为一个三维坐标的坐标地图就可以通过获得与伪激光雷达点云表示相当的结果。这种观察让我们能够直接在坐标地图上应用二维卷积网络来预测三维目标,这样就省去了采用费时间的基于激光雷达的点云检测器的需要了。

2、潜力和挑战

深度信息辅助的单目三维目标检测方法更加追求通过预训练的深度预测网络来获得准确的深度信息。深度图像表示和伪激光雷达表示都能够很大程度上提高单目检测的性能。然而,与进需要三维边界框释文的仅基于图像的方法相比,预训练的深度预测网络需要更多昂贵的地面实况深度图,并且它也对端到端训练的整体框架产生更大的危害。另外,预训练的深度评估网络泛化能力差,预训练深度图通常在目标数据集上校准较差,尤其是其标准需要根据目标数据集进行调整。因此在用于深度预训练的源域和单目检测的目标域之间存在一条无形的域沟。鉴于驾驶场景通常都多样且复杂,在某一限制域进行的预训练深度网络可能在现实世界表现不那么好。

(三)先验引导的单目3D目标检测

许多方法都尝试通过采用来自图像的目标形状和场景几何的隐式先验知识解决单目三维目标检测方法的问题。先验知识能够通过引入预训练的子网络和辅助性任务获得,且它们能够提供额外信息或限制帮助精准定位三维目标。广泛使用的先验知识包括目标形状、几何一致性、时间限制以及分割信息。先验类型的展示如下图所示:

我们可以看到,形状先验知识通常是一些目标模型,如CAD模型、点线框架、SDF、点云和体素;几何一致性通常是二维到三维边界框一致性、关键点评估、目标高度深度限制、目标间关系和地平面限制;分割信息通常是将图像中不同目标进行分割;时间限制展示的一帧图像前后帧的图像对比。

这种方法的分类表如下:

1、目标形状

许多方法都直接从图像中对三维目标进行形状重建,重建的形状能够被进一步用来决定三维目标的位置和姿态。上述展示图中展示了五种重建表示:CAD(计算机设计辅助模型)、点线模型、SDF(有符号距离函数)、点和体素。

2、几何一致性

给一个外在矩阵T\epsilon SE\left ( 3 \right ),它能够将目标框架下的3D坐标转换成相机框架,并且相机内在矩阵K能够将3D坐标投影到图像平面,目标框架下的三维点[x,y,z]投影成图像像素左边[u,v]可以表示为:

d\cdot \begin{bmatrix} u\\ v\\ 1 \end{bmatrix}=KT\begin{bmatrix} x\\ y\\ z\\ 1 \end{bmatrix}

其中d是相机框架下转换后的3D坐标深度信息,上述公式提供了三维点和二维图像像素坐标之间的几何关系,这种关系可以用在支持预测的三维目标与图像上的二维目标之间一致性的许多种方法上。主要有五种集合限制的单目检测:2D到3D边界框一致性、关键点、目标高度到深度关系、物体间关系以及地平面限制。

在某些工作中,最小化重投影误差被用来支持2D到3D边界框的一致性。这些方法引入了后处理步骤来最优化3D目标参数,这通常是在图像上逐渐将3D边界框你拟合到2D边界框。

3、时间限制

三维目标时间关联也能作为一种强有效的先验知识。 时间目标关系已经被用作深度指令和带有三维卡尔曼过滤器的多框架目标融合。

4、分割

图像分割主要在两个方面帮到单目三维检测:在某些工作中,目标分割对实力形状重建至关重要;分割能够揭示图像像素在透视图视角下是否存在于三维目标内部,而这种信息能够帮助定位三维目标。

5、潜力和挑战

通过形状重建能够从图像中获得更多目标形状的细节信息,而这对三维目标检测是非常有帮助的。我们也能通过投影或渲染比较损失获得更多准确的检测结果。然而,对于这种方法仍有两项挑战:形状重建通常需要预训练一个重建网络这样一个额外步骤,这将破坏端到端单目检测管道的训练;其次,目标形状通常从CAD模型而非现实世界获得,这也就导致了增加了一项将重建目标泛化于现实世界场景中去的挑战。

几何一致性广泛应用并且能够提高检测精确度。然而,一些方法将几何一致性表述为一种最优化问题并在后处理中优化目标参数,这是非常耗费时间且破坏端到端的。

图像分割在单目三维检测中是非常有用的信息。然而,训练分割网络需要昂贵的像素注释。额外数据集上的预训练分割模型将会遇到泛化的问题。

二、基于立体图像的3D目标检测

问题和挑战 基于立体图像的三维目标检测旨在通过一对图像检测三维目标。相比于单目图像,一对立体图像能够提供更多用于推测精确深度信息的几何限制。因此,基于立体图像的方法通常能够在检测性能上获得比单目检测更好的结果。然而,立体相机通常需要非常精确的校准和同步,这在实际应用上难以实现。

给予立体图像方法的阐述如下图所示:

这种方法的分类表如下:

立体匹配和深度估计 一个立体相机拍摄一次能够产生一对图像,即左图像I_{L}和右图像I_{R}。通过立体匹配技术,利用多视图几何从成对的立体图像估计视差图。理想状态下,左图像上的每个像素点(u,v)都在右图像上有一个对应的像素点(u,v+p),其中p是视察值。这样两个像素点就在图像上的相同三维位置。最终,多视图也可以通过下面的公式转换成深度图像:

d=\frac{f\times b}{p}

其中d是深度值,f是焦距,b是立体相机的基准线长度。来自图像的基于像素的多视图限制相比于单目深度预测提供了更加准确的深度评估。

基于二维检测的方法 传统二维目标检测框架能够经过修改来解决立体图像检测问题。具体而言,成对的立体图像传入一个基于图像的检测器和Siamese骨干网络分别为左右图像生成左右兴趣区域(RoIs)。在第二阶段左右兴趣区域被融合用于评估三维目标参数。立体R-CNN首次提出拓展二维检测框架到立体三维检测。这种设计样式已经被应用在很多文章中:Qin提出了一种在第二阶段的新颖的立体三角剖分学习子网络;Xu等人通过以目标为中心的立体匹配和实例分割学习实例级差异;Peng等人提出了一种自适应实例级时差估计;Chen等人介绍了一种基于能量的立体三维目标检测框架。

基于伪激光雷达的方法 从立体图像中预测的视差图能够转换成深度图像然后再转为伪激光雷达点。因此,与单目检测方法相似,伪激光雷达表示也能够用于基于立体图像的三维目标检测方法中。这些方法尝试改进立体匹配中的视差估计,以实现更精确的深度预测。You等人在立体匹配网络中引入了一种深度成本量;Qian等人提出了一种端到端立体匹配和检测框架;Kongigshof等人使用语义分割并为分别为前景和背景单独预测视差;Garg等人提出了一种视差估计的Wassertein损失。

基于体积的方法 有许多方法直接跳过伪激光雷达表示并且直接在三维立体体积上执行三维目标检测。DSGN提出了一种从立体匹配网络中衍生出的三维几何体积并在体积上应用一种基于网格的三维检测器检测三维目标。Guo和Wang等人分别通过知识蒸馏和三维特征体积对其进行了改进。

潜力和挑战 与单目检测方法相比,基于立体图像的方法通过立体匹配技术能够获得更精确的深度信息和视差估计,这同样带来了更强壮的目标定位能力且显著提高了三维目标检测性能。然而,辅助性的立体匹配网络也带来了额外时间和内存占用。与基于激光雷达的三维目标检测相比,从立体图像中检测能在自动驾驶场景中够作为一个更便宜的三维感知的解决方案。然而,在基于立体图像和基于激光雷达的三维目标检测方法之间仍存在不可忽视的性能差距。

三、多视角3D目标检测

问题和挑战 自动驾驶车辆通常配备多摄像头以从多视角获取完整的环境信息。最近,多视角三维目标检测迅速发展,一些多视角三维检测方法视图通过投影多视角图像到鸟瞰图来构造一个统一的BEV空间,之后将基于BEV的检测器应用到统一的BEV特征图之上检测三维目标。没有精确的深度信息是很难完成从相机视角到鸟瞰图的转换的,所以图像像素和他们对应的鸟瞰图位置无法完美对齐。如何完成从相机视角到鸟瞰图视角的转换是这种方法的主要挑战。其他方法采用由鸟瞰图视角生成的三维目标查询并且应用跨视图注意的Transformers进行目标查询和多视图图像特征。主要挑战就是如何恰当地生成三维目标查询和在Transformers中设计更多有效的注意方法。

多视角三维目标检测方法阐述如下:

基于BEV的多视角三维目标检测 LSS Philion和Fidler是一项开创性的工作,它提出了一种lift-splat-shoot样式来解决多视角相机的BEV感知问题。LSS主要有三个步骤。Lift:基于堆栈的深度预测被用于图像像素、多视角图像特征被提升至具有深度堆栈的三维截锥。Splat:三维截锥被溅射进一个统一的BEV平面、图像特征以端到端的方式转换成BEV特征。Shoot:下游感知任务在BEV特征图上执行。这种范式已经成功应用于许多下面的工作中:BEVDet使用一种四步骤的多视角检测管道来改进LSS,其中图像视角编码器从多视角图像中编码特征,视角转换器将图像特征从相机视角转换成鸟瞰图,BEV编码器进一步编码BEV特征,最后检测头应用到BEV特征上进行三维检测。Huang等人工作中的主要瓶颈是深度预测,因为这总是不精确的且会导致相机视角到鸟瞰图的不精确特征转换。为了获得更精确的深度信息,许多文章采用最小化从多视角图像和过去帧图像中获取的附加信息,例如Li等人采用显示深度监督,Wang等人引入环绕视角时间立体,Li等人使用东塔时间立体图像,Park等人结合短期和长期时间立体图像用作深度预测。另外,也有些文章(Xie等人,Huang等人)完全摈弃了深度堆栈的设计和分类深度预测。他们仅假设沿射线的深度分布不均匀,所以相机到鸟瞰图转换也能够以更高的效率完成。

基于查询的多视角三维目标检测 除了基于BEV的方法,还有一种方法中目标查询从鸟瞰图中生成并与相机视图特征交互。受到目标检测中Transformers改进的启发,DETR3D引入了一组稀疏的三维目标查询并且每组查询斗鱼一个三维参考点相关联。三维参考点通过投影它们的三维位置到多视角图像平面后目标查询与图像特征通过Transformers层进行交互进行图像特征的收集。最终,每一个目标查询将会解码出一个三维边界框。下面许多文章视图改进这种设计范式,例如引进空间感知跨视图注意(Doll等人)并在图像特征上添加三维位置嵌入(Liu等人)。BEVFormer(Li等人)介绍了一种基于密集网格的BEV查询并且每一个查询与一组涵盖一组三维参考点的柱子相关联。空间交叉注意应用在目标查询和空间图像特征上以获取空间信息,时间自注意用于目标查询和过去的BEV查询以融合时间信息。

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

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

相关文章

MySQL数据库学习(持续更新ing)

1. 什么是数据库?什么是数据库管理系统?什么是SQL?他们之间的关系是什么? 数据库:Database, 简称DB。按照一定格式存储数据,一些文件的组合。 数据库管理系统:DataBaseManagement&…

【线程】Java线程操作

【线程】Java线程操作 一、启动线程1.1 run()和start()的区别 二、终止线程三、等待线程四、线程的状态 一、启动线程 Java中通过start()方法来启动一个线程,其次我们要着重理解start()和run()的区别。 1.1 run()和start()的区别 我们通过一份代码来进行观察&…

MySQL学习/复习10视图/用户/权限/语言连接数据库

一、视图 1.1创建视图 1.2视图影响基表 1.3基表影响视图 1.4删除视图 1.5视图使用规则 二、数据库的用户 2.1mysql中的user表 注意事项:主机/用户名/密码/权限 2.2用户的创建 注意事项:设置密码与登录地点需谨慎 2.3删除用户 注意事项:% 2.4…

Python 中的三重引号

Python 中的三重引号,我之前以为只有长注释的作用,仔细查了下,原来还有给函数、类添加说明的作用。这个功能太好了,大大增加了代码的可读性。 具体的作用,总计如下。 1. 定义长字符串 其实三重引号的最直接作用是用…

rust中解决DPI-1047: Cannot locate a 64-bit Oracle Client library问题

我们在使用rust-oracle crate连接oracle进行测试的过程中,会发现无法连接oracle,测试运行过程中抛出“DPI-1047: Cannot locate a 64-bit Oracle Client library”错误。该问题是由于rust-oracle需要用到oracle的动态连接库,我们通过安装orac…

Python + 深度学习从 0 到 1(00 / 99)

希望对你有帮助呀!!💜💜 如有更好理解的思路,欢迎大家留言补充 ~ 一起加油叭 💦 欢迎关注、订阅专栏 【深度学习从 0 到 1】谢谢你的支持! ⭐ 什么是深度学习? 人工智能、机器学习与…

太通透了,Android 流程分析 蓝牙enable流程(应用层/Framework/Service层)

零. 前言 由于Bluedroid的介绍文档有限,以及对Android的一些基本的知识需要了(Android 四大组件/AIDL/Framework/Binder机制/JNI/HIDL等),加上需要掌握的语言包括Java/C/C等,加上网络上其实没有一个完整的介绍Bluedroid系列的文档&#xff0…

【MySQL课程学习】:MySQL安装,MySQL如何登录和退出?MySQL的简单配置

🎁个人主页:我们的五年 🔍系列专栏:MySQL课程学习 🌷追光的人,终会万丈光芒 🎉欢迎大家点赞👍评论📝收藏⭐文章 目录 MySQL在Centos 7环境下的安装: 卸载…

安宝特分享 | 如何利用AR技术革新医疗实践:从远程急救到多学科协作

AR技术在国内外医院的应用 在现代医疗环境中,患者面临的挑战依然严峻:看病难、看病远、看病急。这些问题不仅影响了患者的治疗效果,也让医务工作者倍感压力。幸运的是,随着增强现实(AR)技术的发展&#xf…

macOS 无法安装第三方app,启用任何来源的方法

升级新版本 MacOS 后,安装下载的软件时,不能在 ”安全性与隐私” 中找不到 ”任何来源” 选项。 1. 允许展示任何来源 点击 启动器 (Launchpad) – 其他 (Other) – 终端 (Terminal): 打开终端后,输入以下代码回车: …

Rust中Tracing 应用指南

欢迎来到这篇全面的Rust跟踪入门指南。Rust 的tracing是一个用于应用程序级别的诊断和调试的库。它提供了一种结构化的、异步感知的方式来记录日志和跟踪事件。与传统的日志记录相比,tracing能够更好地处理复杂的异步系统和分布式系统中的事件跟踪,帮助开…

介绍一下strset(arr,ch);(c基础)

hi , I am 36 适合对象c语言初学者 strset(arr,ch)函数 功能 是将arr数组全部赋值为ch 格式 #include<string.h> strset(arr,ch); 返回值为arr 链接分享一下arr的意义(c基础)(必看)(牢记)-CSDN博客 hi I am 36.thanks for your looking .&#x1f44d;&#x1…

Web3与智能合约:区块链技术下的数字信任体系

随着互联网的不断发展&#xff0c;Web3代表着我们迈入了一个去中心化、更加安全和智能的网络时代。作为Web3的核心组成部分&#xff0c;区块链技术为智能合约的出现和发展提供了强有力的基础。智能合约不仅仅是自动化的代码&#xff0c;它们正逐步成为重塑数字世界信任体系的关…

如何更改手机GPS定位

你是否曾想过更改手机GPS位置以保护隐私、玩游戏或访问受地理限制的内容&#xff1f;接下来我将向你展示如何使用 MagFone Location Changer 更改手机GPS 位置&#xff01;无论是在玩Pokmon GO游戏、发布社媒贴子&#xff0c;这种方法都快速、简单且有效。 第一步&#xff1a;下…

青少年编程等级考试C++一级,硬币反转问题

代码 #include<iostream>using namespace std;bool a[300];int main(){ int n,m; cin >> n >> m; for(int i 1;i < m;i) { for (int j 1;j < n;j) { if( j % i 0) { a[j] !a[j];…

微信小程序技术架构图

一、视图层1.WXML&#xff08;WeiXin Markup Language&#xff09; 这是微信小程序的标记语言&#xff0c;类似于 HTML。它用于构建小程序的页面结构。例如&#xff0c;通过标签来定义各种视图元素&#xff0c;如<view>&#xff08;类似于 HTML 中的<div>&#xff…

《生成式 AI》课程 作业6 大语言模型(LLM)的训练微调 Fine Tuning -- part2

资料来自李宏毅老师《生成式 AI》课程&#xff0c;如有侵权请通知下线 Introduction to Generative AI 2024 Spring 来源背景说明 该文档主要介绍了国立台湾大学&#xff08;NTU&#xff09;2024 年春季 “生成式人工智能&#xff08;GenAI&#xff09;” 课程的作业 5&#…

gocv调用opencv添加中文乱码的解决方案

前言 相信很多做视觉的同学在使用opencv给图片添加中文文字的时候会出现这样的乱码显示: 而实际上你期望的是“告警时间:2011-11-11 11:11:11 告警类型:脱岗检测告警 Area:XXXXX Camera:Camera001-001”这样的显示内容,那么这篇文章我将用很简单的方法来解决乱码问题,只需…

【自用】常用希腊字母表

常用希腊字母表 原文链接 https://xilazimu.net/

【UE5】在材质中计算模型在屏幕上的比例

ViewProperty节点有很多有意思的变量 例如用 ViewProperty 的 tan ⁡ ( FOV / 2 ) \tan(\text{FOV} / 2) tan(FOV/2) 输出&#xff0c;用它计算模型占屏幕的比例。 &#xff08;常用于for运算的次数优化&#xff0c;也可以用于各种美术效果&#xff09; ScaleOnScreen Obje…