R-Adapter:零样本模型微调新突破,提升鲁棒性与泛化能力 | ECCV 2024

大规模图像-文本预训练模型实现了零样本分类,并在不同数据分布下提供了一致的准确性。然而,这些模型在下游任务中通常需要微调优化,这会降低对于超出分布范围的数据的泛化能力,并需要大量的计算资源。论文提出新颖的Robust AdapterR-Adapter),可以在微调零样本模型用于下游任务的同时解决这两个问题。该方法将轻量级模块集成到预训练模型中,并采用新颖的自我集成技术以提高超出分布范围的鲁棒性,并大幅减少存储开销。此外,论文提出了针对视觉-语言下游任务设计的MPM-NCE损失,确保多个图像-文本对的精确对齐和具有区分性的特征学习。

来源:晓飞的算法工程笔记 公众号

论文: Efficient and Versatile Robust Fine-Tuning of Zero-shot Models

  • 论文地址:https://www.arxiv.org/abs/2408.05749
  • 论文代码:http://cvlab.postech.ac.kr/research/R-Adapter

Introduction


  大规模联合图像和文本数据预训练模型的出现在计算机视觉领域引起了范式转变。通过对大量图像-文本对的嵌入进行对齐,这些模型实现了零样本推断,并展现出在不同数据分布下广泛泛化的显著能力。尽管它们在零样本情境下表现出色,但它们无法与监督学习模型相媲美,需要进行微调以发挥其全部能力。然而,传统的全面微调会产生两个主要挑战:1)全面微调损害了模型对于超出分布范围(OOD)数据的泛化能力,而这对于数据变异性不可预测的实际应用至关重要。2)它需要大量的计算资源、内存和存储,而随着大规模预训练模型的不断增大,这是不切实际的。

  最近,针对这些挑战提出了几种微调方法。鲁棒微调的目标是在微调零样本模型的同时保持对OOD的鲁棒性,而参数高效微调(PEFT)仅更新一小部分参数,同时保持预训练参数的冻结状态。然而,每种方法只解决其中一个挑战,同时在另一个挑战上仍然存在不足。如图1所示,现有的鲁棒微调方法仍然需要微调整个模型,导致训练代价高昂。此外,它们仅针对分类任务,因此通常仅训练图像编码器,从模型中排除了零样本推断能力。另一方面,与鲁棒微调相比,PEFT在分布偏移下的性能显著滞后。它们的关键缺点凸显了需要新的微调方法,同时解决鲁棒微调和PEFT分别应对的两个挑战。

  本文提出了一种名为鲁棒适配器(R-Adapter)的新型微调方法,旨在提高PEFT的鲁棒性,并增强鲁棒微调的效率。在适配器微调方法的基础上向预训练模型添加额外的轻量级模块,R-Adapter引入了新颖的自我集成策略,以增强OOD的鲁棒性。

  受到在权重空间中平均多个模型时观察到的鲁棒性增益的启发,通过一种独特的方式在单个模型内实现这种策略。这种方法在任务特定性能和针对分布偏移的鲁棒性之间取得了良好的平衡,同时显著降低了存储成本。具体而言,R-Adapter通过三种自我集成技术实现这一目标。它随机丢弃适配器模块,从而动态生成并集成不同子网络,以各种配置组合适配器和预训练层。此外,累积适配器权重以形成一个时间集成,捕捉整个学习过程中产生的所有模型。此外,通过重新缩放适配器的权重,并通过重新参数化将其整合到预训练层中,论文实现了在没有两个单独模型的情况下,在预训练和微调模型的权重之间实现无缝的线性插值。

  此外,论文提出了一种名为Multi-Positive Margin NCEMPM-NCE)损失函数,专为在视觉-语言下游任务上进行有效微调而设计。这些任务通常涉及复杂的关系,其中多个图像可以对应于相同的文本,反之亦然。与传统的对比损失(例如InfoNCE)不同,后者接受单一正样本对,并因此经常导致这些关系中的语义不匹配,MPM-NCE考虑了多个正样本对,从而更精确地对齐跨各种图像和文本对。此外,MPM-NCE引入了一个角度边距以惩罚负样本对,使模型能够学习对下游任务至关重要的高度区分的特征。因此,所提出的损失函数显著改善了任务特定性能,在IDOOD环境下都带来了益处。

  论文的方法在微调后实现了零样本推理,在图像分类任务之外扩展了其适用性范围,适用于广泛的应用领域。为了展示其多功能性,论文提出了一个新的用于鲁棒微调的评估基准,包括五个任务:三种情景下的图像分类任务、跨模态检索和开放词汇分割。大量实验证明,与现有的鲁棒微调和PEFT方法相比,论文的方法在分布转移条件下表现出卓越性能,同时使用的参数更少。

  本文的主要贡献有四点:

  1. 提出了一个高效且多功能的鲁棒微调框架,融合了PEFT和鲁棒微调的优势,这是第一个兼具两者优势的方法。

  2. 提出了R-Adapter,采用自集成技术,借助单个带有适配器的模型实现权重空间集成。能够在减少存储成本的同时增强鲁棒性,因为不需要多个模型。

  3. 开发了适用于微调的MPM-NCE损失,利用多个正样本对和引入角度间隔,确保了多个图像-文本对的精确对齐和具有区分性的特征学习。

  4. 首次将鲁棒微调的基准拓展到图像分类之外的任务,包括跨模态检索和开放词汇分割,从而允许评估其广泛适用性。论文的方法在各种任务中取得了最先进的性能,仅微调了13%CLIP编码器参数。

Proposed Method


Preliminary

  • CLIP Encoders

CLIP由两个编码器组成,分别用于从图像和文本中提取特征。每个编码器由一系列Transformer层组成,每个层包括多头注意力(MHA)、层归一化(LN)和前馈神经网络(FFN)。具体而言,第 l l lTransformer层的公式如下:

KaTeX parse error: Undefined control sequence: \label at position 154: …) + \bar{X_l}. \̲l̲a̲b̲e̲l̲{eq:Transformer…

MHA包括对查询、键和值进行 k k k 头自注意力操作,通过对输入进行独立的线性投影来实现,其公式为:

KaTeX parse error: Undefined control sequence: \label at position 213: …)(XW_{V}^{i}), \̲l̲a̲b̲e̲l̲{eq:MHA} \end{a…

  其中 [ ⋅ , ⋅ ] [\cdot,\cdot] [,] 表示拼接, d h d_h dh 设为 d / k d/k d/k W Q i ∈ R d × d h W_{Q}^{i}\in\mathbb{R}^{d\times d_h} WQiRd×dh W K i ∈ R d × d h W_{K}^{i}\in\mathbb{R}^{d\times d_h} WKiRd×dh W V i ∈ R d × d h W_{V}^{i}\in\mathbb{R}^{d\times d_h} WViRd×dh W O ∈ R d × d W_{O}\in\mathbb{R}^{d\times d} WORd×d 是线性投影矩阵。FFN由两个线性层和一个非线性层组成:

KaTeX parse error: Undefined control sequence: \label at position 64: …b_1)W_2 + b_2, \̲l̲a̲b̲e̲l̲{eq:FFN} \end{e…

  其中 W 1 ∈ R d × 4 d W_1\in\mathbb{R}^{d\times4d} W1Rd×4d , W 2 ∈ R 4 d × d W_2\in\mathbb{R}^{4d\times d} W2R4d×d , b 1 ∈ R 4 d b_1 \in \mathbb{R}^{4d} b1R4d , 和 b 2 ∈ R d b_2 \in \mathbb{R}^d b2Rd 分别是线性投影的权重和偏置; σ ( ⋅ ) \sigma(\cdot) σ() 表示GELU函数。

  • Contrastive Learning

CLIP编码器被训练用于预测哪些文本描述与给定的一组图像匹配,反之亦然。这通过使用InfoNCE损失来进行对比学习来实现,该损失迫使图像嵌入和其对应的文本嵌入彼此靠近,并远离批次中的其他文本嵌入。设 f ( ⋅ ) f(\cdot) f() g ( ⋅ ) g(\cdot) g() 分别是图像和文本的CLIP编码器。给定一个批次包含 B B B 个图像-文本对 B = { ( I 1 , T 1 ) , . . . , ( I B , T B ) } \mathcal{B} =\big\{(I_1,T_1), ..., (I_B,T_B)\big\} B={(I1,T1),...,(IB,TB)} ,损失函数定义为:

KaTeX parse error: Undefined control sequence: \label at position 237: …/\tau}}\Bigg), \̲l̲a̲b̲e̲l̲{eq:InfoNCE_Los…

  其中 f i = f ( I i ) ∣ ∣ f ( I i ) ∣ ∣ 2 f_i = \frac{f(I_i)}{||f(I_i)||_2} fi=∣∣f(Ii)2f(Ii) , g i = g ( T i ) ∣ ∣ g ( T i ) ∣ ∣ 2 g_i = \frac{g(T_i)}{||g(T_i)||_2} gi=∣∣g(Ti)2g(Ti) τ \tau τ 表示一个可学习的温度参数。

Problem Setup

  论文的目标是在保留其固有的离群分布泛化能力的同时,高效地对视觉-语言预训练模型进行各种下游任务的微调。虽然大多数现有的鲁棒微调方法局限于分类任务,但论文将范围扩大到为各种下游任务,如图像分类、跨模态检索和开放词汇分割等,提供鲁棒微调模型。

  给定一个图像-文本预训练模型,目标是使用一个面向目标下游任务的内分布(ID)训练数据集 D I = { ( I i , T i ) } i = 1 n \mathcal{D}_{\mathcal{I}}=\{(I_i, T_i)\}_{i=1}^{n} DI={(Ii,Ti)}i=1n 对其进行适应,其中 I I I 表示一个图像, T T T 是对应于该图像的文本描述。同时,旨在提高模型在一个离群分布(OOD)测试数据集 D O = { ( I j , T j ) } j = 1 m \mathcal{D}_{\mathcal{O}}=\{(I_j, T_j)\}_{j=1}^{m} DO={(Ij,Tj)}j=1m 上的性能。内分布和离群分布数据集 D I \mathcal{D}_{\mathcal{I}} DI D O \mathcal{D}_{\mathcal{O}} DO 分别从不同概率分布 p I ( I , T ) p_{\mathcal{I}}(I,T) pI(I,T) p O ( I , T ) p_{\mathcal{O}}(I,T) pO(I,T) 中采样,当 p I ( I , T ) ≠ p O ( I , T ) p_{\mathcal{I}}(I,T)\neq p_{\mathcal{O}}(I,T) pI(I,T)=pO(I,T) 时即为表现出分布转移。在分类任务中, T T T 表示目标类的文本描述,通过从一组预定义模板中进行采样构建(例如,“一张{class}的照片”)。对于其他视觉-语言任务, T T T 可能是与图像 I I I 相关联的标题之一。

Robust Adapter (R-Adapter)

  为了实现高效且鲁棒的微调,论文引入了基于PEFT框架的R-AdapterPEFT框架在微调少量附加的可学习参数的同时冻结预训练模型,但在训练中对该框架的朴素应用可能会导致对内分布数据的显著偏向(参见表2)。受到集成增强在各种分布下的泛化能力的启发,R-Adapter设计了三种新颖的自集成策略,以实现鲁棒微调而不在训练和推理期间增加计算负载。

  • Design of R-Adapter

R-Adapter建立在适配器微调框架之上,在该框架中向预训练模型添加了轻量级模块。具体而言,R-Adapter中的适配器模块采用了Houlsby适配器的简化版本,去除了非线性层和偏置。该模块被构建为一个残差块,由以下权重矩阵组成:

KaTeX parse error: Undefined control sequence: \label at position 49: …trm{adp}} + X, \̲l̲a̲b̲e̲l̲{eq:Adapter} \e…

  其中, X X X 表示预训练块的输出, W adp ∈ R d × d W_{\textrm{adp}} \in \mathbb{R}^{d\times d} WadpRd×d 是论文适配器的权重矩阵。对于全样本学习,保持 W adp W_{\textrm{adp}} Wadp 的满秩结构以保留足够的容量。在少样本学习中,可以通过将 W adp W_{\textrm{adp}} Wadp 分解为低秩矩阵 B A BA BA 的乘积来采用瓶颈结构,其中 B ∈ R d × r B\in \mathbb{R}^{d\times r} BRd×r A ∈ R r × d A\in \mathbb{R}^{r\times d} ARr×d ,且秩 r ≪ d r \ll d rd 。这种分解避免了过参数化,并显著减少了参数数目和计算量。

  在图像和文本编码器的每个Transformer层中部署适配器,放置在MHAMulti-Head Attention)和FFNFeed-Forward Network)层之后,如图2所示。

  由于适配器之前没有非线性结构,可以通过将其与最接近的预训练层集成进行重参数化,从而在推理过程中消除适配器的额外计算开销。用 W org W_{\textrm{org}} Worg 表示适配器之前的预训练层的权重,可以是来自MHA W O W_O WO 或者FFN中的 W 2 W_2 W2 ,相应的偏置 b org b_{\textrm{org}} borgFFN中的 b 2 b_2 b2 。给定预训练层的输入 X in X_{\textrm{in}} Xin ,那么重新参数化的过程如下进行:

KaTeX parse error: Undefined control sequence: \label at position 249: …_\textrm{rep}, \̲l̲a̲b̲e̲l̲{eq:rep} \end{a…

  其中, I ∈ R d × d \mathrm{I}\in\mathbb{R}^{d\times d} IRd×d 是单位矩阵, W rep = W org ( W adp + I ) W_\textrm{rep} = W_\textrm{org}(W_\textrm{adp}+\mathrm{I}) Wrep=Worg(Wadp+I) b rep = b org ( W adp + I ) b_\textrm{rep} = b_\textrm{org}(W_\textrm{adp}+\mathrm{I}) brep=borg(Wadp+I)

  • Dynamic Ensemble by Adapter Dropping

  为了增强R-AdapterOOD鲁棒性,加入适配器丢弃的动态集成技术。在训练过程中,适配器模块以以下方式被随机停用:

KaTeX parse error: Undefined control sequence: \label at position 74: …trm{adp}} + X, \̲l̲a̲b̲e̲l̲{eq:Stochastic}…

  其中, γ \gamma γ 是从 Bernoulli ( 1 − p ) \textrm{Bernoulli}(1-p) Bernoulli(1p) 中抽取的独立变量, p p p 是适配器丢弃的概率。

  与用于特征稀疏性的dropout或用于模型深度减少的drop-path不同,该技术独特地专注于在保持预训练特征的同时随机禁用适配器层。适配器丢弃不适用于推理阶段,这样可以创建一个由预训练层和适配器层组合而成的子网络集合。这种策略能够同时保留预训练知识和微调知识的动态集成多模型,从而在IDOOD数据上提升性能。

  • Temporal Ensemble by Accumulation

  通过利用适配器权重的历史累积,引入一个时间集成策略来提高模型的鲁棒性。在训练过程中,通过对多次迭代中的权重进行平均,集成技术捕捉到对特征空间的更广泛了解。累积适配器的权重 W ~ adp \tilde{W}_\textrm{adp} W~adp 则通过指数移动平均进行更新:

KaTeX parse error: Undefined control sequence: \label at position 116: …_\textrm{adp}, \̲l̲a̲b̲e̲l̲{eq:Accumulatio…

  其中, m ∈ [ 0 , 1 ] m \in [0, 1] m[0,1] 是控制动量更新速率的系数。这种方法在内存使用方面非常高效,因为只有适配器的参数进行了动量更新,而不是整个模型的参数。在推理阶段,利用累积的权重 W ~ adp \tilde{W}_\textrm{adp} W~adp 来计算重参数化权重 W ~ rep \tilde{W}_\textrm{rep} W~rep 和偏置 b ~ rep \tilde{b}_\textrm{rep} b~rep

  • Weight-space Ensemble by Re-scaling

  最后,引入一种通过重新调整参数实现预训练层和微调层之间的权重空间集成的策略。传统的权重空间集成(WiSE-FT)在原始预训练参数和微调参数之间进行线性插值,因此需要存储两个独立的模型。相比之下,论文采用重参数化的权重 W ~ rep \tilde{W}_\textrm{rep} W~rep 作为微调层的权重,从而进化了这个概念。我们在推理时重新调整适配器的权重并对其重参数化,将权重空间集成简化为单一模型内的实现。该过程可以表达如下:

KaTeX parse error: Undefined control sequence: \label at position 420: …ization}}}, \\ \̲l̲a̲b̲e̲l̲{eq:rescale} \e…

  这里, W ens W_\textrm{ens} Wens 表示集成的权重, α \alpha α 是一个重调整系数。系数 α \alpha α 充当插值因子,调整原始预训练权重 W org W_\textrm{org} Worg 与微调层调整权重之间的平衡。这种技术不仅可以提高在分布转移下的准确性,也能在ID数据上保持高性能。关键是,与WiSE-FT不同,该方法不需要在存储中维护两个单独的完整模型,因此更有效地促进了更节省存储空间的权重空间集成。

MPM-NCE Loss for Downstream Task

  为了增强下游任务的学习能力,使用与任务特征密切对齐的损失函数至关重要。视觉-语言任务通常涉及多个模态之间的对应关系。例如,在分类任务中,对同一类别使用不同的文本模板可能导致多个文本描述与单个图像匹配,反之亦然。这种情况在涉及图像和标题的跨模态检索任务中也会发生。当将零样本模型调整到新任务时,一种常见方法是使用预训练中使用的InfoNCE损失。然而,对于存在多个正样本的任务,该损失并不理想,因为它只考虑了单个正样本对。此外,InfoNCE学习了正负样本之间的顺序,这可能不会为下游任务产生足够有区分力的特征。

  为了解决这些限制,论文提出了MPM-NCE损失,旨在适应这些任务的多正样本性质,同时增强所学嵌入的区分能力。这个损失函数有两个关键改进。首先,使用软标签为多个正样本对分配相等的概率,公式如下:

$$
\begin{equation}
\tilde{y}{ij} = \frac{(1-\epsilon)\cdot y{ij}}{|P(i)|}

  • \frac{\epsilon \cdot (1-y_{ij})}{B-|P(i)|} \in [0,1],
    \label{eq:soft_label}
    \end{equation}
    $$

  其中 y i j ∈ { 0 , 1 } y_{ij} \in \{0,1\} yij{0,1} 表示样本 i i i j j j 之间的正关系, P ( i ) P(i) P(i) 是包括自身在内的样本 i i i 的正样本集合, ϵ \epsilon ϵ 是一种平滑标签噪声。这种软标签确保在下游任务中正确对齐多个图像-文本对。此外,软标签还可以包含 ϵ \epsilon ϵ ,通过对标签引入小的扰动来降低过拟合风险。

  第二个改进是对负样本对应用边界 δ \delta δ 。这个边界通过确保负样本对不仅是不同的,而且还要被一定的阈值分开,增强了所学特征的区分度。融合了这些改进,MPM-NCE公式如下:

KaTeX parse error: Undefined control sequence: \label at position 311: …/\tau}}\Bigg), \̲l̲a̲b̲e̲l̲{eq:MPM_NCE} \e…

  其中温度 τ \tau τ 被设为常数值0.01 δ i j \delta_{ij} δij 对于正关系为0,对于其他情况为 δ \delta δ 。因此,MPM-NCE损失鼓励模型正确对齐多个图像-文本对,并学习具有区分度的特征,从而在IDOOD下显著提高性能。

Experiments




如果本文对你有帮助,麻烦点个赞或在看呗~
更多内容请关注 微信公众号【晓飞的算法工程笔记】

work-life balance.

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

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

相关文章

2025入局自动驾驶的秋招人,应该瞄准哪些技术方向?

2024年已过大半,9月随着开学季的来临,2025届的毕业生也纷纷踏出了秋招的第一步。 无论是在学生期间就深耕许久智驾技术、还是从其他赛道转战至智驾,自2023年末一直到今年上半年来,都一直国内智驾行业层出不穷的各种破圈动态刷屏。…

免费OCR 文字识别工具

免费:本项目所有代码开源,完全免费。 方便:解压即用,离线运行,无需网络。 高效:自带高效率的离线OCR引擎,内置多种语言识别库。 灵活:支持命令行、HTTP接口等外部调用方式。 功能…

降Compose十八掌之『羝羊触蕃』| Handle Platform Lifecycles

公众号「稀有猿诉」 原文链接 降Compose十八掌之『羝羊触蕃』| Handle Platform Lifecycles Jetpack Compose是一个独立的声明式UI框架,它并不受限于任何操作系统平台,从框架定位的角度来讲,它是跨平台的,也应该要跨平台。…

OPenCV结构分析与形状描述符(5)查找图像中的连通组件的函数connectedComponents()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 connectedComponents 函数计算布尔图像的连通组件标签图像。 该函数接受一个具有4或8连通性的二值图像,并返回 N,即标签…

机器学习之 PCA降维

1.PCA 降维简介 主成分分析(Principal Component Analysis, PCA)是一种统计方法,用于在数据集中寻找一组线性组合的特征,这些特征被称为主成分。PCA 的目标是通过变换原始特征空间到新的特征空间,从而减少数据的维度&…

持久化分析

目录 介绍步骤WMI持久化分析注册表映像劫持IFEO持久化 介绍 1、WMI 的全称是 Windows Management Instrumentation,即 Windows 管理规范,在 Windows 操作系统中,随着 WMI 技术的引入并在之后随着时间的推移而过时,它作为一项功能…

Golang | Leetcode Golang题解之第387题字符串中的第一个唯一字符

题目: 题解: type pair struct {ch bytepos int }func firstUniqChar(s string) int {n : len(s)pos : [26]int{}for i : range pos[:] {pos[i] n}q : []pair{}for i : range s {ch : s[i] - aif pos[ch] n {pos[ch] iq append(q, pair{ch, i})} e…

用亚马逊云科技Graviton高性能/低耗能处理器构建AI向量数据库(上篇)

简介: 今天小李哥将介绍亚马逊推出的云平台4代高性能计算处理器Gravition,并利用该处理器构建生成式AI向量数据库。利用向量数据库,我们可以开发和构建多样化的生成式AI应用,如RAG知识库,特定领域知识的聊天机器人等。…

聚铭网络受邀成为ISC终端安全生态联盟首批成员单位

近日,在2024数博会这一行业盛会上,全国首个专注于终端能力的联盟——ISC终端安全生态联盟正式成立,聚铭网络受邀成为该联盟的首批成员单位之一。 ISC终端安全生态联盟由360集团发起,并联合20余家业内领先企业共同创立。联盟旨在通…

Rk3588 Android12 AIDL 开发

AIDL (Android Interface Definition Language) 和 HIDL (HAL Interface Definition Language) 都是 Android 系统中用于定义接口的工具,但它们有不同的用途和特性。 AIDL (Android Interface Definition Language) 用途: 主要用于应用程序之间的进程间…

Windows键盘快捷方式

键盘快捷方式是两个或多个键的组合,可用于执行通常需要鼠标或其他指针设备才能执行的任务。 使用键盘快捷方式你可以更轻松地与电脑进行交互,从而在使用 Windows 和其他应用时节省时间和精力。 大多数应用还提供加速键,以让你能够更轻松地使…

大数据-120 - Flink Window 窗口机制-滑动时间窗口、会话窗口-基于时间驱动基于事件驱动

点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完&am…

自定义 SpringBoot Starter

文章目录 一、自定义 starter1.1 创建 maven 项目1.2 创建邮件配置属性类1.3 创建模拟邮件发送服务类1.4 创建自动配置类1.5 spring.factories 相关配置1.6 打包成依赖 二、测试项目2.1 创建项目2.2 application.yml 配置2.3 测试应用 参考资料 本文源码位于 java-demos/spring…

Restful风格接口开发

一、项目搭建 安装nestjs脚手架 // 安装nestjs脚手架 npm i nestjs/cli// 新建 nest new [名字]//选择要用的工具 npm / yarn / pnpm 文件信息: 【main.ts】: 入口文件,通过NestFactory(由nestjs/core库抛出的对象&#x…

微信小程序手写签名

微信小程序手写签名组件 该组件基于signature_pad封装,signature_pad本身是web端的插件,此处将插件代码修改为小程序端可用。 signature_pad.js /*!* Signature Pad v5.0.3 | https://github.com/szimek/signature_pad* (c) 2024 Szymon Nowak | Releas…

九盾叉车U型区域警示灯,高效照明和安全警示

叉车运作的环境比较复杂,在方便人们物流运输的同时也存在着很大的安全隐患,特别是叉车碰撞人的事故发生率很高,那我们该怎么在减少成本的同时又能避免碰撞事故的发生呢? 九盾叉车U型区域警示灯,仅需一盏灯安装在叉车尾…

十一 面向对象技术(考点篇)试题

A ;D,D。实际答案:C;D,D 考的很偏了。UML 2.0基础结构的设计目标是定义一个元语言的核心 UML 2.0 【InfrastructureLibrary】,通过对此核心的复用,除了可以定义一个自展的UML元模型,也可以 Infr…

基于IP子网的VLAN典型配置举例(H3C,其他厂商同理)

基于IP子网的VLAN典型配置举例 1. 组网需求 如下图所示,办公区的主机属于不同的网段192.168.5.0/24和192.168.50.0/24,Device C在收到来自办公区主机的报文时,根据报文的源IP地址,使来自不同网段主机的报文分别在指定的VLAN中传…

7、Django Admin删除默认应用程序

admin文件 from django.contrib.auth.models import User, Groupadmin.site.unregister(User) admin.site.unregister(Group) 显示效果: 前 后

基于FreeRTOS的STM32多功能手表

前言 项目背景 项目演示 使用到的硬件 项目原理图 目前版本实现的功能 设计到的freertos知识 实现思路 代码讲解 初始化GPIO引脚、配置时钟 蜂鸣器初始化以及软件定时器创建 系统默认创建的defaultTaskHandle 创建七个Task,代表七个功能 ShowTimeTask …