当前位置: 首页 > news >正文

论文阅读:(DETR)End-to-End Object Detection with Transformers

论文阅读:(DETR)End-to-End Object Detection with Transformers

参考解读:

论文翻译:End-to-End Object Detection with Transformers(DETR)[已完结] - 怪盗kid的文章 - 知乎

指示函数(样子像空心1的一个数学符号)_语雀公式 指示函数-CSDN博客

Abstract

我们提出了一种将目标检测看作集合预测(set prediction)问题的新方法。我们的方法简化了目标检测的流水线,有效地消除了许多需要手工设计的组件,如非极大值抑制算法或锚框(anchor)生成算法这类需要根据任务显式编码的先验知识。新框架的主要组成部分被称为DEtection TRansformer或DETR,包括一个通过二部图匹配进行唯一预测的基于集合的全局损失,以及一个Transformer编码器-解码器结构。给定一个学习到的固定小规模的目标查询集,DETR推理目标和全局图像上下文之间的关系,直接并行输出最终的预测集。新模型在概念上很简单,不需要专门的库来支持。在具有挑战性的COCO目标检测数据集上,DETR达到了与Faster RCNN基线相当的准确性和运行时间性能。此外,它可以很容易以统一的方式推广到全景分割。我们发现它的表现明显优于有竞争力的基线算法。训练代码和预训练模型可在https://github.com/facebookresearch/detr找到.

1 Introduction

目标检测的目的是为每个感兴趣的目标预测一组边界框和类别标签。现代检测器以一种间接的方法解决这个集合预测任务,该方法在大量的建议框[36,5]、锚框[22]或窗口中心[52,45]中定义回归和分类问题。它们的性能受到以下因素的显著影响:压缩重复预测结果的后处理步骤、锚框集合的设计以及将目标框分配给锚框的启发式方法[51]。为了简化这些流水线,我们提出了一种直接预测集合的方法(set prediction approach)来绕过间接方法。这种端到端的理论已经在机器翻译或语音识别等复杂的结构化预测任务中取得了重大进展,但在目标检测方面尚未取得进展:以前的尝试[42,15,4,38]要么添加了其他形式的先验知识,要么没有证明在具有挑战性的基准上具有强大的基线竞争力。本文旨在弥合这一差距。

通过将目标检测看作直接的集合预测问题,我们简化了训练流水线。我们采用了一种基于transformer [46]的编-解码器结构,它是一种常用的序列预测结构。Transformer的自注意力机制(self-attention)显式地建模序列中所有元素之间的成对交互,使这些架构特别适合于特定约束下的集合预测,如删除重复预测结果。

我们的DEtection TRansformer (DETR,见图1)一次性预测所有目标;并通过集合损失函数进行端到端训练,该函数在预测结果和真实结果之间进行二部图匹配。DETR通过丢弃多个手工设计的编码了先验知识的组件,如空间锚框或非极大值抑制,从而简化了目标检测流水线。与大多数现有的检测方法不同,DETR不需要定制化任何层,因此可以在任何包含标准ResNet[14]和Transformer[46]之类的框架中轻松复制。

与以往大多数直接的集合预测工作相比,DETR的主要特点是将二部匹配损失和拥有(非自回归)并行解码的transformer结合起来[28,11,9,7](the conjunction of the bipartite matching loss and transformers with (non-autoregressive) parallel decoding [28,11,9,7].)。相比之下,以前的工作聚焦在使用RNN的自回归解码[42,40,29,35,41]。我们的匹配损失函数唯一地将一个预测结果分配给一个真实目标,并且针对预测对象(一个特定)的排列保持不变,因此我们可以并行地计算它们 (Our matching loss function uniquely assigns a prediction to a ground truth object, and is invariant to a permutation of predicted objects, so we can emit them in parallel.)。

我们在一个最流行的目标检测数据集COCO[23]上评估DETR,与一个非常有竞争力的Faster R-CNN基线[36]进行对比。Faster RCNN经历了许多设计迭代,其性能自最初发布以来得到了极大的改进。我们的实验表明,我们的新模型达到了相当的性能。更准确地说,DETR在大型目标上展示了明显更好的性能,这很可能是由transformer的非局部计算造成的。然而,它在小目标上的性能较低。我们希望未来的工作能像FPN[21]开发Faster R-CNN一样改善这方面。

DETR的训练设置在许多方面不同于标准的目标检测器。新模型需要超长的训练时间,并且得益于transformer中的解码损失(The new model requires extra-long training schedule and benefits from auxiliary decoding losses in the transformer.)。我们将全面地探讨哪些组件对解释性能至关重要(We thoroughly explore what components are crucial for the demonstrated performance.)。

DETR的设计理念很容易扩展到更复杂的任务。在我们的实验中,我们证明了在预训练好的DETR上进行训练的简单分割头(simple segmentation head)在全景分割[18]上的性能优于有竞争力的基线,全景分割[18]是一项具有挑战性的像素级识别任务,最近受到了广泛的欢迎。

3 The DETR model

对于检测任务中的直接集合预测(direct set prediction),有两个必要因素:
(1) 需要一个集合预测损失(set prediction loss)去迫使算法对预测结果和GT boxes做一个唯一的匹配操作;
(2) 一个可以一次性(in a single pass)预测一系列目标并对它们之间的关系进行建模的预测框架。

3.1 Object detection set prediction loss

在一次通过解码器的过程中,DETR推断出一个包含固定大小 N N N 个结果的预测集合,其中 N N N 被设置为明显大于图像中物体数量的数值。训练的主要难点之一是根据GT对预测对象(类别(class)、位置(position)、大小(size))进行评分。我们的损失产生了预测目标和真值目标之间的最佳二部匹配,然后优化特定目标 (边界框)的损失。

我们用 y y y 表示目标的真值集合, y ^ = { y ^ i } i = 1 N \hat{y}=\{\hat{y}_i\}_{i=1}^N y^={y^i}i=1N 表示 N N N 个预测结果的集合。假设 N N N 大于图像中的目标数量,我们也认为 y y y 是一个用 ( ∅ \varnothing ) (无目标(no object))填充之后的大小为N的集合。为了在这两个集合之间找到一个二部匹配,我们寻找一个 N N N 个元素的排列 σ ∈ S N \sigma\in\mathfrak{S}_{N} σSN 使得开销最小(To find a bipartite matching between these two sets we search for a permutation of N elements σ ∈ S N \sigma\in\mathfrak{S}_{N} σSN with the lowest cost ):
σ ^ = arg ⁡ min ⁡ σ ∈ S N ∑ i N L m a t c h ( y i , y ^ σ ( i ) ) \hat{\sigma}=\arg\min_{\sigma\in\mathfrak{S}_N}\sum_i^N\mathcal{L}_{\mathrm{match}}(y_i,\hat{y}_{\sigma(i)}) σ^=argσSNminiNLmatch(yi,y^σ(i))
其中 L m a t c h ( y i , y ^ σ ( i ) ) \mathcal{L}_{\mathrm{match}} (y_{i},\hat{y}_{\sigma(i)}) Lmatch(yi,y^σ(i)) 是真值 y i y_i yi 和下标为 σ ( i ) \sigma(i) σ(i) 的预测之间的成对匹配代价(pair-wise matching cost)。根据前人的工作(如[42]),使用匈牙利算法有效地计算出这种最优分配。

匹配代价既考虑了类别的预测,也考虑了预测框和真值框的相似性。真值集合中的每个元素 i i i可以被看作是 y i = ( c i , b i ) y_i=(c_i,b_i) yi=(ci,bi) , c i c_i ci是目标类标签(可能是Ø ), b i ∈ [ 0 , 1 ] 4 b_i\in[0,1]^4 bi[0,1]4是一个向量,它定义了真值框中心坐标和其相对于图像大小的高度和宽度 (defines ground truth box center coordinates and its height and width relative to the image size) 。对于下标为 σ ( i ) σ(i) σ(i) 的预测,我们定义类别为 c i c_i ci 的概率为 p ^ σ ( i ) ( c i ) \hat{p}_{\sigma(i)}\left(c_i\right) p^σ(i)(ci) ,预测框为 b ^ σ ( i ) \hat{b}_{\sigma(i)} b^σ(i) 。我们用这些符号定义 L m a t c h ( y i , y ^ σ ( i ) ) \mathcal{L}_\mathrm{match}\left(y_i,\hat{y}_{\sigma(i)}\right) Lmatch(yi,y^σ(i))

− 1 { c i ≠ ∅ } p ^ σ ( i ) ( c i ) + 1 { c i ≠ ∅ } L b o x ( b i , b ^ σ ( i ) ) . -1_{\{c_i\neq\varnothing\}}\hat{p}_{\sigma(i)}\left(c_i\right)+1_{\{c_i\neq\varnothing\}}\mathcal{L}_{\mathrm{box}}\left(b_i,\hat{b}_{\sigma(i)}\right). 1{ci=}p^σ(i)(ci)+1{ci=}Lbox(bi,b^σ(i)).

这种寻找匹配的过程与现代检测器中用于匹配提议框[36]或锚框[21]到真值目标的启发式分配规则相同。主要的区别是,我们需要找到一对一的匹配来进行直接的集合预测,而没有重复。

第二步是计算损失函数,即前一步所有匹配对的匈牙利损失。我们对损失的定义类似于一般的目标检测器的损失,即类预测的负对数似然和后面定义的检测框损失 L b o x ( ⋅ , ⋅ ) \mathcal{L}_{\mathrm{box~}}(\cdot,\cdot) Lbox (,)的线性组合:

L Hungarian  ( y , y ^ ) = ∑ i = 1 N [ − log ⁡ p ^ σ ^ ( i ) ( c i ) + 1 { c i ≠ ∅ } L box ( b i , b ^ σ ^ ( i ) ) ] \mathcal{L}_\text{Hungarian }(y,\hat{y})=\sum_{i=1}^N\left[-\log\hat{p}_{\hat{\sigma}(i)}\left(c_i\right)+1_{\{c_i\neq\varnothing\}}\mathcal{L}_\text{box}\:\left(b_i,\hat{b}_{\hat{\sigma}}(i)\right)\right] LHungarian (y,y^)=i=1N[logp^σ^(i)(ci)+1{ci=}Lbox(bi,b^σ^(i))]

其中 σ ^ \hat{\sigma} σ^为公式(1)中计算的最优分配。在实践中,我们将 c i = ∅ c_i=\emptyset ci=时对数概率项的权重降低了10 倍,以缓解类别不平衡问题。这类似于Faster R-CNN训练程序如何通过子采样[36]来平衡正/负建议框。注意,目标和 φ \varphi φ之间的匹配代价并不依赖于预测,这意味着在这种情况下,代价是一个常量。在匹配代价中,我们使用概率 p ^ σ ^ ( i ) ( c i ) \hat{p}_{\hat{\sigma}(i)}\left(c_i\right) p^σ^(i)(ci)而不是对数概率。这使得类预测项与 L b o x ( ⋅ , ⋅ ) \mathcal{L}_\mathrm{box}\left(\cdot,\cdot\right) Lbox(,)可同单位度量,我们观察到更好的实验性能(This makes the class prediction term commensurable to L b o x ( ⋅ , ⋅ ) \mathcal{L}_\mathrm{box}\left(\cdot,\cdot\right) Lbox(,),and we observed better empirical performances.)。

其中 σ ^ \hat{\sigma} σ^为公式(1)中计算的最优分配。在实践中,我们将 c i = ∅ c_i=\varnothing ci=时对数概率项的权重降低了10倍,以缓解类别不平衡问题。这类似于Faster R-CNN训练程序如何通过子采样[36]来平衡正/负建议框。注意,目标和 ∅ \varnothing 之间的匹配代价并不依赖于预测,这意味着在这种情况下,代价是一个常量。在匹配代价中,我们使用概率 p ^ σ ^ ( i ) ( c i ) \hat{p}_{\hat{\sigma}(i)}\left(c_i\right) p^σ^(i)(ci)而不是对数概率。这使得类预测项与 L b o x ( ⋅ , ⋅ ) \mathcal{L}_\mathrm{box}\left(\cdot,\cdot\right) Lbox(,)可同单位度量,我们观察到更好的实验性能(This makes the class prediction term commensurable to L b o x ( ⋅ , ⋅ ) \mathcal{L}_\mathrm{box}\left(\cdot,\cdot\right) Lbox(,),and we observed better empirical performances.)。

**边界框的损失。**匹配代价和匈牙利损失的第二部分是 L b o x ( ⋅ ) \mathcal{L}_{\mathrm{box}}\left(\cdot\right) Lbox() , 它对边界框进行评分。不像许多检测器通过一些最初的猜测做边界框预测,我们直接做边界框预测。虽然这种方法简化了实现,但它提出了一个相对缩放损失的问题。最常用的L1损失对于小边界框和大边界框有不同的尺度,即使它们的相对误差是相似的 (The most commonly-used L1 Ioss will have different scales for small and large boxes even if their relative errors are similar. ) 。为了缓解这个问题,我们使用L1损失和尺度不变的广义loU损失[37] L i o u ( ⋅ , ⋅ ) \mathcal{L}_\mathrm{iou}\left(\cdot,\cdot\right) Liou(,)的线性组合 (To mitigate this issue we use a linear combination of the L1 loss and the generalized IoU Ioss [37] L i o u ( ⋅ , ⋅ ) \mathcal{L}_{\mathrm{iou}}\left(\cdot,\cdot\right) Liou(,) that is scaleinvariant.)。总的来说,我们的边界框损失 L b o x ( b i , b ^ σ ( i ) ) \mathcal{L}_\mathrm{box}\left(b_i,\hat{b}_\sigma(i)\right) Lbox(bi,b^σ(i))定义为
λ i o u \lambda _{\mathrm{iou}} λiou L i o u \mathcal{L} _{\mathrm{iou}} Liou ( b i , b ^ σ ( i ) ) + λ L 1 ∥ b i − b ^ σ ( i ) ∥ 1 \left ( b_{i}, \hat{b} _{\sigma ( i) }\right ) + \lambda _{\mathrm{L} 1}\left \| b_{i}- \hat{b} _{\sigma ( i) }\right \| _{1} (bi,b^σ(i))+λL1 bib^σ(i) 1,其中 λ i o u \lambda_\mathrm{iou} λiou , λ L 1 ∈ R \lambda _{\mathrm{L} 1}\in \mathbb{R} λL1R为超参数。这两个损失是根据批处理中目标的数量规范化的 (These two losses are normalized by the number of objects inside the batch. )。

3.2 DETR architecture

总体的DETR体系结构非常简单,如图2所示。它包含三个主要组成部分,我们将在下面描述:一个CNN主干提取一个紧凑的特征表示;一个编码器-解码器transformer;以及一个简单的前馈网络(FFN),用于做出最终的检测预测。

image-20240727221021172

与许多现代检测器不同的是,DETR可以在任何深度学习框架中实现,框架只需提供一个通用的CNN主干和一个仅几百行代码的transformer架构。在PyTorch[31]中用不到50行代码就可以实现DETR的推理代码。我们希望我们方法的简单性将吸引新的研究人员加入目标检测的研究。

**主干网。**从初始图像 x i m g ∈ R 3 × H 0 × W 0 x_\mathrm{img}\in\mathbb{R}^{3\times H_0\times W_0} ximgR3×H0×W0 (3个彩色通道)开始,传统的CNN骨干生成一个低分辨率的 f ∈ R C × H × W f\in\mathbb{R}^{C\times H\times W} fRC×H×W激活映射。我们使用的典型值是 C = 2048 C=2048 C=2048 并且 H , W = H 0 32 , W 0 32 . H,W=\frac{H_0}{32},\frac{W_0}{32}. H,W=32H0,32W0.

**Transformer编码器。**首先,1x1卷积将高层激活映射 f f f 的通道维数从 C C C 降至更小的维数 d d d。创建一个新的特征地图 z 0 ∈ R d × H × W z_0\in\mathbb{R}^{d\times H\times W} z0Rd×H×W 。编码器需要一个序列作为输入,因此我们将$z_{0} $的空间维度压缩为一维,从而得到一个 d × H W d\times HW d×HW 特征图。每个编码器层都有一个标准的结构,由一个多头自注意模块和一个前馈网络(FFN)组成。由于transformer架构是对顺序不敏感的,我们用固定位置编码[30,3] 对其进行补充,并将其添加到每个注意层的输入中 (Since the transformer architecture is permutation-invariant, we supplement it with fixed positional encodings[30,3] that are added to the input of each attention layer. ) 。我们遵循[46]中补充材料中架构的详细定义。

**Transformer解码器。**解码器遵循transformer的标准架构,使用多头自注意力和编码器-解码器注意机制转换尺寸为 d d d N N N 个嵌入。与原始transformer的不同之处在于,我们的模型在每个解码器层并行解码 N N N 个对象,而Vaswani等人[46]使用自回归模型,每次预测一个元素的输出序列。我们请不熟悉这些概念的读者参阅补充材料。由于解码器也是置换不变(permutation-invariant)的,所以 N N N 个输入嵌入必须不同才能产生不同的结果。(Since the decoder is also permutation-invariant, the N N N input embeddings must be different to produce different results. ) 这些输入嵌入是我们称之为对象查询 (object queries) 的学习出来的位置编码,与编码器类似,我们将它们添加到每个注意层的输入中。 N N N 个对象查询被解码器转换成一个输出嵌入。然后,通过前馈网络(将在下一小节中描述)将它们独立解码为框坐标和类标签,得到 N N N 个最终预测。对这些嵌入使用自注意力和编码器-解码器注意力,模型利用它们之间的成对关系对所有对象进行全局推理,同时能够使用整个图像作为上下文。

**预测前馈网络(FFNs)。**最后的预测是由一个带有ReLU激活函数和隐藏层维数为 d d d 的3层感知机和一个线性投影层计算的。FFN预测输入图像的归一化中心坐标、框的高度和宽度,线性层使用 softmax 函数预测类标签。由于我们预测了一个包含固定大小 N N N 个边界框的集合,其中 N N N 通常比图像中感兴趣的目标的实际数量大得多,因此使用一个额外的特殊类标签 ∅ \varnothing 来表示此位置没有检测到由标 (Since we predict a fixedsize set of N N N bounding boxes, where N N N is usually much larger than the actual number of objects of interest in an image, an additional special class label is used to represent that no object is detected within a slot.) 。这个类在标准目标检测方法中扮演着与背景类相似的角色。

**辅助解码损失。**在训练过程中,我们发现在解码器中使用辅助损耗(auxiliary losses)是很有帮助的,特别是有助于模型输出每个类的对象正确数量。每个解码器层的输出用共享层范数进行归一化,然后送到共享预测头(分类和盒预测)(The output of each decoder layer is normalized with a shared layer-norm then fed to the shared prediction heads (classification and box prediction).)。然后,我们像往常一样将匈牙利的损失用于监督。

4 Experiments

我们发现,与Faster R-CNN[36]和RetinaNet[22]相比,DETR在对COCO的定量评价中取得了具有竞争力的结果。然后,我们提供了一个针对架构和损失的详细的消融实验,有详细见解和定性的结果。最后,为了证明DETR是一个通用模型,我们给出了全景分割的结果,在固定的DETR模型上只训练了一个小的扩展(a small extension)。

数据集。我们在COCO 2017检测和全景分割数据集[23,17]上进行实验,其中包含118k训练图像和5k验证图像。每个图像都用边界框和全景分割进行标注。平均每幅图像有7个实例,在训练集中,在同一幅图像上每幅图像最多有63个实例,这些实例也有大有小。如果未特别说明,我们说的 A P AP AP 即为bbox A P AP AP,即在多个阈值上的积分度量(If not specified, we report AP as bbox AP, the integral metric over multiple thresholds. )。为了与其他模型进行比较,我们说明了最后一轮训练的验证 A P AP AP,而在消融中,我们报告了最后10轮训练的中位数(For comparison with other models we report validation AP at the last training epoch, and in ablations we report the median over the last 10 epochs. )。

技术细节。我们用AdamW[25]训练DETR,设置初始transformer的学习率为 1 0 − 4 10^{-4} 104,主干网络的学习率为 1 0 − 5 10^{-5} 105 ,权重衰减为 1 0 − 4 10^{−4} 104 。所有transformer权重都用Xavier [10]初始化,骨干网使用来自torchvision的imagenet-pretraining ResNet模型[14],并使用冻结的batchnorm层。我们报告了两种不同的主干: ResNet- 50和ResNet-101的结果。相应的模型分别称为DETR和DETR-r101。根据文献[20],我们还增加了特征分辨率,方法是在主干网的最后阶段增加一个扩张,并从这一阶段的第一次卷积中删除一个步幅(Following [20], we also increase the feature resolution by adding a dilation to the last stage of the backbone and removing a stride from the first convolution of this stage. )。相应的模型分别称为DETR-DC5和DETR-DC5-r101(dilated C5 stage)。这种修改将分辨率提高了2倍,从而提高了小对象的性能,但编码器的自注意成本增加高达16倍,导致计算成本增加了2倍。表1给出了这些模型、Faster R-CNN和retinaNet的FLOPs的完整比较。

我们使用缩放增强,调整输入图像的大小,使短边至少为480个像素,最多为800个像素,长边最多为1333[49]。为了通过编码器的自注意帮助学习全局关系,我们还在训练期间应用随机裁剪增强,提高大约1个AP性能。具体地说,一个训练图像以0.5的概率被裁剪为一个随机矩形补丁,然后再次调整大小为800-1333。训练transformer时,默认dropout值为0.1。在推断时间,一些槽预测空类(At inference time, some slots predict empty class. )。为了优化 $ AP$,我们使用第二个最高得分的类别,使用相应的置信度覆盖这些槽的预测 (To optimize for AP, we override the prediction of these slots with the second highest scoring class, using the corresponding confidence. )。与过滤空槽相比,这将提高2个点的AP。其他训练超参数可以在附录中找到。在我们的消融实验中,我们使用300轮的训练计划,200轮后学习率下降10倍,其中单轮是对所有训练图像的一次遍历。在16个V100 GPU上训练300轮的基线模型需要3天,每个GPU 4张图像(因此总的批大小为64)。对于与Faster R-CNN相比较的较长的时间表,我们训练500轮,400轮后学习速率下降,AP提高了1.5个点(For the longer schedule used to compare with Faster R-CNN we train for 500 epochs with learning rate drop after 400 epochs, which improves AP by 1.5 points. )。

表1:在COCO验证集上与RetinaNet 和Faster R-CNN的比较,主干网包括ResNet-50和ResNet- 101。上面部分显示了Detectron2[49]模型的结果,中间部分显示了GIoU[37]、训练时随机裁剪和增长9 倍训练计划模型的结果(The top section shows results for models in Detectron2 [49], the middle section shows results for models with GIoU [37], random crops train-time augmentation, and the long 9x training schedule. )。DETR模型获得了与调优后的Faster R-CNN基线相当的结果,具有更低的 APS ,但大大改进了 APL 。我们使用torchscript模型来测量FLOPS和FPS。名称中没有R101的结果对应的是ResNet-50。

image-20240727223324537

相关文章:

论文阅读:(DETR)End-to-End Object Detection with Transformers

论文阅读:(DETR)End-to-End Object Detection with Transformers 参考解读: 论文翻译:End-to-End Object Detection with Transformers(DETR)[已完结] - 怪盗kid的文章 - 知乎 指示函数&…...

react中路由跳转以及路由传参

一、路由跳转 1.安装插件 npm install react-router-dom 2.路由配置 路由配置:react中简单的配置路由-CSDN博客 3.实现代码 // src/page/index/index.js// 引入 import { Link, useNavigate } from "react-router-dom";function IndexPage() {const …...

C++ STL set_symmetric_difference

一&#xff1a;功能 给定两个集合A&#xff0c;B&#xff1b;求出两个集合的对称差&#xff08;只属于其中一个集合&#xff0c;而不属于另一个集合的元素&#xff09;&#xff0c;即去除那些同时在A&#xff0c;B中出现的元素。 二&#xff1a;用法 #include <vector>…...

postman请求响应加解密

部分接口&#xff0c;需要请求加密后&#xff0c;在发动到后端。同时后端返回的响应内容&#xff0c;也是经过了加密。此时&#xff0c;我们先和开发获取到对应的【密钥】&#xff0c;然后在postman的预执行、后执行加入js脚本对明文请求进行加密&#xff0c;然后在发送请求&am…...

数据集,批量更新分类数值OR批量删除分类行数据

数据集批量更新分类OR删除分类行数据 import osdef remove_class_from_file(file_path, class_to_remove):"""从YOLO格式的标注文件中删除指定类别的行记录&#xff0c;并去除空行。:param file_path: YOLO标注文件路径:param class_to_remove: 需要删除的类别…...

一款功能强大的视频编辑软件会声会影2023

会声会影2023是一款功能强大的视频编辑软件&#xff0c;由加拿大Corel公司制作&#xff0c;正版英文名称为‌Corel VideoStudio。它具备图像抓取和编修功能&#xff0c;可以处理和转换多种视频格式&#xff0c;如‌MV、‌DV、‌V8、‌TV和实时记录抓取画面文件。会声会影提供了…...

政安晨【零基础玩转各类开源AI项目】基于Ubuntu系统部署LivePortrait :通过缝合和重定向控制实现高效的肖像动画制作

目录 项目论文介绍 论文中实际开展的工作 非扩散性的肖像动画 基于扩散的肖像动画 方法论 基于Ubuntu的部署实践开始 1. 克隆代码并准备环境 2. 下载预训练权重 3. 推理 快速上手 驱动视频自动裁剪 运动模板制作 4. Gradio 界面 5. 推理速度评估 社区资源 政安…...

在Spring项目中使用Maven和BCrypt来实现修改密码功能

简介 在数字时代&#xff0c;信息安全的重要性不言而喻&#xff0c;尤其当涉及到个人隐私和账户安全时。每天&#xff0c;无数的用户登录各种在线服务&#xff0c;从社交媒体到银行账户&#xff0c;再到电子邮件和云存储服务。这些服务的背后&#xff0c;是复杂的系统架构&am…...

RedHat8安装Oracle19C

RedHat8安装Oracle19C 1、 更新yum源 更新yum源为阿里云镜像源&#xff1a; # 进入源目录 cd /etc/yum.repos.d/ # 删除 redhat 默认源 rm redhat.repo # 下载阿里云的centos7源 curl -O http://mirrors.aliyun.com/repo/Centos-8.repo # 替换 Centos-8.repo 中的 $releasev…...

React系列面试题

大家好&#xff0c;我是有用就点赞&#xff0c;有用就扩散。 1.React的组件间通信都有哪些形式&#xff1f; 父传子&#xff1a;在React中&#xff0c;父组件调用子组件时可以将要传递给子组件的数据添加在子组件的属性中&#xff0c;在子组件中通过props属性进行接收。这个就…...

C#:通用方法总结—第6集

大家好&#xff0c;今天继续介绍我们的通用方法系列。 下面是今天要介绍的通用方法&#xff1a; &#xff08;1&#xff09;这个通用方法为SW查找草图数量 /// <summary> /// 查找草图数量 /// </summary> /// <param name"doc2"></param>…...

Spark实时(一):StructuredStreaming 介绍

文章目录 Structured Streaming 介绍 一、SparkStreaming实时数据处理痛点 1、复杂的编程模式 2、SparkStreaming处理实时数据只支持Processing Time 3、微批处理,延迟高 4、精准消费一次问题 二、StructuredStreaming架构与场景应用 三、​​​​​​​​​​​​​​…...

LangChain4j-RAG基础

RAG是什么 简而言之&#xff0c;RAG 是一种在将数据发送到 LLM 之前从数据中查找相关信息并将其注入到提示中的方法。这样LLM将获得&#xff08;希望&#xff09;相关信息&#xff0c;并能够使用这些信息进行回复&#xff0c;这应该会减少产生幻觉的可能性。 实现方法: 全文…...

git--本地仓库修改同步到远程仓库

尝试将本地分支推送到远程仓库时&#xff0c;出现一个非快速前进的错误。通常是因为远程仓库中的分支包含本地分支没有的提交。在推送之前&#xff0c;需要将远程仓库的更改合并到本地分支。 解决步骤如下&#xff1a; 切换到你的本地分支&#xff1a; 确保处于想要推送的分支…...

剑和沙盒 3 - 深度使用和解析Windows Sandbox

介绍 两年前&#xff0c;微软作为Insiders build 18305的一部分发布了一项新功能- Windows Sandbox。 该沙箱具有一些有用的规格&#xff1a; Windows 10&#xff08;Pro/Enterprise&#xff09;的集成部分。在 Hyper-V 虚拟化上运行。原始且可抛弃 – 每次运行时都干净地开…...

深度学习loss

pytorch模型训练demo代码 在PyTorch中&#xff0c;模型训练通常涉及几个关键步骤&#xff1a;定义模型、定义损失函数、选择优化器、准备数据加载器、编写训练循环。以下是一个简单的PyTorch模型训练演示代码&#xff0c;该代码实现了一个用于手写数字识别&#xff08;使用MNIS…...

编写一个Chrome插件,网页选择文字后,右键出现菜单“search with bing”,选择菜单后用bing搜索文字

kimi ai 生成&#xff0c;测试可用&#xff0c;需要自行准备图标文件 创建一个简单的Chrome插件来实现选择文本后的搜索功能&#xff0c;你需要完成以下几个步骤&#xff1a; 创建插件的基础文件夹和文件&#xff1a; 创建一个文件夹用于存放插件的所有文件。在该文件夹中创建以…...

【算法】分割回文串

难度:中等 题目: 给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串。返回 s 所有可能的分割方案。 示例 1: 输入:s = “aab” 输出:[[“a”,“a”,“b”],[“aa”,“b”]] 示例 2: 输入:s = “a” 输出:[[“a”]] 提示: 1 <= s.length <…...

lua 游戏架构 之 游戏 AI (三)ai_attack

这段Lua脚本定义了一个名为 ai_attack 的类&#xff0c;继承自 ai_base 类。 lua 游戏架构 之 游戏 AI &#xff08;一&#xff09;ai_base-CSDN博客文章浏览阅读119次。定义了一套接口和属性&#xff0c;可以基于这个基础类派生出具有特定行为的AI组件。例如&#xff0c;可以…...

大数据之Oracle同步Doris数据不一致问题

数据同步架构如下&#xff1a; 出现的问题&#xff1a; doris中的数据条数 源库中的数据条数 总数完全不一致。 出现问题的原因&#xff1a; 在Dinky中建立表结构时&#xff0c;缺少对主键属性的限制 primary key(ID) not enforced 加上如上语句&#xff0c;数据条数解决一致 …...

visual studio 问题总结

一. Visual Studio: 使用简体中文&#xff08;GB2312&#xff09;编码加载文件, 有些字节已用Unicode替换字符更换 解决方法&#xff1a;vs 工具-》选项-》文本编辑器...

go-错误码的最佳实践

一、背景 在工程开发中&#xff0c;我们有以下场景可以用错误码解决 我们不太方便直接将内部的错误原因暴露给外部&#xff0c;可以根据错误码得到对应的外部暴露消息通过设定错误码判断是客户端或者服务端的问题&#xff0c;避免不必要的排障浪费方便查找日志&#xff0c;定…...

Python面试题:使用Matplotlib和Seaborn进行数据可视化

使用Matplotlib和Seaborn进行数据可视化是数据分析中非常重要的一部分。以下示例展示了如何使用这两个库来创建各种图表&#xff0c;包括基本的线图、柱状图、散点图和高级的分类数据可视化图表。 安装 Matplotlib 和 Seaborn 如果你还没有安装这两个库&#xff0c;可以使用以…...

模拟实现c++中的vector模版

目录 一vector简述&#xff1a; 二vector的一些接口函数&#xff1a; 1初始化&#xff1a; 2.vector增长&#xff1a; 3vector增删查改&#xff1a; 三vector模拟实现部分主要函数&#xff1a; 1.size,capacity,empty,clear接口&#xff1a; 2.reverse的实现&#xff1…...

uniapp安卓通过绝对路径获取文件

uniapp安卓通过绝对路径获取文件 在uniapp中&#xff0c;如果你想要访问安卓设备上的文件&#xff0c;你需要使用uniapp提供的plus.io API。这个API允许你在应用内访问设备的文件系统。 以下是一个示例代码&#xff0c;展示了如何使用plus.io API来获取文件&#xff1a; fun…...

Known框架实战演练——进销存业务单据

本文介绍如何实现进销存管理系统的业务单据模块&#xff0c;业务单据模块包括采购进货单、采购退货单、销售出货单、销售退货单4个菜单页面。由于进销单据字段大同小异&#xff0c;因此设计共用一个页面组件类。 项目代码&#xff1a;JxcLite开源地址&#xff1a; https://git…...

解决npm依赖树冲突的方法以及npm ERR! code ERESOLVE错误的解决方案

一、问题描述 在使用ng new myapp --skip-install 构建Angular 项目后&#xff0c;尝试用npm install 安装依赖的时候报了以下错误。 (base) PS C:\Users\Administrator\Desktop\agtest\myapp> npm i npm ERR! code ERESOLVE npm ERR! ERESOLVE unable to resolve dependenc…...

Spring Boot + Spring Batch + Quartz 整合定时批量任务

​ 博客主页: 南来_北往 系列专栏&#xff1a;Spring Boot实战 前言 最近一周&#xff0c;被借调到其他部门&#xff0c;赶一个紧急需求&#xff0c;需求内容如下&#xff1a; PC网页触发一条设备升级记录&#xff08;下图&#xff09;&#xff0c;后台要定时批量设备更…...

C++STL简介(二)

目录 1.模拟实现string 1.string基本属性和大体框架 2.基本函数 2.1size&#xff08;&#xff09; 2.2 [] 2.3 begin() 和end() 2.4capacity&#xff08;&#xff09; 2.5 reserve 2.6push_back 2.7 append 2.8 2.9insert 2.10find 2.11substr 2.12 2.12 < …...

嵌入式高频面试题100道及参考答案(3万字长文)

目录 解释嵌入式系统的定义和主要特点 描述微处理器与微控制器的主要区别 什么是ARM体系结构?它在嵌入式系统中有哪些优势? 解释GPIO(通用输入输出)的工作原理 什么是ADC和DAC?它们在嵌入式系统中的作用是什么? 解释中断的概念及其在实时系统中的重要性 描述SPI(串…...

python爬虫-事件触发机制

今天想爬取一些政策&#xff0c;从政策服务 (smejs.cn) 这个网址爬取&#xff0c;html源码找不到链接地址&#xff0c;通过浏览器的开发者工具&#xff0c;点击以下红框 分析预览可知想要的链接地址的id有了&#xff0c;进行地址拼接就行 点击标头可以看到请求后端服务器的api地…...

LeetCode-day27-3106. 满足距离约束且字典序最小的字符串

LeetCode-day27-3106. 满足距离约束且字典序最小的字符串 题目描述示例示例1&#xff1a;示例2&#xff1a;示例3&#xff1a; 思路代码 题目描述 给你一个字符串 s 和一个整数 k 。 定义函数 distance(s1, s2) &#xff0c;用于衡量两个长度为 n 的字符串 s1 和 s2 之间的距…...

C++中的static_cast函数

static_cast 是 C 中的一个类型转换操作符&#xff0c;用于在编译时进行类型转换。它主要用于基本数据类型之间的转换&#xff0c;以及类的指针或引用之间的向上转换&#xff08;将派生类指针或引用转换为基类指针或引用&#xff09;和某些情况下的向下转换&#xff08;将基类指…...

从零开始学习网络安全渗透测试之基础入门篇——(二)Web架构前后端分离站Docker容器站OSS存储负载均衡CDN加速反向代理WAF防护

Web架构 Web架构是指构建和管理Web应用程序的方法和模式。随着技术的发展&#xff0c;Web架构也在不断演进。当前&#xff0c;最常用的Web架构包括以下几种&#xff1a; 单页面应用&#xff08;SPA&#xff09;&#xff1a; 特点&#xff1a;所有用户界面逻辑和数据处理都包含…...

2679. 矩阵中的和

两种方法&#xff1a; 第一种&#xff1a;先对二维列表的每一列进行排序&#xff0c;然后对每一列的数据进行逐个比较&#xff0c;找出最大值。 class Solution:def matrixSum(self, nums: list[list[int]]) -> int:result0mlen(nums)nlen(nums[0])for i in range(m):nums…...

Unity Playables:下一代动画与音频序列

Unity的Playables API是一种灵活的系统&#xff0c;用于创建和控制动画、音频以及其他形式的连续媒体序列。它为开发者提供了一种全新的方法来处理游戏中的时间序列&#xff0c;包括动画、音频、特效等。本文将探讨Playables的基本概念、如何使用Playables API实现动画&#xf…...

matlab仿真 模拟调制(下)

&#xff08;内容源自详解MATLAB&#xff0f;SIMULINK 通信系统建模与仿真 刘学勇编著第五章内容&#xff0c;有兴趣的读者请阅读原书&#xff09; clear all ts0.001; t0:ts:10-ts; fs1/ts; dffs/length(t); msgrandi([-3 3],100,1); msg1msg*ones(1,fs/10); msg2reshape(ms…...

RabbitMQ是什么?

RabbitMQ是一个开源的消息代理软件&#xff08;Message Broker&#xff09;&#xff0c;它实现了高级消息队列协议&#xff08;AMQP&#xff0c;Advanced Message Queuing Protocol&#xff09;&#xff0c;并支持多种消息传递协议。它最初由英国的Rabbit Technologies开发&…...

追问试面试系列:分布式id

hi 大家好,欢迎来到追问试面试系列:分布式id 面试中可能面试官不会直接问你分布式id问题,基本上都是因为你在某些面试题回答中提到了,所以就开始追问分布式id相关问题。 先看面试题 ● 面试官:什么是分布式id? ● 面试官:举个例子说说 ● 面试官:什么叫分库分表? ●…...

护网紧急情况应对指南:Linux 应急响应手册

继上一篇&#xff1a;护网紧急情况应对指南&#xff1a;Windows版v1.2全新升级版 之后 收到小伙伴后台要Linux应急手册&#xff0c;今天给大家安排上。 《Linux应急手册》是一本为Linux系统管理员和运维工程师量身打造的实用指南&#xff0c;旨在帮助他们快速应对各种突发状况…...

WEB攻防-通用漏洞-SQL 读写注入-MYSQLMSSQLPostgreSQL

什么是高权限注入 高权限注入指的是攻击者通过SQL注入漏洞&#xff0c;利用具有高级权限的数据库账户&#xff08;如MYSQL的root用户、MSSQL的sa用户、PostgreSQL的dba用户&#xff09;执行恶意SQL语句。这些高级权限账户能够访问和修改数据库中的所有数据&#xff0c;甚至执行…...

【前端学习笔记】CSS基础一

一、什么是CSS 1.CSS 介绍 CSS&#xff08;Cascading Style Sheets&#xff0c;层叠样式表&#xff09;是一种用来控制网页布局和设计外观的样式语言。它使得开发者可以分离网页的内容&#xff08;HTML&#xff09;和表现形式&#xff08;样式&#xff09;&#xff0c;提高了…...

Github遇到的问题解决方法总结(持续更新...)

1.github每次push都需要输入用户名和token的解决方法 push前&#xff0c;执行下面命令 &#xff1a; git config --global credential.helper store 之后再输入一次用户名和token之后&#xff0c;就不用再输入了。 2.git push时遇到“fatal: unable to access https://githu…...

数字信封+数字签名工具类测试样例(Java实现)

加解密过程 加密&#xff1a; 生成加密方SM2密钥对用于签名使用生成的SM2私钥生成数字签名生成SM4对称密钥对明文进行对称加密使用与解密方提前约定好的SM2公钥对第三步中的SM4对称密钥进行非对称加密把【加密方SM2公钥】、【数字签名】、【SM4对称加密后的密文】和【SM2非对…...

The Schematic workflow failed. See above.

在使用 ng new 新建Angular项目的时候会报一个错误&#xff1a;The Schematic workflow failed. See above. 解决办法&#xff1a; 只需要在后面加上 --skip-install 参数&#xff0c;就不会报错了。 ng new myapp --skip-install...

操作系统面试知识点总结4

#来自ウルトラマンメビウス&#xff08;梦比优斯&#xff09; 1 文件系统基础 1.1 文件的相关概念 文件是以计算机硬盘为载体的存储在计算机上的信息集合&#xff0c;可以是文本文档、图片、程序。 文件的结构&#xff1a;数据项、记录、文件&#xff08;有结构文件、无结构式…...

Lua实现面向对象以及类的继承

0.简单前言 1、面向对象主要四个特征&#xff1a;封装&#xff0c;继承&#xff0c;多态&#xff0c;抽象 2、Lua是种简单精致小巧的语言&#xff0c;其本质是个表&#xff08;table&#xff09;&#xff0c;变量和方法皆可看作为该表的元素。 P.S. 该博客和代码为个人编写习…...

机器学习课程学习周报五

机器学习课程学习周报五 文章目录 机器学习课程学习周报五摘要Abstract一、机器学习部分1.1 向量序列作为模型输入1.1.1 文字的向量表达1.1.2 语音的向量表达 1.2 自注意力机制原理1.2.1 自注意力机制理论1.2.2 矩阵运算自注意力机制 1.3 多头自注意力1.4 位置编码1.5 截断自注…...

vue3.0学习笔记(二)——生命周期与响应式数据(ref,reactive,toRef,toRefs函数)

1. 组合API-setup函数 使用细节&#xff1a; setup 是一个新的组件选项&#xff0c;作为组件中使用组合API的起点。从组件生命周期来看&#xff0c;它的执行在组件实例创建之前vue2.x的beforeCreate执行。这就意味着在setup函数中 this 还不是组件实例&#xff0c;this 此时是…...

C++——QT:保姆级教程,从下载到安装到用QT写出第一个程序

登录官网&#xff0c;在官网选择合适的qt版本进行下载 这里选择5.12.9版本 点击exe文件下载&#xff0c;因为服务器在国外&#xff0c;国内不支持&#xff0c;所以可以从我的网盘下载 链接: https://pan.baidu.com/s/1XMILFS1uHTenH3mH_VlPLw 提取码: 1567 --来自百度网盘超级…...