【论文精读】ID-like Prompt Learning for Few-Shot Out-of-Distribution Detection

news2024/11/24 13:07:35

🌈 个人主页:十二月的猫-CSDN博客
🔥 系列专栏: 🏀论文精读_十二月的猫的博客-CSDN博客

💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 

注:下文块引用部分均为猫猫的笔记 

目录

1. 摘要

2. 介绍

3. 相关工作

3.1 预训练语言模型

3.2 视觉语言模型

3.3 提示词调优工程

3.4 方法

3.4.1  Preliminaries

3.4.2 ID-like Prompt Learning

3.4.3 Loss函数的设计

4. 总结 


1. 摘要

       分布外(out -distribution, OOD)检测方法通常利用辅助离群值来训练识别OOD样本的模型,特别是从辅助离群值数据集中发现具有挑战性的离群值来提高OOD检测。然而,在有效区分最具挑战性的OOD样本方面,它们可能仍然面临限制,这些样本与分布中(ID)数据非常相似,即类ID样本。为此,我们提出了一种新的OOD检测框架,该框架使用CLIP[28]从ID样本的附近空间发现类ID异常值,从而有助于识别这些最具挑战性的OOD样本。然后提出了一个快速学习框架,该框架利用识别出的类id异常值进一步利用CLIP进行OOD检测的能力。得益于强大的CLIP,我们只需要少量的ID样本来学习模型的提示,而不需要暴露其他辅助的离群数据集。通过专注于最具挑战性的id -类OOD样本并优雅地利用CLIP的功能,我们的方法在各种真实世界的图像数据集上实现了卓越的少镜头学习性能(例如,在ImageNet-1k数据集上的4镜头OOD检测中,与最先进的方法相比,我们的方法将平均FPR95降低了12.16%,将平均AUROC提高了2.76%)。

2. 介绍

       当在实际环境中部署机器学习模型时,可能会遇到在训练过程中没有遇到的分布外(OOD)样本。当涉及到这些OOD输入时,错误决策的风险会增加,这可能会带来严重的安全问题,特别是在自动驾驶和医疗诊断等应用中。除了在ID样本上表现良好外,系统还需要识别OOD样本,以产生可信的预测。因此,OOD检测对于同等贡献是非常关键的为了在现实中安全地部署机器学习模型。

       现有方法[8,16,19]通常侧重于仅使用训练中的ID数据检测OOD样本,以预测OOD样本的较低置信度[7,23]或较高能量[20]。然而,由于缺乏OOD信息,这些模型难以有效地检测OOD。因此,一些研究[9,20]建议使用辅助离群值来正则化模型并识别OOD样本。Chen等[1]和Ming等[25]认为,选择更具挑战性的离群样本可以帮助模型更好地学习ID和OOD之间的决策边界。然而,这些有限的辅助异常值包含更少挑战性的异常值。此外,这些方法大多需要额外的离群数据,这使得它们在无法获得离群数据集时无效。最近,Du等[4]提出在训练过程中,在不需要额外数据的情况下,从ID数据特征空间的低似然区域合成虚拟离群数据来构建离群数据。该方法对鉴别ID和OOD有较强的疗效。然而,有两个主要的限制:i)它假设特征空间中的ID数据符合一类条件高斯分布,这在复杂的现实应用中并不总是成立[30];ii)需要大量的ID样本来构建更准确的ID数据分布,而获得大量的ID样本往往成本高昂。

OOD检测:开放式离群值检测,离群值就是和原本训练数据分布差距很大的数据。检测离群值作用就是不对这些数据做出判断,而是辅助识别出这些数据。

       因此,在这项工作中,我们专注于灵活地构建信息异常值,以提高对具有挑战性的OOD样本的识别。

       在本文中,我们首先构建了与ID数据高度相关的离群值,并引入了一种新的类ID提示用于OOD检测,从而有效地识别具有挑战性的OOD样本。我们发现具有挑战性的OOD样本通常与ID数据高度相关,表现出高度的视觉或语义相似性,例如,OOD的局部特征与ID相关(如图1所示)。由于OOD样本的这些类ID特征导致错误的预测,因此自然产生了一个想法:从ID样本中提取相关特征来构建具有挑战性的OOD样本。为此,我们对ID样本的邻近空间进行多次采样。在这些样本中,那些与ID提示相似度较低的样本不被归类为ID类,即使它们包含与ID类相关的特征。因此,这些样本自然被选为具有挑战性的OOD样本。与VOS[4]和NPOS[30]在特征空间的低似然区域合成虚拟离群点不同,我们的方法直接从原始图像中构建离群点,增强了灵活性和可解释性。

思考流程:

具有挑战性的OOD样本难以寻找———自己制造具有挑战性的OOD样本———具有挑战性=邻近空间(和ID特征空间上相似)———OOD样本(与ID提示相似度低)

       虽然我们可以构建具有挑战性的OOD样本,但有效识别这些OOD样本仍然具有挑战性。如图2左侧所示,“狼”代表了“狗”类的一个具有挑战性的OOD示例。这些图像与ID提示类似,导致分类概率高,并且在区分ID和OOD方面存在重大挑战。我们认为,仅仅依靠ID提示不足以解决这个问题。因此,我们引入了额外的提示来增强OOD识别。如图2右半部分所示。

前面工作:构建具有挑战性OOD样本,并通过这些OOD样本增强模型对于离散数据的学习。

通过前面学习,能够让模型(包括ID提示词工程)进一步学习出 特征相似但是提示词不相似 的数据。

从某种角度来说,进一步在ID提示词层面做到了不相似类分离。

但是对于狼、狗这类数据,仍然在图片特征值以及提示词上都是类似的。这种数据,我们难以处理。

       我们开发了一个额外的提示,称为“dog-like”,它类似于“dog”的提示。如果我们可以增加“狗样”提示和与“狗”高度相关的OOD样本之间的相似度,模型将通过“狗”提示识别狗,并通过“狗样”提示识别具有挑战性的OOD样本(包括“狼”)。

       具体来说,我们将额外的提示与这些构建的具有挑战性的OOD对齐,创建类似于ID提示的OOD提示,以有效地识别具有挑战性的OOD样本。大量的实验表明,我们的方法在各种现实世界的任务中实现了优越的少量OOD检测性能。与在训练过程中需要大量数据的方法[4,30]相比,我们的方法在每个类只使用一张图像的情况下,将平均FPR95分数从38.24%显著降低到24.08%,将平均AUROC从91.60%提高到94.70%。我们将我们的主要贡献总结如下:

       •我们提出了一个新的框架,无需额外的训练,通过利用CLIP自动探索ID样本附近空间中的类ID OOD样本,这有助于模型有效识别与ID相关的具有挑战性的OOD样本。

       •通过利用预训练的视觉语言模型的能力,提出了一种类似id的提示学习方法来识别最具挑战性的OOD样本,这些样本的行为类似id,但却不同。

       •我们在几个大规模数据集上验证了我们的方法,结果表明我们的方法取得了令人印象深刻的性能,在ImageNet-1K上4次OOD检测的平均AUROC达到96.66%。另外还进行了烧蚀实验来验证所设计方法的有效性

增加一个新的Prompt提示词,在训练时同时训练旧提示词和新的提示词。

从而针对性提高特征值相似的类的识别度

3. 相关工作

3.1 预训练语言模型

       Hendrycks和Gimpel[8]使用最大软最大概率(maximum softmax probability, MSP)建立了OOD检测的基线。随后的研究探索了通过ODIN评分[11,19]和Mahalanobis评分[16]来检测OOD。

1、利用MSP方法来建立OOD检测是一种相当直观、简单的OOD检测方法。

2、ODIN评分在OOD检测中的优势在于,它利用了温度缩放和扰动的结合,使得模型在处理未见过的分布时更加敏感。(手工调整缩放参数)

3、Mahalanobis评分的优势在于,它能够利用样本的分布信息,从而为OOD检测提供了一种更为可靠的方式。

       Fort等[6]首先将OOD检测任务扩展到预训练的视觉语言模型。esmailpour等[5]通过生成额外的负面标签来构建负面提示,增强了预训练的视觉语言模型的OOD检测性能。最近,Ming等[24]将MSP扩展到预训练的视觉语言模型,并探讨了softmax和温度缩放对OOD检测的影响。CLIPN[34]对CLIP进行了微调,使其能够输出负面提示,以评估图像中不存在概念的概率。

3.2 视觉语言模型

       对比视觉语言模型。与传统的机器学习模型相比,近年来大规模预训练的视觉语言模型在各种下游任务上取得了很大的进展。例如,CLIP[28]、FILIP[36]和ALIGN[13]利用对比损失(如InfoNCE损失[31])来学习图像和文本的对齐表示。匹配的图像-文本对的表示距离越来越近,不匹配的图像-文本对的表示距离越来越远。具体来说,这些方法采用了一种简单的双流架构,包括一个图像编码器和一个文本编码器,它将图像和文本特征映射到一个共享空间中进行相似性计算。CLIP[28]受益于4亿对图像-文本对的精选数据集,ALIGN[13]利用了18亿对噪声图像-文本数据。由于大规模的配对数据,这些视觉语言预训练模型表现出令人印象深刻的性能。

3.3 提示词调优工程

       基于CLIP的提示学习。在自然语言处理(NLP)中,Petroni等人[27]将提示概念化为类似于填空任务。其核心思想是诱导一个预先训练的语言模型,在给出完形提示的情况下生成答案。使用这种范式可以有效地处理情感分析等任务。然而,它在很大程度上依赖于设计良好的提示符。为了避免手动设计大量提示,一些研究[17,18]引入了提示调优作为解决方案。提示调整从连续输入嵌入空间的下游数据中学习提示信息,为基础模型的微调提供了一种参数高效的方法。尽管快速学习在NLP中被广泛采用,但它在视觉领域的探索仍然有限。最近,CoOp[39]和CoOp[38]对CLIP[28]进行了提示调优,通过最小化目标任务上的分类损失来调优提示,有效提高了CLIP在相应下游任务上的性能。大量研究[22,26,29]利用基于CLIP的提示学习来提高在各种下游任务中的表现。

3.4 方法

3.4.1  Preliminaries

       Zero-shot classification with CLIP。CLIP由文本编码器T: T→R d和图像编码器I: x→R d组成,分别用于获取文本T和图像x的特征向量。在执行分类任务时,假设已知标签集Y = {y1, y2,…, yK},我们可以构造一个概念向量T (tk), k∈{1,2,…, K},其中tk是标签yk的文本提示符“< yk >的照片”。我们将文本和图像的特征分别表示为h = T (T)和z = I(x)。我们首先获得图像特征相对于所有文本特征的相似度sk(x) = sim(hk, z) = sim(T (tk), I(x)),其中sim(·,·)表示余弦相似度。对应于yk在x上的预测概率pk可以表示为

p_k(x;\mathcal{Y},\mathcal{T},\mathcal{I})=\frac{e^{s_k(x)/\tau}}{\Sigma_{k=1}^Ke^{s_k(x)/\tau}},\quad(1)

式中τ为softmax函数的温度 

这里的公式类似前面提过的ODIN评分,在普通的softmax基础上加入T用来调节温度

       Prompt学习。为了进一步提高CLIP在few-shot分类上的性能,CoOp[39]在文本的嵌入层上构造了一个可学习的张量。具体来说,CoOp将提示符的可学习张量初始化为t = [V]1[V]2…[V]L[CLASS],其中[V]L (L∈{1,2,…, L})是一个与词嵌入相同维数的可学习向量,维数设置为512。然后根据样本的分类概率构造一个损失函数,如交叉熵损失,来优化可学习提示。

       Out-of-Distribution Detection.。OOD 检测通常构建一个 OOD 检测器,用 F(x) 表示,即一个二元分类器

F(x)=\left\{\begin{matrix}ID,&S(x)\geq\gamma\\OOD,&S(x)<\gamma,\end{matrix}\right.\quad(2)

       其中,S(x) 是 OOD 检测任务中的得分函数,γ 是决定样本属于 ID 还是 OOD 的阈值。例如,Hendrycks 和 Gimpel [8] 和 Liu 等人[20]使用软分类概率的最大值和能量的最大值来判断样本是属于 ID 还是 OOD。[20] 分别使用 softmax 和 energy 的最大分类概率作为得分函数 S(x)。

3.4.2 ID-like Prompt Learning

       在本文中,我们介绍了一种新颖的少样本 OOD 检测模型,该模型采用裁剪和 CLIP 模型来创建具有挑战性的离群值,从而提高 OOD 检测能力。此外,我们还利用提示学习来获取 ‘ID-like’ 的 OOD 提示。如图 3 所示,我们的框架由两个主要部分组成:(1) Constructing outliers from ID samples: 少样本设置下的训练集表示为 D = {(x1, y1),(x2, y2), ...,(xN , yN )} 。为了充分探索训练样本的临近空间,我们对每个 ID 样本 xi 进行多次随机裁剪,得到集合 X crop i = {x crop i,1 , x crop i,2 , ..., x crop i,M },其中 M 是随机裁剪的迭代次数。同时,我们使用预定义模板创建相应的类别描述文本 tk,例如 “一张〈yk〉的照片”,其中 yk∈Y 表示相应的类别名称。接下来,利用预训练模型CLIP,我们计算样本集 X crop i 中的样本与描述 tk 之间的余弦相似度。根据余弦相似度的强弱,我们分别从相似度最高和最低的片段中提取 ID 和 OOD 样本,定义它们为 Xin i = {x in i,1 , xin i,2 , ..., xin i,Q} 和 Xout i = {x out i,1 , xout i,2 , ..., xout i,Q} ,其中 Q 是用户定义的超参数。最后,我们得到由所有 ID 样本构建的 Din = {(x in 1,1 , y1),(x in 1,2 , y1), ...,(x in N,Q, yN )} 和 Dout = {x out 1,1 , xout 1,2 , ..., xout N,Q} 。

利用随机裁剪的方法达到一下目的:

        1、增加了数据样本数量

        2、增加模型稳定性(参数缺失也可以识别的很好)

        3、减少噪声的影响

具体可以看下面这篇文章:深度学习训练中为什么要将图片随机剪裁(Random Crop)_randomcrop-CSDN博客

核心思想1:利用图片随机裁剪生成新数据;
核心思想2:利用余弦相似度划分

       (2) 提示学习: 我们为每个类别初始化一个可学习的提示,形成 ID 提示集 T in = {t in 1 , tin 2 , ..., tin K },并初始化一个额外的 OOD 提示集 T out = {t out 1 , tout 2 , ..., tout C },其中 C 是 OOD 提示的数量。鉴于单个描述所覆盖的范围有限,我们引入了多个 OOD 描述来增强覆盖范围。我们使用 CoOp [39],随机初始化这些文本描述的嵌入,并使用损失函数对其进行优化,从而学习改进后的提示。

为OOD的离散数据分开形成一个Prompt提示词

K:已知类别的样本数量

C:需要判断的OOD样本数量

3.4.3 Loss函数的设计

       在训练过程中,我们根据上一节提到的算法获得分布内和分布外数据,分别记为 Din 和 Dout。我们通过由三个项组成的损失函数来优化提示。

前提知识:

交叉熵的两种表示:

H(p, q)=\sum_{i=1}^{n} p\left(x_{i}\right) \log \frac{1}{q\left(x_{i}\right)}=-\sum_{i=1}^{n} p\left(x_{i}\right) \log q\left(x_{i}\right)

H(P,Q)=\text { Entropy }=\mathbb{E}_{x \sim P}[-\log Q(x)]

其中Q和P是两种分布的概率分布函数(这里是离散型

       分布内损失:为了确保分布内数据的分类性能,我们使用了标准的交叉熵损失函数,该函数用于测量 ID 样本的预测标签概率与地面实况标签之间的差异。形式上,ID 交叉熵损失 Lin 的定义是:

\mathcal{L}_{in}=\mathbb{E}_{(x,y)\sim D^{in}}[-\log\frac{e^{s_{*}/\tau}}{\Sigma_{k=1}^{K}e^{s_{k}^{in}/\tau}+\Sigma_{c=1}^{C}e^{s_{c}^{out}/\tau}}],(3)

Din:实况标签下的概率分布函数

log后面:预测标签的概率分布函数

参数说明: 

S*:实况记录Prompt的encoder值Image的encoder值余弦相似度

Sink:实况记录的image值x的encoder值Tin中的第k个prompt值的encoder值的余弦相似度

SoutC:实况记录的image值x的encoder值Tout中的第c个prompt值的encoder值的余弦相似度

x,y:目前实况的记录值(image值以及标签值)

Xin:分布内的crop后的image值的集合

y:分布内针对crop后的image的标签值(动物类别),分布外标签的y值是要求解(未知)

Xout:分布外的crop后的image值的集合

Din:Xin和y的整合

Dout:Xout的整合

Tin:按照Xin的标签值(类别)创建的待学习的Prompt值

Tout:为了OOD样本所创建的Prompt值(Prompt数量是可调节的超参数,根据OOD样本的数量)

预测标签的概率值:模型预测出真实标签的概率值

       分布外损失:为了使 OOD 提示与异常值保持一致,我们使用了交叉熵损失函数。值得注意的是,在理想情况下,每个类别都会有一个 ID 提示和一个 OOD 提示。但是,为了节省计算资源并提高训练效率,我们将 OOD 提示的数量固定为 100。因此,当 OOD 提示不足以与 ID 类别建立一一对应关系时,我们会最大限度地提高OOD 提示与异常值之间的整体相似性(更加关注整体相似性,而不是每一个类别的局部相似性)。为此,我们提出了以下损失 Lout:

\mathcal{L}_{out}=\mathbb{E}_{x\sim D^{out}}[-\log\frac{\Sigma_{c=1}^{C}e^{s_{c}^{out}/\tau}}{\Sigma_{k=1}^{K}e^{s_{k}^{in}/\tau}+\Sigma_{c=1}^{C}e^{s_{c}^{out}/\tau}}]. (4)

与一般损失函数不同点:将异常值和整体OOD提示建立损失,而不是一个异常值对应一个OOD提示

个人观点:由于异常值数量不多,难以做到让模型详细判断异常值所属的类别 。因此捆绑整体的异常值,最终让模型做到能够识别出异常值即可,不需要确定异常值所属的类别

因此,降低模型训练的资源以及数据量要求!!

提高整体相似性:  

整体loss拟合会考虑到其他所有OOD异常点的影响

正常的loss拟合仅仅考虑目前这个异常点对模型的影响

因此,整体loss拟合每次的调整相对较小,模型更容易收敛、平稳,训练更容易。

       此外,我们还观察到,在训练期间以下列形式实施 Lout 更有利于优化提示:

\mathcal{L}_{out}=\mathbb{E}_{x\sim D^{out}}[\log\frac{\Sigma_{k=1}^{K}e^{s_{k}^{in}/\tau}}{\Sigma_{k=1}^{K}e^{s_{k}^{in}/\tau}+\Sigma_{c=1}^{C}e^{s_{c}^{out}/\tau}}].\quad(5)

       虽然它们的优化目标相似,但前者倾向于最大化 OOD 提示和异常值之间的相似性,而后者倾向于最小化 ID 提示和异常值之间的相似性,因此在训练过程中略有不同。

       多样性正则化:由于所有 OOD 提示都是随机初始化的,并在公式 4 所示的相同目标下进行优化,因此 OOD 提示之间存在过度相似的风险。相似的 OOD 提示可能会导致可检测的 OOD 类别数量减少。为了缓解这一问题并确保 OOD 提示语的多样性,我们引入了额外的损失 Ldiv,明确地最大化提示语之间的不相似性:

\mathcal{L}_{div}=\frac{\Sigma_{c=1}^{C-1}\Sigma_{j=c+1}^{C}sim(h_{c}^{out},h_{j}^{out})}{C(C-1)/2},\quad(6)

hout:OOD提示语构成的集合 

确保OOD提示语多样性:引入格外损失Ldiv,通过最大化Ldiv来确保提示语之间的不同性

        具有平衡超参数 λout 和 λdiv 的总体损失函数为:

\mathcal{L}=\mathcal{L}_{in}+\lambda_{out}\mathcal{L}_{out}+\lambda_{div}\mathcal{L}_{div}.\quad(7)

        推理:在执行分类任务时,我们采用与 CLIP 相同的分类方法,完全依靠 ID 提示进行分类。对于 OOD 检测,我们将评分函数定义为:

S(x)=\frac{\Sigma_{k=1}^{K}e^{s_{k}^{in}/\tau}}{\Sigma_{k=1}^{K}e^{s_{k}^{in}/\tau}+\Sigma_{c=1}^{C}e^{s_{c}^{out}/\tau}}.\quad(8)

Ldiv要最大化,Lout在调整后也是要最大化,而Lin要求最小化。

因此在Lout和Ldiv前面添加调整的超参数,这个参数应该为负值。

保证整体L要求是最小化。

4. 总结 

如果想要学习更多深度学习论文,大家可以点个关注并订阅,持续学习、天天进步

你的点赞就是我更新的动力,如果觉得对你有帮助,辛苦友友点个赞,收个藏呀~~~

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PIDNet(语义分割)排坑

PIDNet训练自己的数据集 1. 前言2. 准备工作3. 配置环境4. 排坑过程4.1.1 configs增加了VOC文件夹 并在里面写了yaml参数文件4.1.2 加载VOC格式数据集的类4.1.3 train.py调试 1. 前言 paper小修时reviewer说baseline太老&#xff0c;所以对CVPR2023的PIDNet进行复现&#xff0…

Google Recaptcha V2 简单使用

最新的版本是v3&#xff0c;但是一直习惯用v2&#xff0c;就记录一下v2 的简单用法&#xff0c;以免将来忘记了 首先在这里注册你域名&#xff0c;如果是本机可以直接直接填 localhost 或127.0.0.1 https://www.google.com/recaptcha/about/ 这是列子 网站密钥&#xff1a;是…

autMan奥特曼机器人-内置Redis

autMan内置了redis服务&#xff0c;有的脚本运行需要redis支持 几个注意事项&#xff1a; 启用redis服务后要重启autMan生效&#xff0c;关闭一样的道理。启用redis服务后会增加约200M的内存占用多个autMan的redis服务可以组成集群redis服务

五、快速入门K8s之Pod容器的生命周期

一、容器的初始化init ⭐️ init c &#xff1a; init contariner 初始化容器&#xff0c;只是用来初始化&#xff0c;初始化完成就会死亡可以大于的等于一也可以没有&#xff0c;每个init只有在前一个init c执行完成后才可以执行下一个、init容器总是运行到成功完成为止&#…

sqoop问题汇总记录

此篇博客仅记录在使用sqoop时遇到的各种问题。持续更新&#xff0c;有问题评论区一起探讨&#xff0c;写得有不足之处见谅。 Oracle_to_hive 1. main ERROR Could not register mbeans java.security.AccessControlException: access denied ("javax.management.MBeanTr…

C++对象模型:Function 语意学

Member 的各种调用方式 Nonstatic Member Function 使用C时&#xff0c;成员函数和非成员函数在性能上应该是等价的。当设计类时&#xff0c;我们不应该因为担心效率问题而避免使用成员函数。 实现&#xff1a;编译器会将成员函数转换为一个带有额外this指针参数的非成员函数…

二叉树中的深搜 算法专题

二叉树中的深搜 一. 计算布尔二叉树的值 计算布尔二叉树的值 class Solution {public boolean evaluateTree(TreeNode root) {if(root.left null) return root.val 0? false: true;boolean left evaluateTree(root.left);boolean right evaluateTree(root.right);return…

【Linux】环境ChatGLM-4-9B 模型部署

一、模型介绍 GLM-4-9B 是智谱 AI 推出的最新一代预训练模型 GLM-4 系列中的开源版本。 在语义、数学、推理、代码和知识等多方面的数据集测评中&#xff0c; GLM-4-9B 及其人类偏好对齐的版本 GLM-4-9B-Chat 均表现出超越 Llama-3-8B 的卓越性能。除了能进行多轮对话&#xf…

深入理解Java 线程并发编排工具: 概述和应用场景

目录 前言概述1. CountDownLatch2. CyclicBarrier3. Semaphore&#xff08;信号量)4. Condition 案例CountDownLatch-马拉松场景CyclicBarrier-马拉松场景Semaphore-公交车占座场景Condition-线程等待唤醒场景 前言 在 Java 的 java.util.concurrent (JUC) 包中&#xff0c;提…

C++初阶(八)--内存管理

目录 引入&#xff1a; 一、C中的内存布局 1.内存区域 2.示例变量存储位置说明 二、C语言中动态内存管理 三、C内存管理方式 1.new/delete操作内置类型 2.new和delete操作自定义类型 四、operator new与operator delete函数&#xff08;重要点进行讲解&#xff09; …

架构的本质之 MVC 架构

前言 程序员习惯的编程方式就是三步曲。 所以&#xff0c;为了不至于让一个类撑到爆&#x1f4a5;&#xff0c;需要把黄色的对象、绿色的方法、红色的接口&#xff0c;都分配到不同的包结构下。这就是你编码人生中所接触到的第一个解耦操作。 分层框架 MVC 是一种非常常见且常…

Node学习记录-child_process 子进程

来自&#xff1a;https://juejin.cn/post/7277045020422930488 child_process用于处理CPU密集型应用&#xff0c;Nodejs创建子进程有7个API&#xff0c;其中带Async的是同步API,不带的是异步API child_process.exec(command[, options][, callback]) command:要运行的命令&am…

NVR批量管理软件/平台EasyNVR多个NVR同时管理支持对接阿里云、腾讯云、天翼云、亚马逊S3云存储

随着云计算技术的日益成熟&#xff0c;越来越多的企业开始将其业务迁移到云端&#xff0c;以享受更为灵活、高效且经济的服务模式。在视频监控领域&#xff0c;云存储因其强大的数据处理能力和弹性扩展性&#xff0c;成为视频数据存储的理想选择。NVR批量管理软件/平台EasyNVR&…

2024年编程语言排行榜:技术世界的新星与常青树

随着技术的不断进步&#xff0c;编程语言的流行度也在不断变化。今天&#xff0c;就让我们一起来看看2024年的编程语言排行榜&#xff0c;探索哪些语言在技术世界中占据了主导地位。 1. Python&#xff1a;稳居榜首 Python以其在人工智能、数据科学、网络开发等多个领域的广泛…

MFC工控项目实例二十八模拟量信号每秒采集100次

采用两个多媒体定时器&#xff0c;一个0.1秒计时,另一个用来对模拟量信号采集每秒100次.。 1、在SEAL_PRESSUREDlg.h中添加代码 class CSEAL_PRESSUREDlg : public CDialog { public:CSEAL_PRESSUREDlg(CWnd* pParent NULL); // standard constructor&#xff0e;&#xff0e…

基于MoviNet检测视频中危险暴力行为

项目源码获取方式见文章末尾&#xff01; 600多个深度学习项目资料&#xff0c;快来加入社群一起学习吧。 《------往期经典推荐------》 项目名称 1.【Faster & Mask R-CNN模型实现啤酒瓶瑕疵检测】 2.【卫星图像道路检测DeepLabV3Plus模型】 3.【GAN模型实现二次元头像生…

ArcGIS003:ArcMap常用操作0-50例动图演示

摘要&#xff1a;本文以动图形式介绍了ArcMap软件的基本操作&#xff0c;包括快捷方式创建、管理许可服务、操作界面元素&#xff08;如内容列表、目录树、搜索窗口、工具箱、Python窗口、模型构建器窗口等&#xff09;的打开与关闭、位置调整及合并&#xff0c;设置默认工作目…

NVR批量管理软件/平台EasyNVR多个NVR同时管理支持视频投放在电视墙上

在当今智能化、数字化的时代&#xff0c;视频监控已经成为各行各业不可或缺的一部分&#xff0c;无论是公共安全、交通管理、企业监控还是智慧城市建设&#xff0c;都离不开高效、稳定的视频监控系统的支持。而在这些应用场景中&#xff0c;将监控视频实时投放到大屏幕电视墙上…

asp.net core 跨域配置不起作用的原因

1、中间件配置跨域的顺序不对 中间件顺序配置对了基本上就能解决大部分问题中间件顺序配置对了基本上就能解决大部分问题 附上官网简单的启用跨域的代码 var MyAllowSpecificOrigins "_myAllowSpecificOrigins";var builder WebApplication.CreateBuilder(args);…

Linux 命令解释器-shell

概念 shell &#xff1a;壳&#xff0c;命令解释器&#xff0c;负责解析用户输入的命令 分类&#xff1a; 内置命令 (shell 内置 ) &#xff0c; shell 为了完成自我管理和基本的管理&#xff0c;不同的 shell 内置不同的命令&#xff0c;但是大 部分都差不多 外置命令&…