大一统模型 Universal Instance Perception as Object Discovery and Retrieval 论文阅读笔记

news2024/12/24 2:28:52

Universal Instance Perception as Object Discovery and Retrieval 论文阅读笔记

  • 一、Abstract
  • 二、引言
  • 三、相关工作
    • 实例感知
      • 通过类别名进行检索
      • 通过语言表达式的检索
      • 通过指代标注的检索
    • 统一的视觉模型
      • Unified Learning Paradigms
      • Unified Model Architectures
  • 四、方法
    • 4.1 Prompt 生成
    • 4.2 图像-Prompt 特征融合
    • 4.3 目标发现和检索
    • 4.4 训练和推理
      • 训练
      • 推理
  • 五、实验
    • 5.1 实施细节
    • 5.2 在 10 个任务上的评估
      • 目标检测和实例分割
      • REC 和 RES
      • SOT
      • VOS
      • MOT
      • MOTS
      • VIS
      • R-VOS
    • 5.3 消融和其它分析
  • 六、结论

写在前面

  马上又是一周周末了,开始写论文博客啦。

  这是一篇顶会文章,标题很清楚,就是一个一统的框架用于解决各种任务。这类文章在 21 年的时候挺多的,现在倒是不常见了。因为需要的资源很多,外部数据集也很庞大,一般的小资源团队基本搞不定。但一旦出世,效果必然十分炸裂。

  • 论文地址:Universal Instance Perception as Object Discovery and Retrieval
  • 代码地址:https://github.com/MasterBin-IIAU/UNINEXT
  • 收录于:CVPR 2023

一、Abstract

  所有的实例感知任务旨在发现利用 queries 查询到的目标,例如类别名、语言表达式、目标标注,但这一领域被划分为多个独立的子任务。于是本文提出了一种统一的实例感知模型 UNINEXT。UNINEXT 将多个实例感知任务划分为一个统一的目标发现和检索过程,通过改变输入的 promots 能够弹性地感知不同类型的目标。于是有一些好处:不同任务的数据和标签词汇能够用于训练统一的模型,而且有益于那些缺乏训练数据的任务;参数有效性,能够降低冗余的计算。UNINEXT 在 20 个 数据集,10 种实例级别的任务,6 种视频级别的任务上效果很好。

二、引言

  计算机视觉领域中,以目标为中心的理解是其中一个最关键和挑战性的任务。本文主要讨论其中的 10 个子任务。如下图所示:

在这里插入图片描述
  
  最基础的任务则是目标检测、实例分割、多目标跟踪\分割、视频实例分割。除了这些类别名外,还有一些任务则需要其他的指代信息,例如 Referring Expression Comprehension (REC) /Segmentation (RES)、Referring Video Object Segmentation (R-VOS)、单目标跟踪、视频目标分割等等。这些任务统称为实例感知。

  当前的实例感知方法都是基于一个或一部分子任务开发出的方法,且仅仅在特定的数据集上训练。这一设计有如下缺陷:独立的设计阻止了模型学习和共享不同任务的知识;多个任务间的交互合作可能被忽略掉了。受限于固定范围的类别,传统的目标检测器很难在多个目标类别的数据集上进行训练。于是问题来了:所有的实例感知任务旨在根据一些 queries 发现某些特定的目标,那么有没有可能设计一个统一的模型用于所有主流的实例感知任务呢?

  于是本文提出 UNINEXT,首先根据三种不同的输入 prompt 重新组织 10 种感知任务:

  • 类别名作为 Prompt,包含 Object Detection、Instance Segmentation、VIS,、MOT、MOTS
  • 语言表达式作为 Prompt,包含 REC、RES、R-VOS
  • 指代标注作为 Prompt,包含 SOT、VOS

  然后提出一种统一的,prompt 引导的目标发现和检测方法来解决这些任务。具体来说,UNINEXT 首先在 prompts 的引导下发现 N N N 个目标 Proposals,然后根据实例-Prompt 匹配得分检索出最终的实例。为解决不同的 prompt 模态,采用一种 Prompt 生成模块,由一个指代文本编码器和一个指代视觉编码器组成。然后一个早期融合模块用于增强初始的视觉特征和 prompt embeddings。选择基于 Transformer 的目标检测器作为实例解码器。具体来说,解码器首先生成 N N N 个实例 Proposals,然后这些 Prompt 从这些 Proposals 中检索出匹配的目标。

  在 10 个实例级别的感知任务上,统一使用一个模型,相同的模型参数,UNINEXT 在 20 个 benchmarks 上达到了 SOTA 的性能。本文贡献总结如下:

  • 提出一个统一的 Prompt 框架用于统一的实例感知;
  • UNINEXT 能够在不同的任务和领域上训练,不需要特定的任务头;
  • UNINEXT 在 20 个 benchmarks,10 个实例感知任务上,达到了 SOTA 的性能。

三、相关工作

实例感知

通过类别名进行检索

  目标检测和实例感知旨在找到所有特定类别的目标 boxes 或 masks。早期的目标检测器可以大致划分为两阶段和一阶段的方法。最近是一些基于 Transformer 的检测器开始兴起。同时,实例分割方法也可以根据是否需要 box 级别的检测器划分为基于检测器和无检测器的方法。目标检测和实例分割同时也是 MOT、MOTS、VIS 的基石。主流的方法采用在线 “检测-关联” 的策略。然而最近的一些 VIS 方法采用离线的方式,在 VIS2019 数据集上表现很好,但是在 OVIS 上表现不行。

通过语言表达式的检索

  REC、RES、RVOS 旨在根据一条语言表达式发现一个特定的目标。与目标检测类似,REC 方法同样可以划分为三种类型。两阶段、单阶段和基于 Transformer 的方法。不同于 REC,RES 关注于设计不同的注意力机制从而实现视觉-语言的对齐。最近,SeqTR 提出将 REC 和 RES 视为点预测问题,达到了新的 SOTA。最后 R-VOS 可以视为 RES 在视频领域上的拓展。当前的 SOTA 方法是基于 Transformer 的离线方式。然而,离线方式妨碍了现实世界的应用,例如自动驾驶。

通过指代标注的检索

  SOT 和 VOS 首先在视频的第一帧上面使用 boxes 或者 masks 确定要跟踪的目标,然后要求算法去预测被跟踪目标的轨迹。这一任务核心问题在于:如何提取信息量丰富的目标特征?如何融合目标信息与当前帧的表示?

  对于第一个问题,大部分 SOT 方法通过一个 Siamese Backbone 编码目标信息。而 VOS 方法通常聚合多帧信息与相应的 masks 送入一个 memory 编码器中,提取细粒度的目标信息。对于第二个问题,之前的方法通常采用关联的手段,可能会导致信息丢失。最近的一些工作利用 Transformer 得到更具有区分性的表示。此外,VOS 中的特征融合也被空间-时间 memory 网络采用。

统一的视觉模型

  分为统一的学习算法和统一的模型架构

Unified Learning Paradigms

  通常是一种统一的学习算法用于覆盖尽可能多的任务和模态。例如 MuST、INTERN、Unified-IO、OFA。尽管这些工作在多个任务上的表现很好,但是模态内和模态间的关系还有待探索。

Unified Model Architectures

  通常设计一种统一的框架或者模型结构用于一组密切关联的任务。例如 Mask R-CNN、Mask2Former、Pix2SeqV2、GLIP、Unicorn。而本文提出一种统一的 Prompt 引导的结构用于 10 种实例感知任务。

四、方法

  首先将现有的实例感知任务分为三类:

  • 目标检测、实例分割、MOT、MOTS、VIS,以类别名为 Prompt ,找到所有特定类别的实例。
  • REC、RES、R-VOS,以表达式作为 Prompt,定位到某个特定的目标。
  • SOT 和 VOS,使用第一帧给定的标注作为 Prompt,预测被跟踪目标的轨迹。
    在这里插入图片描述
      UNINEXT 由三个主要模块组成:prompt 生成、image-prompt 特征融合、目标发现和检索。

4.1 Prompt 生成

  首先一个 Prompt 模块将原始的 prompts 输入转化为统一的格式。为解决语言相关的 Prompt,使用语言编码器 BERT,表示为 EncL。具体来说。对于类别引导的任务,将当前数据集内出现的类别名作为语言表达式。以 COCO 为例,表达式可以写作:“person. bicycle. … . toothbrush”。对于所有的类别引导和表达式引导的任务,语言表达式通过 EncL,得到一个 Prompt embedding F p ∈ R L × d F_p\in\mathbb{R}^{L\times d} FpRL×d L L L 为序列长度。

  对于标注引导的任务,采用一个指代视觉编码器 Enc V ref \text{Enc}_\text{V}^\text{ref} EncVref。具体来说,首先在相关帧的指代位置处裁剪出一个 2 2 2^2 22 倍原目标区域的模板。然后将这一模板调整为固定尺寸 256 × 256 256\times256 256×256。接下来添加一个额外的通道,名为目标先验,拼接上去形成一个 4 通道的输入。目标区域先验处的值设为 1,其它为 0。然后这一模板图像与目标先验一起通过 Enc V ref \text{Enc}_\text{V}^\text{ref} EncVref,得到一个级联的特征金字塔 { C 3 , C 4 , C 5 , C 6 } \{C_3,C_4,C_5,C_6\} {C3,C4,C5,C6},相应的空间尺寸为 32 × 32 32\times32 32×32 16 × 16 16\times16 16×16 8 × 8 8\times8 8×8 4 × 4 4\times4 4×4。最后将所有特征上采样到 32 × 32 32\times32 32×32,之后相加。展平后得到最终的 Prompt embedding F p ∈ R 1024 × d F_p\in\mathbb{R}^{1024\times d} FpR1024×d

  Prompt 生成过程表示如下:
F p = { E n c L r e f ( exp ⁡ ression )                                      expression-guided E n c L r e f ( concat ( categories ) )                         category-guided m e r g e ( E n c V r e f ( [template, prior] )                 annotation-guided F_p=\begin{cases}\mathrm{Enc}_\mathrm{L}^\mathrm{ref} (\exp\text{ression})~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\text{expression-guided}\\\mathrm{Enc}_\mathrm{L}^\mathrm{ref}(\text{concat}(\text{categories}))~~~~~~~~~~~~~~~~~~~~~~~~\text{category-guided}\\\mathrm{merge}(\mathrm{Enc}_\mathrm{V}^\mathrm{ref}(\text{[template, prior]})~~~~~~~~~~~~~~~~ \text{annotation-guided}&\end{cases} Fp= EncLref(expression)                                     expression-guidedEncLref(concat(categories))                        category-guidedmerge(EncVref([template, prior])                annotation-guided

4.2 图像-Prompt 特征融合

  与 Prompt 并行,整个图像穿过另一个视觉编码器 Enc V \text{Enc}_\text{V} EncV,得到级联的视觉特征 F v F_v Fv,然后采用一个提前融合模块。具体来说。一个双向的 cross-attention(Bi-XAtt)模块用于检索不同输入的信息,然后将检索到的表示添加到原始的特征上。这一过程描述为:
F p 2 v , F v 2 p = B i − X A t t ( F v , F p ) F v ′ = F v + F p 2 v ; F p ′ = F p + F v 2 p \begin{aligned} &F_{\mathrm{p2v}},F_{\mathrm{v2p}}=\mathrm{Bi-XAtt}(F_{v},F_{p}) \\ &F_{v}^{\prime}=F_{v}+F_{\mathbf{p}2\mathbf{v}};F_{p}^{\prime}=F_{p}+F_{\mathbf{v}2\mathbf{p}} \end{aligned} Fp2v,Fv2p=BiXAtt(Fv,Fp)Fv=Fv+Fp2v;Fp=Fp+Fv2p  不同于 GLIP,其采用 6 层的视觉-语言融合层和 6 层外部 BERT 层用于特征增强,本文的提前融合模块则更有效率。

4.3 目标发现和检索

  在提出显著性的视觉和 prompt 表示后,下一个关键步骤则是将输入的特征转化为不同感知任务中的实例。UNINEXT 采用 Deformable-DETR 中的编码器-解码器架构。

  Transformer 编码器以级联的 prompt 感知的视觉特征作为输入。然后采用 Multi-scale Deformable Self-Attention 增强目标信息。此外,添加辅助的预测头用于编码器的结尾,生成 N N N 个初始的参考点作为解码器的输入。

  Transformer 解码器以增强的多尺度特征, N N N 个参考点 和 N N N 个目标 queries 作为输入。本文尝试两种 query 生成策略:静态 query,不随图像或 Prompts 而改变;基于 Prompt 的动态 queries。第一种策略很容易通过 nn.Embedding(N,d) \text{nn.Embedding(N,d)} nn.Embedding(N,d) 实现,而第二种策略则可以通过池化序列维度,增强的 Prompt 特征 F v ′ F_v^{\prime} Fv 得到,之后重复 N N N 次。实验部分表明静态策略通常执行的比动态策略好。原因可能是静态部分包含了更丰富的信息,同时拥有更好的训练稳定性。

  在解码器的结尾,采用一组预测头来得到最终的实例预测,产生目标的 boxes 和 masks。此外,引入一个 embedding 头用于辅助 MOT、MOTS、VIS 所需要的轨迹。

  接下来产生精确的目标。具体来说,给定早期融合后的 prompt embedding F p ′ F_p^{\prime} Fp,对于类别引导任务,将每个名字的 embedding 视为一个权重矩阵 W ∈ R 1 × d W\in\mathbb{R}^{1\times d} WR1×d。此外,对于表达式引导和标注引导的任务,权重矩阵 W W W 通过对聚合的 prompt embedding F p ′ F_p^{\prime} Fp,使用全局平均池化 global average pooling (GAP) 沿着序列维度得到。给出公式描述过程:
W = { F p ′ [ i ] , i ∈ { 0 , 1 , . . . , C − 1 } category 1 L ∑ i = 0 L F p ′ ( i , j ) expression/annotation W=\begin{cases}F_p'[i],i\in\{0,1,...,C-1\}&\text{category}\\\frac{1}{L}\sum_{i=0}^LF_p'(i,j)&\text{expression/annotation}\end{cases} W={Fp[i],i{0,1,...,C1}L1i=0LFp(i,j)categoryexpression/annotation
  最终,实例-Prompt 匹配得分 S S S ,表示为目标特征和转换后的权重矩阵的乘积: S = F ins W T S=F_\text{ins}W^{\text{T}} S=FinsWT,通过 Focal Loss 监督其训练。

4.4 训练和推理

训练

  整体的训练过程包含三个连续阶段:通用的感知预训练;图像级别的共同训练;视频级别的共同训练。第一阶段,预训练 UNINEXT 在大规模目标检测数据集 Objects365 上。由于 Objects365 没有 mask 标注,于是引入 BoxInst 中提出的辅助损失用于训练 mask 分支,于是损失函数为:
L s t a g e 1 = L r e t r i e v e + L b o x + L m a s k b o x i n s t \mathcal{L}_{\mathrm{stage}1}=\mathcal{L}_{\mathrm{retrieve}}+\mathcal{L}_{\mathrm{box}}+\mathcal{L}_{\mathrm{mask}}^{\mathrm{boxinst}} Lstage1=Lretrieve+Lbox+Lmaskboxinst
然后基于第一阶段的预训练权重,在图像数据集 COCO、RefCOCO、RefCOCO+、RefCOCOg 上微调 UNINEXT。使用 Dice Loss 和 Focal Loss 进行 mask 的训练:
L s t a g e 2 = L r e t r i e v e + L b o x + L m a s k \mathcal{L}_{\mathrm{stage2}}=\mathcal{L}_{\mathrm{retrieve}}+\mathcal{L}_{\mathrm{box}}+\mathcal{L}_{\mathrm{mask}} Lstage2=Lretrieve+Lbox+Lmask
  最后在视频级别的数据集上微调 UNINEXT。为防止模型遗忘之前在图像级别上学到的知识,将图像级别的数据集转化为伪视频,和其它视频数据集一起训练。总结下,第三阶段的训练数据包含:伪标签视频、SOT&VOS 数据集(GOT-10K、LaSOT、TrackingNet、Youtube-VOS),MOT&VIS 数据集(BDD100K、VIS19、OVIS),R-VOS 数据集 Ref-Youtube-VOS。同时,一个用于 SOT&VOS 任务的指代视觉编码器和一个外部的 embedding 头用于辅助优化。于是第三阶段的损失如下:
L s t a g e 3 = L r e t r i e v e + L l o o x + L m a s k + L e m b e d \mathcal{L}_{\mathrm{stage}3}=\mathcal{L}_{\mathrm{retrieve}}+\mathcal{L}_{\mathrm{loox}}+\mathcal{L}_{\mathrm{mask}}+\mathcal{L}_{\mathrm{embed}} Lstage3=Lretrieve+Lloox+Lmask+Lembed

推理

  对于类别引导的任务,UNINEXT 预测不同类别的实例并将其与之前的轨迹关联起来,这一过程是在线的方式。对于表达式引导和标注引导的任务,直接选择与给定 Prompt 最高匹配得分的目标作为最终的结果,无需后处理。

五、实验

5.1 实施细节

  尝试不同的视觉 Backbone 作为编码器,如 ResNet-50、ConvNeXt-Large、ViT-Huge。BERT 为文本编码器,其参数在第一个阶段训练而在第二个阶段冻结。Transformer 中的编码器和解码器结构有 6 层的编码器层和 6 层的解码器层。目标 queries 的数量 N = 900 N=900 N=900。优化器 AdamW,权重衰减 0.05。预训练在 Objects365 上采用 32 个 A100 GPU,而在其它阶段则采用 16 块 A100(一般的小作坊就不用尝试啦)。

5.2 在 10 个任务上的评估

目标检测和实例分割

在这里插入图片描述

REC 和 RES

在这里插入图片描述

SOT

在这里插入图片描述

VOS

在这里插入图片描述

MOT

在这里插入图片描述

MOTS

在这里插入图片描述

VIS

在这里插入图片描述

R-VOS

在这里插入图片描述

5.3 消融和其它分析

  所有的模型均采用 ResNet-50 作为 backbone,在五个任务(目标检测、REC、VOS、R-VOS、VIS)的五个数据集 COCO、RefCOCO、Youtube-VOS、Ref-Youtube-VOS、Youtube-VIS 2019 上进行评估。结果如下表所示:
在这里插入图片描述

六、结论

  本文提出 UNINEXT,采用 Prompt 引导的目标发现和检索算法统一了 10 个实例感知任务,大量实验表明 UNINEXT 在 20 个数据集上,同一套模型参数达到了 SOTA 的性能。

写在后面

  附录还有一些内容,关于训练细节、可视化、损失函数啥的,这里就不过多展开了。通篇读下来,是一个以 Prompt 为主要形式的框架,新颖性可能也不算太高吧,毕竟有 SAM 和 Unified 等模型在前面开路,但是这个调参和实验的工作量应该是值得一篇顶会论文的。

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

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

相关文章

【论文解读】Edit-DiffNeRF:使用2D-扩散模型编辑3D-NeRF

来源:投稿 作者:橡皮 编辑:学姐 论文链接:https://arxiv.org/abs/2306.09551 摘要 最近的研究表明,将预训练的扩散模型与神经辐射场(NeRF)相结合,是一种很有前途的文本到 3D 的生成…

“不得了·放飞杯” 2023年四川省健身健美锦标赛启动在成都隆重召开

“不得了放飞杯” 2023年四川省健身健美锦标赛启动在成都隆重召开 为了更好地推动四川省健身健美运动的普及和发展,结合《四川全民健身实施计划》的现状,适应新时代健身私教服务产业的发展需求,由中国健美协会指导,四川省健美健美…

使用SpringBoot集成FastDFS

使用SpringBoot集成FastDFS 这篇文章我们介绍如何使用 Spring Boot 将文件上传到分布式文件系统 FastDFS 中。 1、FastDFS FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问 &#xff0…

[修订版][工控]SIEMENS S7-200 控制交通红绿灯程序编写与分析

下载地址>https://github.com/MartinxMax/Siemens_S7-200_Traffic_Light 特别鸣谢接线过程实验目的题目要求I/O分配公式公式套用示例 程序分析分割块[不是必要的,自己分析用]左侧梯形图 [B1-B5]B1 [东西绿灯亮25s]B2 B3 B23 [东西绿灯闪烁3s]B4 [东西黄灯亮2s]B5 [东西红灯…

Labelme加载AI(Segment-Anything)模型进行图像标注

labelme是使用python写的基于QT的跨平台图像标注工具,可用来标注分类、检测、分割、关键点等常见的视觉任务,支持VOC格式和COCO等的导出,代码简单易读,是非常利用上手的良心工具。 第一步:   下载源码进行安装。 g…

float和double(浮点型数据)在内存中的储存方法

作者:元清加油 主页:主页 编译环境:visual studio 2022 (x86) 相信大家都知道数据在内存中是以二进制储存的 整数的储存方法是首位是符号位,后面便是数值位 那么浮点数在内存中是怎么储存的呢?我们先来看一个例子&am…

Python----函数的不定长参数--包裹位置参数*args、包裹关键字参数**kwargs

不定长参数 也叫 可变参数。用于不确定调用的时候会传递多少个参数(不传参也可以)的场景。此时,可用包裹(packing)位置参数,或者包裹关键字参数,来进行参数传递,会显得非常方便。 相关链接:Python---函数的参数类型--…

带你用uniapp从零开发一个仿小米商场_1.环境搭建

uniapp 介绍 uni-app 是一个使用 Vue.js 开发所有前端应用的框架,开发者编写一套代码,可发布到iOS、Android、Web(响应式)、以及各种小程序(微信/支付宝/百度/头条/飞书/QQ/快手/钉钉/淘宝)、快应用等多个…

【Python篇】详细讲解正则表达式

文章目录 🌹什么是正则表达式🍔语法字符类别重复次数组合模式 ✨例子 🌹什么是正则表达式 正则表达式(Regular Expression),简称为正则或正则表达式,是一种用于匹配、查找和操作文本字符串的工…

还在犹豫Harmony要不要学?已有170万人参加官方培训

鸿蒙这么火,要不要学? 两百强的 App厂商,大部分接受了与鸿蒙的合作,硬件也有非常多与鸿蒙合作的厂商。鸿蒙的合作企业基本已经覆盖整个互联网客户的主流需求;所以鸿蒙的崛起不过是早晚的问题。随着鸿蒙4.0的升级&…

Linxu 进程替换

进程替换的背景: 进程的替换我们需要调用execl这个接口,exxecl在3号手册,属于系统接口。 调用系统命令 execl 为了方便理解execl的作用,我们写一个程序: 单进程替换 我们发现运行结果是通过c库里的exec接口把系统命令 "l…

3 Unsupervised learning recommenders reinforcement learning

文章目录 Week1Unsupervised LearningClusteringK-meansprincipleOptimization objectiveInitializing K-meanschose the number of clusters Anomaly DetectionFind unusual eventsAlgorithmchose epsilonAnomally Detection vs Supervised learningfeatures Week2Recommender…

LeetCode Hot100 114.二叉树展开为链表

题目: 给你二叉树的根结点 root ,请你将它展开为一个单链表: 展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左子指针始终为 null 。展开后的单链表应该与二叉树 先序遍历 顺序相同…

力扣114. 二叉树展开为链表(java,用树模拟链表)

Problem: 114. 二叉树展开为链表 文章目录 题目描述思路解题方法复杂度Code 题目描述 给你二叉树的根结点 root ,请你将它展开为一个单链表: 1.展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左…

C/C++ 通过SQLiteSDK增删改查

SQLite,作为一款嵌入式关系型数据库管理系统,一直以其轻量级、零配置以及跨平台等特性而备受青睐。不同于传统的数据库系统,SQLite是一个库,直接与应用程序一同编译和链接,无需单独的数据库服务器进程,实现…

FFmpeg命令分隔视频

有一个视频如a.mp4,此视频采用帧率为30生成,共有299帧,这里通过FFmpeg命令分隔成1秒一个个的小视频,即每个小视频帧数为30帧。 用到的FFmpeg参数如下所示: (1).-i:指定输入视频文件的名称; (2).-c:指…

BUUCTF [MRCTF2020]Ez_bypass 1

题目环境:F12查看源代码 I put something in F12 for you include flag.php; $flagMRCTF{xxxxxxxxxxxxxxxxxxxxxxxxx}; if(isset($_GET[gg])&&isset($_GET[id])) { $id$_GET[id]; $gg$_GET[gg]; if (md5($id) md5($gg) && $id ! $gg) { …

Node.js下载安装及配置镜像源

一、进入官网地址下载安装包 https://nodejs.org/dist 选择对应你系统的Node.js版本 这里我选择的是Windows系统、64位 二、安装程序 (1)下载完成后,双击安装包,开始安装Node.js (2)直接点【Next】按钮,此处可根据…

终于来了,Runway gen2 制作AI视频的全功能超详细使用教程

最近有好几个学员私信我们,让我出一期Runway完整的使用教程,刚好11月Runway对外发布运动涂笔等新功能,那么今天就给大家安排一期全功能,超详细的从Gen1到Gen2的使用教程。 Runway 是国外一家在线视频剪辑制作网站,作为…

el-uploader同一文件无法上传问题

在上传成功和失败的回调方法中,吊用一下clearFiles方法。 this.$refs.upload.clearFiles();