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

A SAM-guided Two-stream Lightweight Model for AnomalyDetection

        本篇文章包含论文的期刊、发表时间等背景信息,后通过粗读和精读两种方式对原始论文进行归纳总结。粗读部分按照论文排版顺序对文章中的内容进行高度凝练总结,并对文章中晦涩难懂的句子以更通俗易懂的文字重新进行描述,还包括本作者对此论文的看法。精读部分将实验前的所有内容逐句进行分析,在原始论文的左右两侧清晰明了地对全英文内容进行翻译,文章中重复的内容也进行标明,提醒读者无需阅读。
        建议阅读顺序:先阅读论文粗读部分,更快速更全面地了解本篇论文内容,对后续精读论文打下基础。后下载此链接提供的“STLM中的词汇、短语、和句式”文件,与论文精读部分对照着阅读,不会的单词、短语等均能在文件中进行查询(单词按照英文字母顺序排列,其中斜体单词为专有名词、下划线单词为高级词汇)。此部分锻炼读者全英文阅读论文的能力,以及提高读者英文写作的能力。https://download.csdn.net/download/sunshineine/90539091?spm=1001.2014.3001.5501
        高质量文章创作不易,感兴趣的同学请关注此专栏,后续预计每周都会更新一篇论文,谢谢

一、论文粗读

0. 简介

0.1 发表信息

发表期刊:ACM Transactions on Multimedia Computing, Communications, and Applications:https://dl.acm.org/journal/tommhttps://dl.acm.org/journal/tommhttps://dl.acm.org/journal/tomm

发表时间:2025-02-28

论文链接:https://dl.acm.org/doi/abs/10.1145/3706574

代码链接:https://github.com/Qi5Lei/STLM

0.2 摘要

      在工业异常检测中,模型高效性和移动友好性成为实际应用中的首要问题。本文针对这两个关键因素,提出了基于Segment Anything(SAM)的无监督异常检测双流轻量级模型 STLM,采用的两种轻量级图像编码器由SAM的知识指导,充分利用了SAM的鲁棒泛化能力。
        一个流被训练为在正常和异常区域中产生区分性和一般性的特征表示,而另一个流重建相同的无异常图像,从而有效地增强了两个流表示在面对异常区域时的区分性。此外,我们使用一个共享掩码解码器和一个特征整合模块产生异常图
        在MVTec AD基准测试上的实验结果表明,STLM算法的参数约为16M,推理时间在20ms以内,在像素级AUC和PRO上的性能分别为98.26%和94.92%,与现有的算法相比具有很好的性能。我们进一步在更困难的数据集(VisA和DAGM)上进行实验,以验证STLM的有效性和可推广性。

0.3 关键词

视觉基础模型、分割一切模型(SAM)、无监督学习、知识蒸馏、异常检测

0.4 模型架构

1.引言

        图像异常检测和定位任务是根据正常或伪异常样本区分图像中的异常图像和异常像素。创建包含足够异常样本和所有异常类型的数据集特别困难,大多数方法使用无监督模型来处理,仅依赖于正常样本。
        在异常检测方法中,传统的存储库方法会增加计算复杂性并占据大量存储空间,最近利用基于重建的方法,其原理是正常数据的重建误差相对较低,而异常数据的重建误差相对较高,通过比较两个误差之间的差异来判断数据是否异常。但当深度模型的泛化能力过强时,对异常数据也能较为准确的重建,导致异常数据的重建误差降低,与正常数据的重建误差之间的差异减小,从而使得通过比较重建误差来区分正常和异常数据变得困难。为解决上述问题,基于重建的方法引入记忆模块,通过存储正常模式的特征,在重建过程中利用这些特征来重建输入图像,使得异常图像由于不符合记忆中的正常模式而产生较大的重建误差。
        Salehi等人利用知识蒸馏技术,假设学生网络在训练阶段只看到正常样本,在推理时遇到异常查询时会生成与教师网络不同的、分布外的特征表示,从而能够检测出异常。但由于网络结构的相似性和数据流的共享,学生网络在处理异常样本时可能无法始终产生与教师网络不同的特征表示,导致异常检测效果不佳。为克服这一局限,DeSTSeg提出引入一个去噪学生网络,教师网络在正常图像上训练,去噪学生网络在添加了随机合成异常的图像上训练。当输入异常图像时,教师网络会自然地将异常编码到特征中,而去噪学生网络经过训练能够在特征空间中过滤掉异常,从而生成与教师网络不同的特征表示。
        本文提出STLM包括三部分:固定的SAM教师模型两个可训练的轻量化模型(TLM)一个特征融合模块(FA)。首先,对正常图像进行预处理以生成伪异常图像,分别输入到固定的教师模型(SAM)和两个轻量级的学生模型(TLM:plain student和denoising student)中。然后,教师模型SAM对原始的正常图像进行操作,利用知识蒸馏技术从SAM中提取综合知识到两个采用MobileSAM编码器作为编码器主干的学生模型中,其中plain student学习与异常检测任务相关的更精确和更普遍的特征表示,denoising student重建相同的无异常图像,增强两个流处理异常区域时的区分化。最后,通过一个共享掩码解码器和一个特征聚合模块来生成异常图。

2. 相关工作

        本节回顾与本文工作相关的一些工作,包括用于异常检测和定位的深度学习方法,视觉基础模型和轻量级模型。

2.1 用于异常检测和定位的深度学习方法

        异常检测和定位任务常用图像重建的方法,例如自动编码器变分自动编码器生成对抗网络。但这些方法在重建复杂纹理和模式时受限,后续方法使用深度学习模型增强重建图像的质量。利用存储库计算核心集和样本之间的补丁级距离以检测异常的方法,和专注于学习异常和正常模式之间不同尺度和大小的特征残差的方法,会增加计算复杂度。知识蒸馏以往的研究主要增强教师网络和学生网络特征表示的相似性。在处理异常区域时,DeSTSeg更关注如何通过特征表示的差异来识别异常,而不是简单地模仿教师网络特征。但教师网络很难准确表示看不见的正常纹理和图案,且去噪学生网络具有对真正异常不透明的一般性限制。

2.2 视觉基础模型

        基础模型相比于微调模型内部参数可以更好地进行迁移学习。视觉基础模型CLIP可通过文本提示来表示视觉内容,但在处理未见过的图像时性能会下降,且难以识别场景中的实例级语义。DINO利用基于视觉转换器的自我监督学生-教师框架并采用多视图策略,在下游任务中学习到了高质量的特征。DINOv2将DINO的思想与补丁级重建方法相结合。SAM在数百万张带注释的图像上进行了训练,可为未见的图像生成高质量的分割结果。我们的目标是利用SAM的杰出分割优势。但基础模型通常在特定领域表现出局限性。例如,基于transformer框架的模型在推理时存在计算复杂性和推理延迟的问题;在自然图像中训练会优先考虑前景物体,很难准确地分割小的或不规则的物体。

2.3 轻量化模型

        近年来,探索了模型剪枝量化知识蒸馏等轻量化技术,以及基于CNN的轻量级架构,如MobileNetShuffleNetCSPNeXt,引入了深度可分离卷积和分组卷积等创新。异常检测等无监督任务中准确性,效率和泛化能力至关重要。相比于CNN架构模型(SimpleNet和DeSTSeg)关注局部特征以及泛化能力不足,Transformer架构具有大量的参数,通过自我注意机制提供了高度的可解释性,还可捕获全局依赖性,更适合异常检测等无监督任务,特别是在大规模数据集上训练的广义视觉模型,如SAMDINOv2

3. 方法

3.1 伪异常生成

        为解决数据不平衡问题,本文使用Perlin噪声生成器生成噪声图像,然后对随机Perlin噪声应用二值化处理以获得异常掩码M,后将其与正常图像结合,生成伪异常图像 。实验中使用0.5的概率决定这种生成方法是否被激活,且生成过程是在实时训练中进行。伪异常图像分别输入到教师模型SAM和两个学生流当中。

3.2 双流轻量化模型

3.2.1 模型蒸馏

        在SAM教师模型的指导下,普通学生流被训练成在正常和异常区域中产生有区别的和一般的特征表示,作为教师网络的优秀替代方案;去噪学生流通过学习正常图像的特征表示,从伪异常的图像中重建出没有异常的图像特征。这有效地增强了处理异常区域时两个学生流的表示的差异。TLM采用MobileSAM的图像编码器ViT-Tiny,同时保持仅有3.2M参数的轻量级掩码解码器
        TLM和FA模块同时进行训练的原因:一方面,与冻结的SAM教师网络相比,经过训练的普通流对TLM的其他部分表现出更大的适应性,从而生成更好的中间结果,并将其馈送到FA模块。另一方面,与异常检测图像相关的分割知识通过FA模块的梯度反馈到两个流中,以更好地识别正常区域。如果没有对SAM进行知识蒸馏,那么只有去噪学生流会得到改进,而普通学生流则不会受益。这会导致在正常区域的特征表示上,两个学生流之间存在差异,从而影响实验结果的准确性和一致性。

        掩码解码器如图所示,输出特征图是从SAM的两层解码器中提取的,由于不需要分割结果,我们只使用掩码解码器的双向Transformer块。SAM输出与正常图像相关的特征表示为T_{D}^{1}T_{D}^{2},源自伪异常图像的特征表示为T_{P}^{1}T_{P}^{2}TLM输出与正常图像相关的特征表示为S_{D}^{1}S_{D}^{2},源自伪异常图像的特征表示为S_{P}^{1}S_{P}^{2}
        为了将SAM中的知识提取到普通的学生流中,我们最小化了来自T_{P}^{K}S_{P}^{K}的特征之间以及T_{D}^{K}S_{D}^{K}的特征之间的余弦距离,其中K= 1,2,以监督去噪学生流重建正常特征。余弦相似度可以通过以下等式计算。

用于优化网络的损失函数被公式化为以下两个等式。

3.2.2 掩码解码器

        相比于两个分离的解码器,共享解码器在参数和计算时间方面更经济。

3.2.3 评价

        本文提出的STLM和DeSTSeg之间的区别在于1)普通学生流可以学习与异常检测任务相关的一般化知识,这使其能够有效地表示正常特征,甚至是训练集中以前看不见的模式,确保很好地捕捉两个流的特征之间的差异。2)具有高泛化能力的SAM可以帮助去噪学生流为真正的异常生成高质量的重建结果。相比于DeSTSeg,STLM具有更好的性能和更紧凑的模型。

3.3 特征融合模块

        当不同水平的特征之间的区别不一致时,可能会出现次优结果。通过额外的监督信号引导特征融合可以提高性能。
        本文提出的
特征聚合模块由两个残差块和一个空间金字塔池化模块组成。在训练分割网络时避免约束TLM的权重。
        同时培训这些组件产生增强的结果。减小FA模块的深度不会显著影响性能,通过将通道从256减少到128并将膨胀率调整为[1,1,3],使该模块更轻量。

        在训练时,采用合成异常图像作为TLM的输入,其中对应的二进制异常掩码作为真实值。解码器生成具有与真实值掩码相同形状的特征M。相似度使用以下公式计算并连接为X,随后将其输入FA模块,如上图所示。

        如下图所示,最后分别应用L_{focal}L_{1}来增加对具有挑战性的示例的准确分割的鲁棒性,并降低对异常值的过度敏感性。FA模块输出异常分数图M_{ij}^{o},与真实值掩码M具有相同形状。

3.4 训练和推理

        训练阶段如下图所示。

        总损失函数如下,其中每个损失函数具有相等的权重。

        推理阶段如下图所示。丢弃固定SAM,对于像素ij,像素级异常分割图M_{ij}由网络的端部提供,预期异常像素会输出更高的值。对于图像级异常分数的计算,我们从异常分数图中取top-K异常像素值的平均值。

4. 实验

4.1 实验细节

4.1.1 数据集

        使用MVTec AD数据集验证了我们方法的有效性,该数据集是异常检测和定位领域的著名基准。其包括5个纹理和10个对象类别,每个类别提供数百个正常图像用于训练。
        此外还扩展了在VisAMVTec LOCODAGM数据集上的实验,以展示STLM的泛化能力,如下图所示。VisA数据集包含10821张高分辨率彩色图像(9621个正常样本和1200个异常样本),涵盖3个领域的12个对象,包括三种不同的类型:复杂结构,多个实例和单个实例。MVTec LOCO数据集含有结构异常和逻辑异常,包含来自五个不同类别的3644幅图像,均来自于真实的工业检测场景。结构异常表现为制造产品中的划痕、凹痕或污染。逻辑异常违反了基础约束,例如:允许的对象存在于无效位置或者所需的对象根本不存在。为了便于比较,我们只选择了结构异常。DAGM数据集包含10个纹理对象,这些对象具有与背景具有很强视觉相似性的小异常区域。对于每个类,我们首先将所有异常样本从原始训练集移动到原始测试集,然后将所有正常样本从测试集移动到训练集。此外,我们从训练集中随机选择30个正常样本,将其指定为测试集中的“好”样本。

4.1.2 评估指标

(1)AUC(Area Under the ROC Curve) 是一种评估二分类模型性能的重要指标,它通过ROC曲线下的面积来衡量模型在区分正负样本时的性能。AUC值越高,表示模型的性能越好。AUC具有阈值无关性、鲁棒性和直观性等优点,广泛应用于各种分类任务中。然而,异常区域通常仅占据整个图像的一小部分。因此,像素级AUROC可能无法准确反映定位精度,因为假阳性率主要受大量无干扰像素的影响。
(2)PRO(Per Region Overlap)是一种用于评估异常检测和定位任务中模型性能的指标,特别是在处理像素级异常定位时。它通过计算模型预测的异常区域与真实异常区域之间的重叠程度来评估模型的定位准确性。与传统的像素级AUC(P-AUROC)相比,PRO对不同大小的异常区域赋予相同的权重,从而更公平地评估模型的性能,PRO值越高越好。
(3)像素级平均精度(AP)通过计算模型在不同异常分数阈值下的平均精度来评估模型的性能,对类别不平衡的数据集具有较好的鲁棒性,能够更全面地评估模型的性能。

4.1.3 实施细节

        两个数据集中的所有图像均调整为1024 × 1024。我们使用Adam优化器,将TLM的学习率设置为0.0005。对于FA模块,我们选择随机梯度下降优化器。我们进行200个epoch的训练,批量大小为2,并计算前100个异常像素的平均值作为图像级异常分数。所有实验均在NVIDIA GeForce RTX 3090上进行。

4.2 定量结果和比较

4.2.1 MVTec上的异常检测和定位

        如下表所示,展示了不同方法在MVTec数据集上的图像级和像素级的AUROC异结果。与其他方法相比,我们的方法确保了15个类中的9个的最高分,实现了最高效的方法和第二快的推理速度。STLM比DeSTSeg具有更少的参数,但推理时间更长,原因是与Transformer相比,ResNet框架的软件和硬件优化工作更成熟。图像编码器的最佳推理速度计划在未来工作中优化。

4.2.2 其他较难基准的评估

       如下表所示,进一步在三个额外的广泛认可的数据集VisAMVTec LOCODAGM 进行基准测试。此外,所有方法的结果都显示这三个数据集的一致下降。“I”、“P”、“O”、“A”分别是指图像级AUROC、像素级AUROC、PRO、AP四个指标。

4.2.3 模型参数和推理灵活性评估

        下表在四个数据集上对比了我们的方法与其他方法在推理时间、参数量、GFLOPs(评估模型的计算复杂度和硬件的计算能力)、GPU存储量四个指标。

4.3 可视化结果

        如下图所示,对比了输入图像、图像的真实标签、没有使用特征聚合模块的模型输出结果以及使用特征聚合模块后模型的输出结果。直观地证明我们的方法在不同数据集上异常定位精度的优越性、特征聚合模块的有效性、以及模型的鲁棒泛化性。

在MVTec数据集上的可视化 

在VisA数据集上的可视化

下图展示了我们的方法在某些情况下没有达到预期效果的实例。第一列和第二列显示了FA(特征聚合)模块的敏感性是导致这些失败的主要原因。除了模型本身的问题外,数据本身的一些不确定因素也可能是影响结果的原因。在第三列和第四列中,模型的掩码能够覆盖异常区域,但在某些情况下,可能没有完全匹配真实标签所突出的所有区域,从而导致了失败案例。

4.4消融研究

4.4.1 大型教师、普通学生流、掩码解码器和特征聚合的重要性

        我们通过实验评估了四个设计组件的有效性,如下表所示。在实验中,我们消除了固定的教师网络,并使用预先训练的mobileSAM作为教师网络来检查SAM知识的贡献;删除普通学生流,并使用固定SAM作为TLM中的普通流,如早期KD框架(但仍然使用正常和伪异常图像来训练去噪学生流);将从编码器提取的图像嵌入用作FA模块输入,并利用两个编码器的成对输出之间的余弦损失进行训练;用经验特征融合策略代替FA模块。当所有关键的设计组件结合在一起时,可以实现最佳效果。实验证明普通的学生流可以学习与异常检测任务相关的广义知识;一阶段训练优于两阶段训练是由于FA和TLM模块同时训练;FA模块可以帮助两个学生更好地识别正常区域;两个学生流能够有效地表示以前看不见的模式,确保很好地捕获两个流的特征之间的差异。

4.4.2 一阶段训练策略的效果

下表结果表明,与TLM和FA模块的单独培训相比,单阶段培训提供了更优秀的性能,特别是在PRO评分方面。这表明使用伪异常掩码的额外监督信号训练TLM可以增强网络定位微小缺陷或准确描绘缺陷边界的能力。

4.4.3 区分特征聚合模块的不同输入方式

        特征聚合模块的输入是来自TLM的特征图的两个元素乘积。为了验证这种设置的合理性,我们评估了三种可选的特征组合作为输入。第一种方法计算TLM的特征图之间的余弦距离,利用更多来自STLM的先验信息,STLM通过优化余弦损失函数进行训练。第二种方式涉及连接正常图像和异常残差表示的特征。异常特征残差表示来自两个流的张量之间的逐元素欧氏距离。第三种方式直接将特征映射S{_{P}}^{k}S{_{D}}^{k}连接起来作为FA模块的输入。第二种和第三种方法更有效地保存了TLM的信息。结果如下表所示,表明我们的方法在先验知识和信息表示之间保持了平衡。

4.4.4 解码器和特征聚合模块的消融研究

        由学生编码器生成的图像嵌入可以非常近似于原始教师编码器的图像嵌入,从而得出结论:TLM可能不需要使用不同的解码器。如下图所示,我们观察到,共享解码器在参数和计算时间方面是经济的,与使用两个分离的解码器相比,AUROC值只是略微降低。

        此外,下图显示减小FA模块的深度不会显著影响性能。因此,已经做出了努力,通过将通道从256减少到128并将膨胀率调整为[1,1,3],使该模块更轻量。这两个轻量级步骤减轻了与训练和推理相关联的存储器成本,这在实际实现中是至关重要的因素。

4.4.5 伪异常产生概率分析

伪异常生成过程被激活的概率决定了训练数据集偏离原始正常数据集的程度。具体而言,概率越高,异常图像的比例越大,正常图像的比例越小。概率0.5表示伪异常图像和正常图像之间的最佳平衡,如下图所示,实现最佳性能。

4.4.6 对掩模解码器第10层提取的特征进行烧蚀研究

        我们将从掩码解码器提取的特征层定义为第k层,,我们将这两层表示为L1和L2。我们进行了一系列实验来研究碳k值的影响,结果如下图所示。很明显,仅从L1提取的特征已经产生了出色的图像级AUROC性能,而像素级AUROC和PRO指标则受益于合并来自L1和L2的信息。这表明有必要在不同的层之间交换信息。因此,我们选择L1 + L2的组合作为默认设置。

4.4.7 知识提炼框架的作用

        我们调查固定SAM教师的重要性,即仅在训练和推理阶段使用TLM,如下图所示。在此场景中,我们不再使用知识蒸馏结构。相反,我们像常规分割网络一样直接训练TLM,使用掩码作为监督信号来分割异常区域。

        下表中的结果表明,直接使用分割网络来识别异常区域不会产生令人满意的结果。相比之下,TLM的两名学生使用蒸馏模型进行差分学习任务会产生更好的结果。

4.4.8 蒸馏方法的烧蚀研究

        SAM为未见的图像生成高质量的分割结果,使其适合于logit蒸馏(直接使用SAM的分割结果进行提取,将TLM的分割结果与固定的SAM老师对齐)。蒸馏方法通常侧重于从中间层提取深层特征,而logit蒸馏的重要性被大大忽视。我们将基于特征的方法与基于logit的方法进行了比较,后者最大限度地减少了教师SAM和学生流的分割掩码之间的焦点损失和L1损失,如下图所示。

        下表表明,与直接利用SAM风格架构的分割结果相比,蒸馏对STLM平均而言是优秀的。

4.4.9 伪异常生成概率的额外经验

        下表中我们提供了假阴性率(FNR)的进一步定量结果,以验证消融研究中的分析,即概率1.0使正常图像在训练期间成为“不可见”图像,导致高假阴性。此外,TLM和FA是在所有图片都异常的假设下训练的,导致模型“认为”所有图片都是异常的,并错误地将正常图像分类为异常,从而降低性能。假阴性率,即未命中率被定义为测量被错误地识别为负而实际上是正的实例的比例。

4.4.10 不同异常生成策略的评价

        为了评估伪异常生成策略,我们在下表中展示了著名策略NSA 和Cutpaste的实验结果。在大多数SOTA方法中,即,DRAEM,Prototypical和DeSTSeg,作者试图利用NSA生成的合成异常,我们的论文中也使用了这些异常。此外,基于NSA和Cutpaste,[27,49,57,63]采用各种复杂或人工操作,更接近于真实的异常。值得注意的是,SimpleNet通过将高斯噪声引入正常特征来模拟异常,这一过程需要仔细调整适当的超参数。

4.5讨论和未来的工作

        异常检测的最新研究越来越多地集中在视觉基础模型上,由于其处理远程依赖关系的能力,视觉基础模型比CNN更有效。STLM利用视觉基础模型,但避免了transformer,实现了与最新方法高度竞争的性能,没有像FOD那样的长推理时间和RD++ 那样的大模型参数。
        具体地说,我们的方法在四个数据集上的平均性能优于其他方法,在AP、图像级AUROC和像素级PRO上分别有5.1%、1.4%和0.15%的显著优势。在像素级AUROC方面,我们的STLM仅比性能最佳的方法RD++落后0.47%。然而,如[48]所述,Pixel-AUROC可能无法准确反映定位精度,因为大量无异常像素严重影响假阳性率。RD++采用额外的自我监督的最佳传输损耗来抑制异常信号,然后再转发给学生。它提高了无异常像素的定位精度,但没有提高异常像素的定位精度,RD++的Pixel-AUROC极高,但PRO相对平均。
        此外,我们的模型在模型参数和推理灵活性方面表现出色。STLM的推理速度位居第二,GFLOPS排名第三。与DeSTSeg相比,STLM模型参数较少,推理时间较长,这是因为它在基于Transformer的架构上对类ResNet框架进行了更成熟的软硬件优化。这是一个需要进一步研究的挑战,并可能导致性能改进。未来,我们的目标是优化图像编码器的推理速度,并开发一个使用更简单结构的多类异常检测模型。

5. 总结

本文针对四个问题:
        (1)异常检测任务中正常样本和异常样本数据不平衡。
        (2)如何使模型更具有泛化性?
        (3)如何使模型更加轻量化?
        (4)如何使模型能够更好地捕捉正常和异常区域的特征差异?

相对应的解决方案:
        (1)采用Pseudo Anomaly Generation方法。在训练过程中,通过在正常图像上添加合成的异常区域,生成伪异常图像,从而平衡正常和异常样本的数量。
        (2)利用Segment Anything(SAM)的强大泛化能力,学习其高质量的特征表示提高模型在处理未见过的异常类型时的性能。
        (3)通过知识蒸馏技术将SAM的知识传递给轻量级模型,使用轻量级的编码器(如ViT-Tiny)和共享的掩码解码器(Mask Decoder)。
        (4)设计了一个双流轻量级模型TLM,包含普通学生流(Plain Student Stream)和去噪学生流(Denoising Student Stream)。普通学生流学习生成区分正常和异常区域的特征表示,而去噪学生流学习从包含伪异常的图像中重建出没有异常的图像特征。通过这种方式,两个流的特征表示在面对异常区域时会产生显著差异,从而增强模型对异常区域的检测能力。

二、论文细读

page 1

page 2

page 3

page 4

page 5

page 6

page 7

page 8

page 9


http://www.kler.cn/a/613243.html

相关文章:

  • Pytorch中Tensorboard的学习
  • Web3.0合约安全:重入攻击防御方案
  • 李想官宣开源整车操作系统
  • Transformers重大更新!v4.50.1修复多Bug,模型训练更稳了
  • 【SPP】蓝牙串口协议(SPP)深度解析:从 RS232 仿真到设备互联的技术实现
  • 028-ImageCompress
  • Problem D: 类的继承
  • 【零基础入门unity游戏开发——2D篇】2D物理关节 —— Joint2D相关组件
  • 06-ADC
  • Linux内核调试 - Hung_task机制分析下
  • LLM 优化技术(2)——paged_attention 原理
  • 几种常见的.NET单元测试模拟框架介绍
  • leetcode day32 763+56
  • 【软件测试】:软件测试实战
  • I.MX6ULL 开发板上挂载NTFS格式 U 盘
  • vue将页面导出成word
  • Python_电商erp自动拆分组合编码
  • 规范Unity工程目录和脚本结构能有效提升开发效率、降低维护成本
  • Maven中为什么有些依赖不用引入版本号
  • 【ManiSkill】环境success条件和reward函数学习笔记