1.使用Cleanlab、PCA和Procrustes可视化ViT微调
2.轻松理解ViT(Vision Transformer)原理及源码
3.捋一捋Swin Transformer
4.swin transformerç解è¦ç¹
5.源代码阅读+一个示例 详解timm库背后的create_model以及register_model函数
使用Cleanlab、PCA和Procrustes可视化ViT微调
在图像处理领域,与传统的CNN不同,基于Transformers架构的ViT模型因其在自然语言处理任务中的成功而被引入。微调这些模型以获得理想性能的召唤神龙魔改版源码过程往往涉及精细的操作。下面,我们将通过一步步的示例,展示如何通过Cleanlab、PCA和Procrustes技术可视化ViT模型在CIFAR-数据集上的微调过程。
首先,微调从预训练的ViT模型开始,使用CIFAR-的6万张和类标签。微调过程中,通过设置save_strategy和save_step来频繁保存检查点,确保动画有足够的下源码数据点。然后,利用Transformers库的AutoFeatureExtractor和automodel获取不同阶段模型的嵌入,每个嵌入都是维的。
嵌入分析中,Cleanlab的离群值检测功能识别出分类错误的特征。接着,通过scikit-learn的PCA将维向量降维到2维,以便可视化。然而,PCA可能导致动画帧间出现不必要的轴翻转或旋转。为解决这个问题,我们应用了Procrustes Analysis进行几何变换,确保动画过渡平滑。
在最终的动画制作中,我们使用make_pca和get_ood函数创建图表,最新源码展示嵌入的二维分布和前8个异常值。此外,还会加载训练损失数据,以线形图的形式呈现。整个过程在Spotlight中进行最后检查,确保所有数据准确无误。
这个可视化过程不仅有助于理解微调ViT模型的步骤,还是一个有效的教学工具,能够直观地展示模型调整的过程和结果。源代码可在GitHub上查看,作者为Markus Stoll。
轻松理解ViT(Vision Transformer)原理及源码
ViT,即Vision Transformer,是将Transformer架构引入视觉任务的创新。源于NLP领域的货源码Transformer,ViT在图像识别任务中展现出卓越性能。理解ViT的原理和代码实现在此关键点上进行。
ViT的核心流程包括图像分割为小块、块向量化、多层Transformer编码。图像被分为大小为x的块,块通过卷积和展平操作转换为向量,最终拼接形成序列。序列通过多层Transformer编码器处理,编码器包含多头自注意力机制和全连接前馈网络,实现特征提取和分类。模型输出即为分类结果。
具体实现上,Patch Embedding过程通过卷积和展平简化,将大小为x的吧源码图像转换为x的向量序列。Transformer Encoder模块包括Attention类实现注意力机制,以及Mlp类处理非线性变换。Block类整合了这两个模块,实现完整的编码过程。
VisionTransformer整体架构基于上述模块构建,流程与架构图保持一致。代码实现包括关键部分的细节,完整代码可参考相关资源。
综上所述,ViT通过将图像分割与Transformer架构相结合,实现高效图像识别。理解其原理和代码,有助于深入掌握这一创新技术。
捋一捋Swin Transformer
Swin Transformer是ICCV 的最佳论文,它证明了Transformer在视觉领域的通用性,特别体现在Swin-T模型上。其结构区别于ViT,采用4x4的初始切分和Window Attention,允许获取多尺度信息,适用于目标检测和语义分割。下面,我们通过源码解析Swin Transformer的工作原理。
首先,Swin Transformer的架构包括PatchEmbed层,将图像切割成小patch,之后通过多个BasicLayer处理,每个BasicLayer由Swin Transformer Block和Patch Merging组成。与ViT不同,Swin-T的PatchEmbed使用4x4切分并逐渐增大patch尺寸,以实现多尺度变化。BasicLayer中的核心模块Swin Transformer Block包含两个Window Attention,一个在窗口内操作,另一个解决窗口间信息交流问题。
Window Attention通过将输入分割成小窗口,降低计算复杂度,但通过shift操作引入了窗口之间的信息交互。Shifted Window Attention通过调整窗口位置并使用掩码来控制注意力,使得并行计算更高效。此外,Window Attention还包括了相对位置编码,增强对局部上下文的理解。
Patch Merging则模仿CNN,通过合并小patch以提取不同分辨率的特征,有助于多尺度特征的提取。在实验中,Swin Transformer在图像分类、目标检测和语义分割等多个领域展现了出色性能,尽管面临如Convnext的竞争,但它在视觉领域的创新性和多模态潜力仍值得关注。
swin transformerç解è¦ç¹
è¿æ¯è·éçå类以ååå²æºç ä»ç»ï¼å¤§å®¶æéè¦å¯ä»¥åèä¸ä¸ï¼1ã Swin-Transformeråç±»æºç (å·²è·é)
2ã Swin-Transformeråå²æºç (å·²è·é)
3ã Swin-Unet(åå²æ¹ç¼)
æ们å设å¾çç大å°æ¯Ãçï¼çªå£å¤§å°æ¯åºå®çï¼7Ã7ãè¿éæ¯ä¸ªæ¹æ¡é½æ¯ä¸ä¸ªçªå£ï¼æ¯ä¸ªçªå£æ¯åºå®æ7Ã7个patchï¼ä½æ¯patchç大å°æ¯ä¸åºå®çï¼å®ä¼éçpatch mergingçæä½èåçååãæ¯å¦æ们çè¿å¿ï¼patch大å°æ¯4Ã4çï¼é£æä¹åæ8Ã8å¢ï¼æ们æå¨è¾¹4个çªå£çpatchæ¼å¨ä¸èµ·ï¼ç¸å½äºpatchæ©å¤§äº2Ã2åï¼ä»èå¾å°8Ã8大å°çpatchã
æ们åç°ç»è¿è¿ä¸ç³»åçæä½ä¹åï¼patchçæ°ç®å¨åå°ï¼æåæ´å¼ å¾åªæä¸ä¸ªçªå£ï¼7个patchãæ以æ们å¯ä»¥è®¤ä¸ºééæ ·æ¯æ让patchçæ°éåå°ï¼ä½æ¯patchç大å°å¨å大ã
è¿ä¾¿æ¯å¯¹ViTçä¸ä¸ªæ¹è¿ï¼ViTä»å¤´è³å°¾é½æ¯å¯¹å ¨å±åself-attentionï¼èswin-transformeræ¯ä¸ä¸ªçªå£å¨æ¾å¤§çè¿ç¨ï¼ç¶åself-attentionç计ç®æ¯ä»¥çªå£ä¸ºåä½å»è®¡ç®çï¼è¿æ ·ç¸å½äºå¼å ¥äºå±é¨èåçä¿¡æ¯ï¼åCNNçå·ç§¯è¿ç¨å¾ç¸ä¼¼ï¼å°±åæ¯CNNçæ¥é¿åå·ç§¯æ ¸å¤§å°ä¸æ ·ï¼è¿æ ·å°±åå°äºçªå£çä¸éåï¼åºå«å¨äºCNNå¨æ¯ä¸ªçªå£åçæ¯å·ç§¯ç计ç®ï¼æ¯ä¸ªçªå£æåå¾å°ä¸ä¸ªå¼ï¼è¿ä¸ªå¼ä»£è¡¨çè¿ä¸ªçªå£çç¹å¾ãèswin transformerå¨æ¯ä¸ªçªå£åçæ¯self-attentionç计ç®ï¼å¾å°çæ¯ä¸ä¸ªæ´æ°è¿ççªå£ï¼ç¶åéè¿patch mergingçæä½ï¼æçªå£åäºä¸ªå并ï¼å继ç»å¯¹è¿ä¸ªå并åççªå£åself-attentionç计ç®ã
å ¶å®è¿è¾¹å°æ°äºæä¸å°ä¸ï¼å 为æ们å°è±¡ä¸ééæ ·é½æ¯åCNNä¸æ ·ï¼ä¼åå°ï¼ä½æ¯swin transformer没æç»æ们åå°çæè§ãå ¶å®è¿å°±æ¯æåé没ç解å°ä½çé®é¢ï¼CNNå°æåï¼è®¾è®¡éå½ï¼æåä¸ä¸ªç¹å¾å¾çæåéæ¯å¯ä»¥æ¾å¤§å°æ´å¼ å¾çï¼swin transformeræåä¸ä¸ªstageä¹æ¯ä¸ä¸ªçªå£æ¶µçäºæ´å¼ å¾ã
Swin-transformeræ¯æä¹æå¤æ度éä½çå¢ï¼ Swin Transformer Blockè¿ä¸ªæ¨¡ååæ®éçtransformerçåºå«å°±å¨äºW-MSAï¼èå®å°±æ¯éä½å¤æ度计ç®ç大åè£ã
å ³äºå¤æ度ç计ç®ï¼æç®åçç»å¤§å®¶ä»ç»ä¸ä¸ï¼é¦å æ¯transformeræ¬èº«åºäºå ¨å±çå¤æ度计ç®ï¼è¿ä¸åå¿è®²èµ·æ¥æç¹å¤æï¼æå ´è¶£çåå¦æ们å¯ä»¥ä¼åä¸èµ·æ¢è®¨æ¨å¯¼è¿ç¨ãå¨è¿éï¼æ们å设已ç¥MSAçå¤æ度æ¯å¾å大å°çå¹³æ¹ï¼æ ¹æ®MSAçå¤æ度ï¼æ们å¯ä»¥å¾åºAçå¤æ度æ¯(3Ã3)²ï¼æåå¤æ度æ¯ãSwin transformeræ¯å¨æ¯ä¸ªlocal windows(红è²é¨å)计ç®self-attentionï¼æ ¹æ®MSAçå¤æ度æ们å¯ä»¥å¾åºæ¯ä¸ªçº¢è²çªå£çå¤æ度æ¯1Ã1çå¹³æ¹ï¼ä¹å°±æ¯1çå次æ¹ãç¶å9个çªå£ï¼è¿äºçªå£çå¤æ度å åï¼æåBçå¤æ度为9ã
W-MSAè½ç¶éä½äºè®¡ç®å¤æ度ï¼ä½æ¯ä¸éåçwindowä¹é´ç¼ºä¹ä¿¡æ¯äº¤æµï¼æ以æ³è¦çªå£ä¹é´çä¿¡æ¯ææ交æµï¼é£ä¹å°±å¯ä»¥æå·¦å¾æ¼åæå³å¾è¿æ ·ï¼ä½æ¯è¿å°±äº§çäºä¸ä¸ªé®é¢ï¼å¦æ¤æä½ï¼ä¼äº§çæ´å¤çwindowsï¼å¹¶ä¸å ¶ä¸ä¸é¨åwindowå°äºæ®éçwindowï¼æ¯å¦4个window -> 9个windowï¼windowsæ°éå¢å äºä¸åå¤ãè¿è®¡ç®éåä¸æ¥äºãå æ¤æ们æ两个ç®çï¼Windowsæ°éä¸è½å¤ï¼windowä¹é´ä¿¡æ¯å¾æ交æµã
æ们çå°ï¼åæ¥çå¾è¢«ååäº9个çªå£ï¼ä¸é´çåºåAå°±æ¯ä¿¡æ¯äº¤æµçè¯æãæ们å æå·¦ä¸é¨å(èè²ä»¥å¤ççªå£)移å¨å°å³ä¸ï¼ç¶ååç¨ååååçæ¹æ³å»åè¿ä¸ªå¾çï¼è¿æ¶ååºåA就被éåºæ¥äºï¼è¾¾å°äºæ们æ³è¦çææã
transformerçåºç°å¹¶ä¸æ¯ä¸ºäºæ¿ä»£CNNãå 为transformeræçCNN没æçåè½æ§ï¼å®ä¸ä» å¯ä»¥æåç¹å¾ï¼è¿å¯ä»¥åå¾å¤CNNåä¸å°çäºæ ï¼æ¯å¦å¤æ¨¡æèåãèswin transformerå°±æ¯ä¸ä¸ªè¶å¿ï¼å°CNNä¸transformeråèªçä¼å¿ææçç»åäºèµ·æ¥ãè¿æ¯ææ¶å¯¹å®çä¸äºç»èè¡¥å ãæè¿å¬è¯´MLPåºæ¥äºï¼è¿æ²¡æç»çï¼æ¶ä»£è¿å±æªå ä¹å¤ªå¿«äºï¼æéé对ViTæ¹è¿çæç« è¿æ²¡æåºå»ï¼å°±å·²ç»å¼å§è¦ç«ä¸ä½èäºã
å¸æå¯ä»¥å¸®å©å°å¤§å®¶ï¼å¦æä½ è§å¾è¿ç¯æç« å¯¹ä½ æä¸å®ç帮å©ï¼é£å°±ç¹ä¸ªèµæ¯æä¸ä¸å§ï¼å¦ææä»ä¹é®é¢çè¯ä¹å¯ä»¥å¨æç« ä¸é¢è¯è®ºï¼æ们ä¸èµ·äº¤æµè§£å³é®é¢ï¼
以ä¸æ¯ææææç« çç®å½ï¼å¤§å®¶å¦ææå ´è¶£ï¼ä¹å¯ä»¥åå¾æ¥ç
👉æ³å³è¾¹ï¼ æå¼å®ï¼ä¹è®¸ä¼çå°å¾å¤å¯¹ä½ æ帮å©çæç«
源代码阅读+一个示例 详解timm库背后的create_model以及register_model函数
深入理解timm库的核心,本文将重点剖析create_model和register_model这两个关键函数的工作原理。timm库以其封装的便捷性和SOTA模型集成而闻名,但内部细节往往被隐藏。本文将通过一个实例,揭示create_model的全貌,包括register_model的作用,帮助读者更好地掌握这两个函数的使用。
首先,create_model从model_name入手,如vit_base_patch_,通过parse_model_name函数将其解析。这个过程包括urlsplit函数,用于解析model_name,如timm和vit_base_patch_被分别赋值给model_source和model_name。
进一步,split_model_name_tag函数被调用,将model_name拆分为基础模型名称和配置参数。例如,model_name='vit_base_patch_',tag=''。
然后,is_model函数检查model_name是否已注册在timm的_model_entrypoints字典中。register_model实际上是一个函数修饰器,它允许用户自定义模型,并将其添加到timm的框架中,以便无缝使用timm的训练工具,如ImageNet训练。
在is_model验证后,create_fn通过model_entrypoint(model_name)创建模型。register_model的__name__属性在此过程中起到关键作用,它将用户自定义的函数与timm的框架连接起来。
通过以上步骤,本文旨在解构create_model的内部逻辑,帮助读者更好地掌握register_model的修饰器功能,从而在项目中更自信地运用timm库。现在,让我们跟随代码实例,深入了解这两个函数的运作细节。