【论文阅读笔记】Learning to sample
Learning to sample
- 前沿
- 引言
- 方法
- 问题声明
- S-NET
- 匹配
- ProgressiveNet: sampling as ordering
- 实验
- 分类
- 检索
- 重建
- 结论
- 附录
前沿
这是一篇比较经典的基于深度学习的点云下采样方法
核心创新点:
- 首次提出了一种学习驱动的、任务特定的点云采样方法
- 引入了两种采样网络:
S-NET:为不同采样大小训练独立网络
ProgressiveNet:可以按重要性对点进行排序,实现任意采样比例 - 通过两个损失函数来优化采样:
任务损失:使采样点适合特定任务
采样损失:确保生成点接近原始点云
paper:https://arxiv.org/abs/1812.01659
code:
当点云数量较多时,不适合拿来直接做下游任务,流行的采样技术是最远点采样 (FPS)。然而,FPS 与下游应用程序(分类、检索等)无关。基本假设是,最小化最远点距离,如FPS所做的那样,是其他目标函数的一个很好的代理。我们提出了一个深度网络来简化三维点云。称为 S-NET 的网络采用点云并生成针对特定任务优化的较小点云。在两个标准数据集上进行实验,与 FPS 进行对比显示出更好的结果。
引言
点云数据近年来使用愈加频繁,点云数据的下采样方法也随之更加重要。可以降低功耗、计算成本和通信负载,等等。常规方法中,如随机采样、均匀采样、最远点采样(Farthest Point Sampling, FPS)。点云已被广泛用于分类、部分分割、语义分割、检索等任务,相关技术如自动编码、生成、补全和上采样也被广泛探索。但在这篇文章之前,还没有专门针对下采样的“学习类方法”。
我们提出了一种简化网络,称为S-NET,它基于PointNet[1]的体系结构学习生成一个较小的(简化的)点云,该点云针对下游任务进行了优化,例如分类、检索或重建。
简化的点云必须平衡两个相互冲突的约束。一方面,我们希望它保留原始形状的相似性。另一方面,我们希望将其优化为后续任务。
我们通过训练网络生成一组满足两个目标的点来解决这个问题:采样损失和任务的损失。采样损失驱动生成的点接近输入点云。任务损失确保点最适合任务。
FPS的一个优点是它对原始点的子集进行采样。相比之下,S-NET 生成的简化点云不能保证是输入点云的子集,我们在推理时执行后处理步骤,我们将生成的点与输入点云进行匹配,并获得其中的一个子集,即一组采样点(见图 1)。实验表明,与 FPS 相比,使用我们的采样点实现了对多个任务的更好结果。
我们的方法可以被认为是一种特征选择机制[27,28]。每个点都是底层形状的特征,我们试图选择对任务贡献最大的特征。它还可以解释为视觉注意的一种形式[29,30],将后续任务网络集中在重要点上。
S-NET 被训练以输出固定的样本量,这意味着我们需要为每个目标大小训练不同的 S-NET。为了克服这个限制,我们引入了称为 ProgressiveNet 的 S-NET 的扩展。ProgressiveNet 对任务的重要性排序点。这允许在推理时选择样本大小,从而允许动态细节级别的管理。
所提出的采样方法应用于三个不同的任务:点云分类、检索和重建。我们将我们的方法与常见的非数据驱动方法进行比较:随机抽样和 FPS。对于第一个任务,我们展示了更好的分类精度;在第二个任务中,我们展示了改进的检索结果;最后我们得到了更低的重建误差。
总而言之,我们的主要贡献是:
• 点云的特定任务数据驱动采样方法;
• 渐进式采样方法,根据点与任务的相关性对点进行排序;
• 使用采样点云进行点云分类、检索和重建的性能改进。
方法
问题声明
给定一个点集 P = p i ∈ R 3 , i = 1... n P = {p_i ∈ R^3, i = 1...n} P=pi∈R3,i=1...n,样本大小 k ≤ n k ≤ n k≤n 和任务网络 T T T ,找到 k k k 个点的子集 S ∗ S^∗ S∗,以最小化任务网络的目标函数 f f f
S ∗ = arg min S f ( T ( S ) ) , S ⊂ P , ∣ S ∣ = k < n . S^*=\argmin_S f(T(S)), S\subset P,|S|=k<n. S∗=Sargminf(T(S)),S⊂P,∣S∣=k<n.
这个问题带来了挑战,因为采样似乎类似于池化,但在池化中,池化值是向前传播的,因此可以计算关于它的梯度。然而,离散采样类似于“argpooling”,其中传播的值不能增量更新。因此,不能直接训练采样操作。因此,我们提出了一个两步过程:首先,我们使用神经网络,即 S-NET,生成一组点。其次,我们将生成的点与输入点云进行匹配,得到其点的子集,即采样点。
图 1 说明了该过程。S-NET 的输入是一组 n 个 3D 坐标,即点,表示 3D 形状。S-NET 生成点的输出。S-NET 后跟一个任务网络。任务网络在 n 个点的输入上进行了预训练,以在点云(即分类、检索或重建)上执行给定的任务。在 S-NET 的训练和测试期间保持固定。这确保了采样被优化到任务中,而不是被优化到任意采样的任务。
在训练阶段,生成的点被馈送到任务网络。通过最小化任务损失,这些点一方面针对任务进行了优化。我们使用一个额外的采样正则化损失项,它鼓励每个生成的点接近输入点之一,并强制生成的点分布在输入点云上。在推理时,将生成的点与输入点云进行匹配,以获得其子集。这些是采样点,我们过程的最终输出。这些点通过任务网络,并评估其性能。
我们提出了两个采样版本:S-NET 和 ProgressiveNet。在第一个版本(图 1)中,我们为每个样本大小训练不同的采样网络。在第二个(图 2)中,我们训练了一个网络**,该网络可用于生成任何小于输入大小的样本量**。
S-NET
S-NET的体系结构遵循等PointNet 网络的体系结构。输入点经历一组 1×1 的卷积层,从而产生每个点的特征向量。然后,使用对称特征最大池化操作来获得全局特征向量。最后,我们使用几个全连接层。最后一层的输出是生成的点集。
让我们将生成的点集表示为 G G G,输入点集表示为 P P P。我们构建了一个采样正则化损失,由三项组成:
L f ( G , P ) = 1 ∣ G ∣ ∑ g ∈ G min p ∈ P ∥ g − p ∥ 2 2 L_{f}(G, P)=\frac{1}{|G|} \sum_{g \in G} \min _{p \in P}\|g-p\|_{2}^{2} Lf(G,P)=∣G∣1g∈G∑p∈Pmin∥g−p∥22
该公式最小化生成点 G 中的每个点 g 到 P 中最近点 p 的平方距离的平均值。
L m ( G , P ) = max g ∈ G min p ∈ P ∥ g − p ∥ 2 2 L_{m}(G, P)=\max _{g \in G} \min _{p \in P}\|g-p\|_{2}^{2} Lm(G,P)=g∈Gmaxp∈Pmin∥g−p∥22
该公式首先找到生成点集G 中每个点 g 到输入点集 P 中最近点 p 的平方距离,然后选取这些最小距离中的最大值。这样做是为了减少生成点集中最远的点与输入点集中最近点之间的距离,从而防止生成点集中的某些点远离输入点集,这会增加匹配过程中的不确定性。
L b ( G , P ) = 1 ∣ P ∣ ∑ p ∈ P min g ∈ G ∥ p − g ∥ 2 2 L_{b}(G, P)=\frac{1}{|P|} \sum_{p \in P} \min _{g \in G}\|p-g\|_{2}^{2} Lb(G,P)=∣P∣1p∈P∑g∈Gmin∥p−g∥22
该公式计算输入点 P 中每个点 p 到生成点 G 中最近点 g 的平方距离的平均值。
L f L_f Lf 和 L m L_m Lm 使得 G G G 中的点在平均情况和最坏情况中分别接近 P i P_i Pi中的点。这旨在鼓励在随后的匹配过程中实现紧密匹配。我们发现混合平均和最大操作可以加速收敛。 L b L_b Lb 确保生成的点在输入点上均匀分布,从而减少匹配过程中的冲突。采样正则化损失是这三项的加权和:
L s ( G , P ) = L f ( G , P ) + β L m ( G , P ) + ( γ + δ ∣ G ∣ ) L b ( G , P ) L_{s}(G, P) = L_{f}(G, P)+\beta L_{m}(G, P) +(\gamma+\delta|G|) L_{b}(G, P) Ls(G,P)=Lf(G,P)+βLm(G,P)+(γ+δ∣G∣)Lb(G,P)
请注意,这是倒角距离(chamfer distance)的推广,当 β = 0 , γ = 1 和 δ = 0 β=0,γ=1和δ=0 β=0,γ=1和δ=0时实现。此外,我们将 L t a s k L_{task} Ltask表示为任务网络损失。S-NET 总损失为:
L S − N E T ( G , P ) = L task ( G ) + α L s ( G , P ) L^{S-N E T}(G, P)=L_{\text {task }}(G)+\alpha L_{s}(G, P) LS−NET(G,P)=Ltask (G)+αLs(G,P)
其中,α 控制正则化的权衡。S-NET 的输出是一个 k×3 的矩阵,其中 k 是样本大小,我们为每个 k 单独训练。
匹配
生成的点 G G G 不能保证为输入点 P P P 的子集。为了获得输入点的子集,我们将生成的点与输入点云进行匹配。
匹配两个点集的一种广泛使用的方法是地球移动距离(EMD)[17,23,26,40]。EMD 找到最小化对应点平均距离的集合之间的双射,而点集需要具有相同的大小。然而,在我们的例子中,G 和 P 的大小不同。我们研究了两种匹配方法。第一个将 EMD 适应不均匀的点集。第二个基于最近邻 (NN) 匹配。在这里,我们描述了后者,它产生了更好的结果。读者可以参考补充材料了解有关其他匹配方法的详细信息。
在基于 NN 的匹配中,每个点 x ∈ G 被替换为其最接近的欧几里得对应点 y^∗ ∈ P :
这里有点类似于 VQVAE 或者 VQGAN 中的量化操作
y ∗ = argmin y ∈ P ∥ x − y ∥ 2 . y^{*}=\underset{y \in P}{\operatorname{argmin}}\|x-y\|_{2} . y∗=y∈Pargmin∥x−y∥2.
由于 G 中的几个点可能最接近 P 中的同一点,因此唯一采样点的数量可能小于请求样本量。
因此,我们删除重复点并获得初始采样集。然后,我们通过运行最远点采样(FPS)[2]来完成这个集合,直到G的大小,在每一步中,我们添加离当前采样集最远的P点。匹配过程仅在推理时应用,作为推理最后一步。在训练期间,生成的点由任务网络处理,因为匹配是不可微的,不能将任务损失传播回 S-NET。
ProgressiveNet: sampling as ordering
S-NET 被训练以将点采样为单个预定义的样本大小。如果需要多个样本量,则需要训练多个 S-NET。但是,如果我们想训练一个可以产生任何样本大小的网络,即以任何采样率对输入进行采样。为此,我们提出了 ProgressiveNet。ProgressiveNet被训练来取给定大小的点云并返回相同大小的点云,由相同的点组成。但是,虽然输入的点是任意排序的,但输出的点按其与任务的相关性排序。这允许对任何样本大小进行采样:为了获得大小为 k 的样本,我们只需取 ProgressiveNet 的输出点云的前 k 个点并丢弃其余部分。架构最后一个完全连接的层大小等于输入点云大小(有3n个元素)。
为了训练 ProgressiveNet(图 2),我们定义了一组大小 C s = 2 1 , 2 2 , 。 . . , 2 l o g 2 ( n ) C_s = {2^1, 2^2,。.., 2^{log2(n)}} Cs=21,22,。..,2log2(n)。对于每个大小 c ∈ C s c ∈ C_s c∈Cs,我们计算任务损失项和采样正则化损失项,使得总 ProgressiveNet 的损失变为:
L ProgressiveNet ( G , P ) = ∑ c ∈ C s L S − N E T ( G c , P ) L^{\text {ProgressiveNet }}(G, P)=\sum_{c \in C_{s}} L^{S-N E T}\left(G_{c}, P\right) LProgressiveNet (G,P)=c∈Cs∑LS−NET(Gc,P)
其中 L S − N E T L^{S-NET} LS−NET 是等式 6 中定义的损失项, G C G_C GC 是 ProgressiveNet 生成的点的前 c 个点(输出层的前 3c 个元素)。这个损失函数定义了点子集的嵌套结构。例如,由两点组成的第一个子集在所有术语 L S − N E T ( G C , P ) L^{S-NET}(GC, P) LS−NET(GC,P) 中用于 c ≥ 2。因为这个子集在所有术语中都使用,所以它包含在所有更大的子集中。类似地,前 4 个点定义了第二个子集,其中包括第一个子集并且是所有更大子集的一部分。
在这个训练过程中,前 k 个生成点(对于任何 k)被优化为适合手头的任务作为一个独立集,并与前面的点集成以创建更大的集合,这将改善给定任务的结果。这确保了对任务更重要的点将出现在生成的点集中,而额外的点将给出边际效用递减,从而导致点云的面向任务的渐进分解[41]。在推理时,生成的点(ProgressiveNet 的输出层)与输入点云匹配,使用我们在第 3.2 节中用于 SNET 的相同匹配过程。我们将生成的点的顺序转移到它们的匹配点。为了获得特定的样本量 k,我们取前 k 个采样点。
实验
我们将 S-NET 应用于三个任务:点集分类 [1]、检索和重建 [17]。对于分类和检索,我们采用Qi等人[1]和PointNet[1]提供的ModelNet40[42]点云数据作为任务网络。对于重建,我们使用ShapeNet Core55存储库[43]和Achlioptas等人[17]的点集自动编码器。随机抽样和 FPS 被用作替代的非数据驱动采样方法,以便与我们提出的方法进行比较。为了公平比较,我们**只在匹配过程之后使用 S-NET 点,因此我们的采样点和替代方法的点都是输入点云的子集。**进一步的实验细节可以在补充材料中找到。
分类
我们报告了 ModelNet40 数据集上的实例分类结果,采用官方训练测试拆分。我们使用 PointNet 的完整版本作为 S-NET 的任务网络和 ProgressiveNet 的 PointNet 的普通版本(以节省训练时间),除非另有说明。
图 3 显示了 PointNet 在完整数据(每个点云 1024 个点)上进行训练并在不同大小的样本上进行测试时的分类精度。我们比较了几种不同的采样方法:随机采样与输入点上的均匀分布,FPS 和 S-NET。我们训练了 10 个不同的 S-NET,对于 k ∈ {2, 4, 8,., 1024} 分。采样率定义为 n/k = 1024/k。我们观察到,使用 S-NET 采样点的分类精度等于或优于在任何采样率下使用 FPS 的点,边距高达 34.2%(对于采样率 32)。
表 1 显示,当在 S-NET 采样的点上进行训练时,PointNet 的准确度也更高。此表中的每个数字代表一个不同的 PointNet,每个 PointNet 都在使用不同采样方法采样的特定大小的点云上进行训练和测试。例如,我们看到,在使用 S-NET 时,仅在 16 个点的点云上进行训练和测试的 PointNet 实现了 85.6% 的准确率,而 FPS 仅为 76.7%。这表明 S-NET 不过度拟合它所训练的分类器的特定实例。相反,它以使采样集易于分类的方式对点进行采样,从而在数据中的不同类别之间产生强烈的区分。
ProgressiveNet 在图 4 中,我们比较了 PointNet vanilla 在 S-NET 采样的点上的准确性(在这种情况下使用 PointNet vanilla 训练)与 ProgressiveNet 采样的点的准确性。评估是针对所有样本量完成的范围[2,1024]。S-NET 结果来自 10 个不同的 SNET,每个 NET 针对特定样本大小进行训练,大小为 k ∈ {2, 4, 8,., 1024} 分。对于这些值之间的样本量,我们采用针对较低样本量训练的 S-NET,然后使用 FPS 完成所需的大小。例如,为了获得大小为 48 的样本**,我们采用了 S-NET 采样的点,该点经过训练可以对 32 个点进行采样,然后进行 16 步 FPS。渐进式结果来自一个输出大小为 1024 的 ProgressiveNe**t,它使用大小为 Cs = {2, 4, 8, …, 1024}。
我们观察到 S-NET 对它训练的样本量具有更好的性能,而 ProgressiveNet 对介于两者之间的任何样本量都表现得更好。这显示了 ProgressiveNet 的优势,它按优先级对点进行排序,以便准确度在样本大小上近似单调增加。
S-NET 假设任务网络已经经过训练。这将导致在非常大的点云的情况下出现问题。我们表明,可以在 FPS 采样的点云上训练任务网络并使用它来训练 S-NET。然后可以使用生成的 S-NET 将任务网络重新训练为更高的准确性。
有关所提出的训练和测试过程的说明,请参见图 5。以下小规模模拟证明了这一点:我们使用 FPS 为每个点云采样 ModelNet40 到 k = 32 个点,并在这些采样点上训练 PointNet。这是我们的基线。基线在测试集上的准确率为 82.2%。当我们用大小为 1024 的点云馈送这个经过训练的 PointNet 时,准确率仅为 46.6%。然后,我们使用 32 大小的点云训练集和基线 PointNet 作为任务网络来训练 S-NET。然后我们使用 S-NET 再次采样 ModleNet40 的大小为 k = 32,这次使用 S-NET。最后,我们在 S-NET 采样的点上训练 PointNet。在测试集上重新训练 PointNet 的准确性提高到 86.0%。使用 S-NET 允许我们在不在更大的点云上进行训练的情况下提高 PointNet 的准确性。
PointNet 类网络的时间复杂度主要由它们的逐点卷积层组成,因此强烈依赖于输入点云的大小。S-NET 的空间复杂度是其输出大小 k 的线性函数。S-NET 在空间(参数数量)和推理时间(浮点运算的数量)之间进行权衡。例如,级联 S-NET 对 1024 到 16 个点的点云进行采样,与在完整点云上运行 PointNet 相比,使用以下 PointNet 将推理时间减少了 90% 以上,空间仅增加了 5%。请参阅补充材料中的全部细节。
我们应用匹配后处理步骤将自己与 FPS 直接比较。但是,可能存在 k 个输出点不必是原始点云的子集的设置。在这种情况下,我们可以直接使用 S-NET 生成的点,放弃匹配步骤。可以使用生成的点或采样点。第三种替代方法是在两者之间进行插值的,即使用离原始输入点很远的点。这是通过将每个生成的点与其匹配的采样点进行插值来完成的,以获得它们之间的直线上的第三个点,不超过采样点。**图 6 显示,当输入生成的点时,PointNet 的准确度更高。**对于归一化为单位球体的点云,我们发现选择 푡 = 0.05 会导致分类精度在采样点和生成点的准确度之间呈中间方向。请注意,푡 是在推理时设置的。
临界集采样 Qi等人[1]定义的临界集是导致最大池化特征的点集。我们的方法的一个合理替代方法可能是对贡献最多特征的临界点进行采样。我们尝试了这种方法,发现它仅在小采样率下是可行的。请参阅补充材料中的全部细节。
检索
我们现在表明,使用 S-NET 而不是 FPS 可以带来更好的检索结果。具体来说,我们采用用 PointNet 训练的 SNET 进行分类作为任务网络,而无需重新训练它。我们对点进行采样馈送到PointNet,并使用其倒数第二层作为形状描述符。检索是基于该形状描述符上的 L2 距离完成的。我们对 ModelNet40 测试集中的每个形状重复实验,用作查询形状。实验在 S-NET 和 FPS 的不同样本量下重复。表 2 总结了不同采样率和采样方法的平均精度 (mAP)。我们看到 S-NET 在大于 4 的采样率上表现更好,并且对采样率不太敏感。
图 7 显示了原始数据的精度-召回曲线和使用 FPS 和 S-NET 的采样数据,每个形状采样 tok=32 个点。我们在所有召回值上应用 S-NET 时观察到明显更好的精度
重建
我们学习使用自动编码器作为任务网络进行采样。我们使用了Achlioptas等人[17]提供的ShapeNet Core55点云数据及其自动编码器,并在表、汽车、椅子和飞机四个形状类上训练它。这些类有可用的模型。每个形状类都被分成 85%-5%-10% 用于训练验证测试集。自动编码器被训练来接收和重建2048个点的点云。自编码器的重构误差由倒角距离[17]测量。为了比较不同的采样方法,我们使用归一化重建误差 (NRE)。也就是说,我们从点的子集和完整点集重建完整的点集,并取两者之间的重构误差比。我们用以下样本大小训练了几个 S-NET:k ∈ {16, 32,., 2048},以及具有相同大小损失项的单个 ProgressiveNet。作为另一种采样方法,我们使用 FPS。
归一化重构误差 图 8 显示了 NRE 作为采样率的函数,其中采样率定义为 n/k = 2048/k。我们将 FPS 与 S-NET 和 ProgressiveNet 进行比较。对于小采样率,我们采样点的NRE类似于FPS。然而,随着采样率的增加,我们的采样方法优于 FPS。例如,在 32 的采样率下,FPS 的 NRE 略大于 2,而 S-NET 和 ProgressiveNet 的 NRE 分别约为 1.5 和 1.75。S-NET 实现了比 ProgressiveNet 更低的 NRE,因为前者针对每个采样率单独优化,从而提高了重建性能。我们学会从看不见的形状中采样点,从而实现更低的重建误差。
样本和重建可视化 图9比较了整个点云到来自 64 个点的样本量的重建结果,其中样本由 S-NET 或 FPS 产生。使用 S-NET 时的重建质量高于使用 FPS 和使用整个点云的方法。有趣的是,S-NET采样的点分布不均匀,而FPS采样的点的均匀分布更均匀
对抗简化 在这个概念证明中,我们展示了如何欺骗自动编码器。我们将点云简化为视觉上类似于一个类,但由自动编码器重构为来自不同类的形状。我们用一对输入和目标形状训练 S-NET,其中输入是一个类的形状,目标是另一个类的形状。采样损失介于 S-NET 生成的输入和点之间。重建损失在目标形状和重建形状之间。图 10 显示了将飞机变成汽车的结果
顶行:输入形状(蓝色)和 256 个生成点(红色)。底行:从生成的点重建目标形状和重建。虽然简化的点云类似于输入飞机形状,但它被重建为完全不同的形状——汽车!
结论
我们提出了一种学习如何对针对下游任务优化的点云进行采样的方法。该方法包括一个简化网络 S-NET,然后是一个后处理匹配步骤。我们还提出了一个称为 ProgressiveNet 的网络,用于根据每个点对任务的贡献对点云进行排序。在几个任务中,所得到的方法在采样点上优于FPS:点云的分类、检索和重建。
该方法是通用的,可以产生一个小的点云,它由不一定是原始输入形状一部分的点组成。输出点云相对于输入点云最小化几何误差,同时优化下游任务的目标函数。我们已经表明,学习样本可以改善结果并与各种应用结合使用。
附录
Todo
相关文章:

【论文阅读笔记】Learning to sample
Learning to sample 前沿引言方法问题声明S-NET匹配ProgressiveNet: sampling as ordering 实验分类检索重建 结论附录 前沿 这是一篇比较经典的基于深度学习的点云下采样方法 核心创新点: 首次提出了一种学习驱动的、任务特定的点云采样方法引入了两种采样网络&…...
边缘计算收益稳定
要使自己的PCDN(Personal Content Delivery Network,个人内容分发网络)收益更稳定,可以从以下几个方面进行努力: 一、选择合适的PCDN平台 平台稳定性:选择技术成熟、稳定性高的PCDN平台,确保内…...
域名和服务器是什么?域名和服务器是什么关系?
在互联网的生态系统中,域名和服务器是两个至关重要的组成部分。它们共同构成了我们访问网站和使用在线服务的基础。那么域名和服务器是什么?域名和服务器是什么关系? 1、域名的概念 域名是互联网中用于标识特定地址的一种文字形式。它是用户访问网站时输入的易记…...
IBatis和MyBatis在细节上的不同有哪些
iBatis 和 MyBatis 都是流行的 Java 持久化框架,用于简化数据库交互。MyBatis 是从 iBatis 演化而来,MyBatis 在 iBatis 的基础上做了很多改进和优化,因此两者在设计和功能上存在一些差异。以下是它们在细节上的主要区别: 1. 框架…...

使用Python获取PDF文本和图片的精确位置
在处理和分析PDF文档时,获取文本和图片在页面上的精确位置是一个重要的操作。通过确定这些元素的具体坐标,我们可以实现对PDF内容的更精细控制和理解,这对于自动化文档处理、信息提取以及内容重组等工作流程尤为关键。通过Python编程语言&…...
【AI日记】24.12.25 kaggle 比赛 2-13
【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】 工作 参加:kaggle 比赛 Regression with an Insurance Dataset时间:8 小时 读书 书名:我们能做什么 : 胡适与中国青年最真诚的分享时间:1.5 小时 律己 工作…...
【网络安全】用 Frida 修改软件为你所用
用 Frida 修改软件为你所用 Frida是一个强大的设备操作工具,它允许我们分析、修改和与运行中的应用程序交互。Frida通过在目标进程中创建一个线程,并通过这个线程执行一些启动代码来实现交互功能。这种交互被称为“代理”,它允许我们添加Jav…...

《信管通低代码信息管理系统开发平台》Windows环境安装说明
1 简介 《信管通低代码信息管理系统应用平台》提供多环境软件产品开发服务,包括单机、局域网和互联网。我们专注于适用国产硬件和操作系统应用软件开发应用。为事业单位和企业提供行业软件定制开发,满足其独特需求。无论是简单的应用还是复杂的系统&…...

使用强化学习与遗传算法优化3D低空物流路径_版本2
在快速发展的物流与自主系统领域,优化无人机在三维空间中的飞行路径至关重要。无论是在城市环境中导航还是在复杂地形中穿行,确保高效、安全且节能的航线规划能够显著提升运营效率。本文将深入探讨一种创新方法,结合强化学习(Rein…...

【MinIO系列】MinIO Client (mc) 完全指南
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

【微信小程序】2|轮播图 | 我的咖啡店-综合实训
轮播图 引言 在微信小程序中,轮播图是一种常见的用户界面元素,用于展示广告、产品图片等。本文将通过“我的咖啡店”小程序的轮播图实现,详细介绍如何在微信小程序中创建和管理轮播图。 轮播图数据准备 首先,在home.js文件中&a…...
React与Vue的区别(相同点和不同点)
前言 JavaScript是世界上最流行的语言之一,React和Vue是JS最流行的两个框架。但各有优缺点,本文将详细对比两大框架 一、框架背景 React React是由Facebook开发的用于构建用户界面的JavaScript库,Facebook对市场上JavaScript MVC框架都不太…...
Python语言的文件操作
Python语言的文件操作 在现代编程中,文件操作是每个程序员都需要掌握的基本技能之一。无论是数据的持久化存储、日志的记录,还是配置信息的读取,文件操作都是不可或缺的一部分。Python作为一种高级编程语言,其简单易用的文件操作…...
前端Pako.js 压缩解压库 与 Java 的 zlib 压缩与解压 的互通实现
工具介绍: pako.js 前端压缩解压的库(包含 zlib 和gzip 两种实现,这里只介绍 zlib) pako 2.0.4 API documentation Java8 原生支持 zlib 和 gzip 业务场景 因为数据太大,网络环境不可控。故前端需要将数据 A 先压缩…...

unity 打包出来的所有执行文件内容打包成一个exe程序
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、使用Enigma Virtual Box1.下载安装包(根据需要32位还是64位。一般是64位)2.改个语言,方便使用(改了后重启才…...

华为管理变革之道:组织文化与活力
目录 企业文化是什么? 为什么活下去是华为的文化? 活下来,是华为公司的最低纲领,也是华为公司的最高纲领! 资源终会枯竭,唯有文化才能生生不息 企业文化之一:以客户为中心 企业文化之二&a…...

仿闲鱼的二手交易小程序软件开发闲置物品回收平台系统源码
市场前景 闲置物品交易软件的市场前景广阔,主要基于以下几个方面的因素: 环保意识提升:随着人们环保意识的增强,越来越多的人开始关注资源的循环利用,闲置物品交易因此受到了广泛的关注。消费升级与时尚节奏加快&…...
PostgreSQL CRUD 操作指南
PostgreSQL CRUD 操作指南 连接数据库 -- 连接到特定数据库 psql -U postgres -d xianxia-- 列出所有数据库 \l-- 切换数据库 \c xianxia-- 列出所有表 \dt-- 查看表结构 \d table_name基本 CRUD 操作 CREATE(创建) -- 创建新表 CREATE TABLE users …...

4X4规模S盒分量布尔函数计算工具(附各大常见分组加密算法S盒查找表和其对应分量布尔函数截图)
文章结尾有S盒分量布尔函数计算工具下载地址 Serpent {0x3,0x8,0xF,0x1,0xA,0x6,0x5,0xB,0xE,0xD,0x4,0x2,0x7,0x0,0x9,0xC} LBlock {0xE,0x9,0xF,0x0,0xD,0x4,0xA,0xB,0x1,0x2,0x8,0x3,0x7,0x6,0xC,0x5} GOST {0x4,0xA,0x9,0x2,0xD,0x8,0x0,0xE,0x6,0xB,0x1,0xC,0x7,0xF,0x5,0…...

模拟——郑益慧_笔记1_绪论
B站视频链接 模电是数电的基础;参考书: 模拟电子技术基础(第四版)华成英、童诗白主编,高等教育出版社;电子技术基础 模拟部分 康华光主编,高等教育出版社; 电子技术的发展史 电子…...
js中common.js和ECMAScript.js区别
以下是关于 CommonJS 和 ECMAScript Modules(ESM)的详细对比分析,包含底层原理和示例说明: 🧩 核心差异对比表 特性CommonJSES Modules来源Node.js 社区规范ECMAScript 语言标准加载方式动态加载(运行时解…...

大数据量下的数据修复与回写Spark on Hive 的大数据量主键冲突排查:COUNT(DISTINCT) 的陷阱
背景与问题概述 这一周(2025-05-26-2026-05-30)我在搞数据拟合修复优化的任务,有大量的数据需要进行数据处理及回写,大概一个表一天一分区有五六千万数据,大约一百多列的字段。 具体是这样的我先取档案&#x…...

高频面试--redis
Reids 1. 常见的数据结构(string, list, hash, set, zset) 答法模板: Redis 提供五种核心数据结构: String:最基本的类型,支持整数、自增、自减、位操作。 List:双端链表,支持消息…...
Pycharm的简单介绍
目录 1. 起源与发展历史 2. 定位与核心作用 3. 主要版本 4. 应用场景 5. 核心功能与优势 6. 优缺点分析 7. 使用入门指南 8. 适用人群 9. 替代工具对比 总结 1. 起源与发展历史 公司背景:由捷克公司 JetBrains(成立于2000年)开发&a…...

JAVA重症监护系统源码 ICU重症监护系统源码 智慧医院重症监护系统源码
智慧医院重症监护系统源码 ICU重症监护系统源码 开发语言:JavaVUE ICU护理记录:实现病人数据的自动采集,实时记录监护过程数据。支持主流厂家的监护仪、呼吸机等床旁数字化设备的数据采集。对接检验检查系统,实现自动化录入。喜…...

XCTF-web-mfw
发现了git 使用GitHack下载一下源文件,找到了php源代码 <?phpif (isset($_GET[page])) {$page $_GET[page]; } else {$page "home"; }$file "templates/" . $page . ".php";// I heard .. is dangerous! assert("strpos…...

MATLAB使用多个扇形颜色变化表示空间一个点的多种数值
MATLAB使用多个扇形颜色变化表示空间一个点的多种数值 excel中表格中数据格式,多行 lonlatdata1data2data3117380.11100 clear;close all; figure(Position,[100 100 800 800]);num_points 14; [num,txt,raw] xlsread(test.xlsx); x num(:,1); y num(:,2);d…...

倚光科技在二元衍射面加工技术上的革新:引领光学元件制造新方向
倚光科技二元衍射面加工技术(呈现出细腻的光碟反射纹路) 在光学元件制造领域,二元衍射面的加工技术一直是行业发展的关键驱动力之一。其精准的光相位调制能力,在诸多前沿光学应用中扮演着不可或缺的角色。然而,长期以来…...

OpenGL Chan视频学习-8 How I Deal with Shaders in OpenGL
bilibili视频链接: 【最好的OpenGL教程之一】https://www.bilibili.com/video/BV1MJ411u7Bc?p5&vd_source44b77bde056381262ee55e448b9b1973 函数网站: docs.gl 说明: 1.之后就不再整理具体函数了,网站直接翻译会更直观也…...
Elasticsearch性能优化全解析
Elasticsearch作为一款分布式搜索和分析引擎,其性能优化是实际生产环境中必须深入研究的课题。本文基于Elastic官方文档,系统性地总结了从硬件配置、索引设计到查询优化的全链路优化策略,帮助用户构建高性能、高稳定性的集群。 Elasticsearch的优化需结合业务场景综合决策:…...