尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
FocalNet 模型深度解析:Transformers 中的 Focal Modulation Networks 视觉骨干网络
FocalNet 模型深度解析Transformers 中的 Focal Modulation Networks 视觉骨干网络【免费下载链接】transformers Transformers: the model-definition framework for state-of-the-art machine learning models in text, vision, audio, and multimodal models, for both inference and training.项目地址: https://gitcode.com/GitHub_Trending/tra/transformersFocalNetFocal Modulation Networks是微软研究院提出的纯卷积式视觉骨干网络用焦点调制focal modulation机制彻底替代了 ViT 与 Swin 等模型依赖的自注意力self-attention在图像分类、目标检测与语义分割上取得了与自注意力模型相当甚至更优的结果。本文基于本仓库中 FocalNet 官方文档 与其完整 PyTorch 实现为你系统讲解 FocalNet 的架构原理、FocalNetConfig全部配置参数、四大模型类含掩码图像建模与分类头的正确用法以及如何借助Auto*API 直接加载预训练权重并接入下游任务。一、FocalNet 是什么用焦点调制取代自注意力FocalNet 由 Jianwei Yang、Chunyuan Li、Xiyang Dai、Lu Yuan、Jianfeng Gao 在论文Focal Modulation Networks中提出论文于 2022-03-22 收录于 HF Papers模型实现于 2023-04-23 贡献给 Transformers。该模型的核心理念是视觉任务中的 token 交互不一定需要自注意力可以用一种名为 focal modulation 的机制来完成。论文摘要指出作者用一摞深度可分离卷积层堆叠做层次化上下文编码并辅以门控聚合与逐元素调制从而以相近计算成本在图像分类、检测、分割上超越 Swin、Focal Transformer 等 SOTA 自注意力模型。需要说明论文中提到的诸如 tiny/base 尺寸在 ImageNet-1K 上取得 82.3%/83.9% top-1 准确率、COCO 目标检测相较 Swin 提升 2.1 点 等数字均出自论文摘要收录于 focalnet.md可作为背景参考。原文档将其与 ViT、Swin 对照——后两者都把自注意力作为建模 token 交互的核心算子而 FocalNet 中该角色完全由 focal modulation 承担。模块由 nielsr 贡献权重转换基于微软官方代码。焦点调制的三个组成部分Focal modulation 由三部分构成在源码 modeling_focalnet.py 的FocalNetModulation第 245-313 行中一一对应层次化上下文编码hierarchical contextualization通过一组逐层卷积核放大的 depth-wise 卷积把视觉上下文从短程聚合到长程。源码中对应self.focal_layers这个ModuleList第k层的卷积核大小为focal_factor * k focal_windowfocal_factor2每个卷积后都接 GELU 激活门控聚合gated aggregation为每个查询 token 依据其内容选择性聚合不同范围的上下文。源码中线性投影projection_in把输入拆成q、ctx、gates三份其中gates有focal_level 1个通道前focal_level个通道分别加权不同 focal 层的局部上下文最后一个通道加权全局平均池化后的上下文ctx_global逐元素调制 / 仿射变换element-wise modulation把聚合后的上下文调制到查询上。源码中ctx_all经 1x1 卷积projection_context得到modulator与查询q逐元素相乘x_out q * modulator最后再经projection_out输出。因此一个FocalNetLayer的残差块结构为LayerNorm → FocalNetModulation → DropPath → 残差相加 → MLP → 残差相加。这与 Swin 的 block 结构非常相似源码中FocalNetDropPath、FocalNetForImageClassification等甚至直接标注 Copied from transformers.models.swin...区别仅在于把窗口注意力换成了 focal modulation——这正是它零注意力纯卷积设计的核心。二、网络整体结构与数据流FocalNet 主体是一个 4 阶段4-stage分层金字塔编码器实现于 modeling_focalnet.pyPatch 嵌入stemFocalNetPatchEmbeddings第 174-242 行用patch_size4、stride4 的卷积把图像切成 patch 序列token 数num_patches (H/patch_h) * (W/patch_w)输入尺寸不能整除 patch 时会被maybe_pad自动补齐token 维度即embed_dim。4 个 stageFocalNetStage第 429-492 行由depths[i]个FocalNetLayer组成。相邻 stage 之间用一个downsample本质上仍是FocalNetPatchEmbeddingspatch_size2、stride2把空间分辨率减半、通道数翻倍。token 数从224/456依次降到28 → 14 → 7对应总下采样率 32。Stochastic depth各 layer 的 drop path 率按torch.linspace(0, config.drop_path_rate, sum(depths))规则从 0 线性递增到drop_path_rate越深的层丢弃概率越高。LayerScale 可选use_layerscaleTrue时每个 block 的gamma_1/gamma_2初始化为layerscale_value默认 1e-4并可学习见FocalNetPreTrainedModel._init_weights。FocalNetModel.forward接收pixel_values形状(batch, channels, H, W)输出FocalNetModelOutput其中last_hidden_state(batch, seq_len, hidden_size)的序列输出pooler_output可选的AdaptiveAvgPool1d平均池化结果hidden_states与reshaped_hidden_states当output_hidden_statesTrue时返回各 stage 的输出后者被 reshape 回带空间维度的(batch, hidden_size, height, width)形式方便下游密集预测任务直接消费。三、FocalNetConfig 配置参数详解FocalNetConfig继承自BackboneConfigMixin与PreTrainedConfig源码见 configuration_focalnet.py。除标准 ViT 类模型的hidden_act、mlp_ratio、drop_path_rate、initializer_range、layer_norm_eps、num_labels等常规参数外其 FocalNet 特有的核心参数如下表含默认值与含义参数默认值说明image_size224输入图像分辨率可为 int 或 tuple见FocalNetPatchEmbeddingspatch_size4patch 边长stem 卷积的核/步长num_channels3输入图像通道数embed_dim96stem 输出通道数第一维特征维use_conv_embedFalse是否使用卷积嵌入。作者指出使用卷积嵌入通常能提升性能但默认不开stem 用 7x7 卷积、内部 stage 用 3x3见源码第 196-210 行开启后实测模型多为带lrflarge receptive field后缀的权重hidden_sizes(192, 384, 768, 768)各 stage 的输出维度主要用于 backbone 的num_featuresdepths(2, 2, 6, 2)各 stage 的 block 数量focal_levels(2, 2, 2, 2)各 stage 中 focal modulation 的焦点层级数focal layer 卷积个数focal_windows(3, 3, 3, 3)各 stage 的 focal window 大小最小感受野基线mlp_ratio4.0MLP 隐藏层维数 dim * mlp_ratiohidden_dropout_prob0.0embedding 与全连接层的 dropout 概率drop_path_rate0.1stochastic depth 最大概率use_layerscaleFalse是否在残差块中使用 LayerScalelayerscale_value0.0001LayerScale 的初始值use_post_layernormFalse是否使用 post-LayerNorm否则为 pre-LN见FocalNetLayer第 414-417 行use_post_layernorm_in_modulationFalsefocal modulation 内部是否使用 post-LayerNormnormalize_modulatorFalse是否归一化 modulator开启后上下文除以focal_level 1encoder_stride32MIM decoder head 需要的上采样倍数out_features/out_indicesNoneBackbone 要输出的 stage 集合/索引见FocalNetBackbone__post_init__会自动生成stage_names [stem, stage1, stage2, stage3, stage4]供 backbone 按名取特征。 from transformers import FocalNetConfig, FocalNetModel # 初始化一个 microsoft/focalnet-tiny 风格配置 configuration FocalNetConfig() # 由配置初始化随机权重模型 model FocalNetModel(configuration) # 访问模型配置 configuration model.config四、模型类族与 forward 接口原文档中列出的类定义可在init.py 的导入结构中确认全部类名见源码文件末尾__all__1.FocalNetModel最底层的编码器模型。参数pixel_values必填、bool_masked_posMIM 掩码、output_hidden_states、return_dict。返回FocalNetModelOutput。FocalNetEmbeddings内含一个可选的mask_token仅当use_mask_tokenTrue时创建掩码替换逻辑见第 164-168 行。2.FocalNetForMaskedImageModeling在编码器之上加了 MIM decoder实现与 SimMIM 一致文档注明参见 SimMIM 论文。decoder 由 1x1 卷积 PixelShuffle(encoder_stride)组成第 690-695 行把编码器最后一层特征直接上采样回原始分辨率并重建像素。配合bool_masked_pos计算掩码区域的 L1 重建损失第 768-769 行。损失只统计被 mask 的 patch 位置并在每个 patch 内部做repeat_interleave展开回像素粒度。完整用法示例取自该类的 docstring from transformers import AutoImageProcessor, FocalNetConfig, FocalNetForMaskedImageModeling import torch from PIL import Image import httpx from io import BytesIO url http://images.cocodataset.org/val2017/000000039769.jpg with httpx.stream(GET, url) as response: ... image Image.open(BytesIO(response.read())) image_processor AutoImageProcessor.from_pretrained(microsoft/focalnet-base-simmim-window6-192) config FocalNetConfig() model FocalNetForMaskedImageModeling(config) num_patches (model.config.image_size // model.config.patch_size) ** 2 pixel_values image_processor(imagesimage, return_tensorspt).pixel_values # 生成形状为 (batch_size, num_patches) 的随机布尔掩码 bool_masked_pos torch.randint(low0, high2, size(1, num_patches)).bool() outputs model(pixel_values, bool_masked_posbool_masked_pos) loss, reconstructed_pixel_values outputs.loss, outputs.logits list(reconstructed_pixel_values.shape) [1, 3, 192, 192]运行前请安装本仓库 examples/pytorch/image-pretraining 目录所需的依赖文档同时提示该目录提供了用于在自定义数据上预训练 MIM 模型的脚本。注意MIM 训练通常需把encoder_stride默认 32与image_size/patch_size匹配不同 SimMIM 权重可能使用不同的分辨率与 window如上述 192 分辨率权重。3.FocalNetForImageClassification在FocalNetModel默认开启池化层之上接一个线性分类头num_labels 0时为nn.Linear(num_features, num_labels)否则退化为Identity对池化输出分类。num_labels1时计算 MSE 回归损失num_labels1时计算交叉熵。返回FocalNetImageClassifierOutput含loss、logits。 from transformers import AutoImageProcessor, AutoModelForImageClassification from PIL import Image import httpx from io import BytesIO url http://images.cocodataset.org/val2017/000000039769.jpg with httpx.stream(GET, url) as response: ... image Image.open(BytesIO(response.read())) processor AutoImageProcessor.from_pretrained(microsoft/focalnet-tiny) model AutoModelForImageClassification.from_pretrained(microsoft/focalnet-tiny) inputs processor(imagesimage, return_tensorspt) outputs model(**inputs) logits outputs.logits predicted_label logits.argmax(-1).item() # 结合 processor.id2label 得到类别名4.FocalNetBackbone源码补充原文档的 autodoc 列表虽未单列但 modeling_focalnet.py 中实现了FocalNetBackbone文档注释表明其面向 X-Decoder 等多尺度特征消费框架。它通过配置中的out_features/out_indices如stage1...stage4或索引从reshaped_hidden_states中筛选输出特征金字塔feature_maps。官方权重大多为带L 形大感受野L shape / LRF的下采样卷积设计加载示例取自类 docstring from transformers import AutoImageProcessor, AutoBackbone from PIL import Image import httpx from io import BytesIO url http://images.cocodataset.org/val2017/000000039769.jpg with httpx.stream(GET, url) as response: ... image Image.open(BytesIO(response.read())) processor AutoImageProcessor.from_pretrained(microsoft/focalnet-tiny-lrf) model AutoBackbone.from_pretrained(microsoft/focalnet-tiny-lrf) inputs processor(image, return_tensorspt) outputs model(**inputs)五、Auto API 注册与图像处理器FocalNet 已完整接入 Auto 体系相关注册可在以下文件确认modeling_auto.pyAutoModel→FocalNetModelmodeling_auto.pyAutoModelForMaskedImageModeling→FocalNetForMaskedImageModelingmodeling_auto.pyAutoModelForImageClassification→FocalNetForImageClassificationmodeling_auto.pyAutoBackbone→FocalNetBackboneauto_mappings.py 与 image_processing_auto.pyFocalNet 的图像处理器被映射为BitImageProcessor沿用 BiT 的归一化与 resize 策略因此AutoImageProcessor.from_pretrained(microsoft/focalnet-*)即可得到正确的预处理配置。实践中最省事的三步走就是AutoImageProcessor预处理图像 →AutoModelForImageClassification/AutoModelForMaskedImageModeling/AutoBackbone加载权重 → 前向得到logits/reconstruction/feature_maps。如果你有自定义 checkpoint 需要转换可以参考仓库提供的 convert_focalnet_to_hf_format.py。六、验证与使用注意点测试证据模型行为由 tests/models/focalnet/test_modeling_focalnet.py 覆盖。FocalNetModelTester采用image_size32, patch_size2, depths[1,2,1]等小型配置做前向/梯度检查FocalNetModelIntegrationTest则使用真实权重microsoft/focalnet-tinyAutoImageProcessorFocalNetForImageClassification做端到端集成验证并混入BackboneTesterMixin校验 backbone 输出。前向输入模型main_input_name pixel_values即 pipeline/Trainer 默认喂入名为pixel_values的张量pixel_values缺失会直接抛错源码第 635-636 行。显存优化FocalNetPreTrainedModel声明supports_gradient_checkpointing True配合_no_split_modules [FocalNetStage]可安全启用梯度检查点以降低大输入显存占用。hidden states 形状由于分层下采样各 stage 的 hidden state 空间尺寸不同若要拼接多尺度特征优先使用已经 reshape 好的reshaped_hidden_statesFocalNetEncoder内完成b(hw)c → bchw重排。预训练范围仓库本身不包含权重文件以上所有 checkpoint 名microsoft/focalnet-tiny、microsoft/focalnet-base-simmim-window6-192、microsoft/focalnet-tiny-lrf均出自源码 docstring实际加载需联网访问 Hugging Face Hub 对应仓库本地只读使用时请勿尝试向仓库写入内容。总而言之FocalNet 为 Transformer 系视觉模型提供了一个无需注意力的高性价比替代方案在 Transformers 库中其实现完整、API 清晰理解 focal modulation 的层级卷积 门控聚合 元素调制三段式设计再掌握FocalNetConfig的参数与四大类的前向约定你就能在分类、掩码图像建模SimMIM 式自监督预训练与多尺度密集预测任务中自由驾驭这一骨干网络。【免费下载链接】transformers Transformers: the model-definition framework for state-of-the-art machine learning models in text, vision, audio, and multimodal models, for both inference and training.项目地址: https://gitcode.com/GitHub_Trending/tra/transformers创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

MATLAB人工势场算法无人机三维路径规划仿真源码解析

MATLAB人工势场算法无人机三维路径规划仿真源码解析

简介:针对无人机三维航迹规划问题,这份基于Matlab人工势场算法的源码包提供了从引力场与斥力场建模到路径求解的完整实现,适合具备一定编程基础、希望快速上手智能路径规划算法的学生与工程师。包内共8个文件,以7个m脚本为主&…

📅 2026/9/8 22:08:54
OpenCV iOS 开发入门:使用 Xcode 链接 opencv2.framework 并编写 Hello World 应用

OpenCV iOS 开发入门:使用 Xcode 链接 opencv2.framework 并编写 Hello World 应用

OpenCV iOS 开发入门:使用 Xcode 链接 opencv2.framework 并编写 Hello World 应用 【免费下载链接】opencv Open Source Computer Vision Library 项目地址: https://gitcode.com/GitHub_Trending/opencv31/opencv 本指南基于 OpenCV 官方 iOS 教程&#xf…

📅 2026/9/8 22:08:54
如何修复 Compose Multiplatform 中文显示异常?字体配置排障实战

如何修复 Compose Multiplatform 中文显示异常?字体配置排障实战

如何修复 Compose Multiplatform 中文显示异常?字体配置排障实战 【免费下载链接】compose-multiplatform Compose Multiplatform, a modern UI framework for Kotlin that makes building performant and beautiful user interfaces easy and enjoyable. 项目地址…

📅 2026/9/8 22:03:53
MORE NEWS

更多资讯

📰

Generative AI for Beginners 意大利语版课程指南:从 21 课入门到生成式 AI 应用实战

Generative AI for Beginners 意大利语版课程指南:从 21 课入门到生成式 AI 应用实战 【免费下载链接】generative-ai-for-beginners 21 Lessons, Get Started Building with Generative AI 项目地址: https://gitcode.com/GitHub_Trending/ge/generative-ai-for…

📰

基于QT的电力组态系统开发实战:架构设计与关键实现

简介:这是一份面向电力行业监控与数据管理场景的QT电力组态系统源码包,适合有一定C/QT基础、希望学习组态软件图形界面开发的开发者。系统利用QGraphicsView/GraphicsScene实现仪表盘、曲线、实时数据点等复杂2D图形渲染,支持模板、脚本扩展&…

📰

FDRAM分区挂载到根目录实操指南:扩容与根文件系统迁移详解

简介:面向联发科平台 Android 系统工程师的实操资源,围绕新增 FDRAM 分区并挂载到根目录这一主题,基于 MT6761 与 Android 9.0,解决分区表修改、文件系统格式化、fstab 挂载和 SELinux 权限适配等关键问题。包内共 21 个文件、约 …

📰

C++ operator==:默认比较行为与常见陷阱解析

1. 默认比较的真相&#xff1a;为什么"看起来没错"会变成线上事故先说一个我接手的真实 bug。项目里有个Config类&#xff0c;负责承载业务运行时配置&#xff0c;代码里用std::set<Config>做去重&#xff0c;用if (cfg lastCfg)判断配置是否发生变化。某次发…

📰

Spring Aware机制深度解析:从回调原理到自定义实现

刚接触Spring那会儿&#xff0c;我一直有个困惑&#xff1a;一个平平无奇的Bean&#xff0c;凭什么能拿到ApplicationContext、BeanFactory这些容器的内部对象&#xff1f;明明我在代码里什么都没写&#xff0c;它却像长了眼睛一样&#xff0c;知道自己的BeanName&#xff0c;知…

📰

libcurl 首字节时间指标 CURLINFO_STARTTRANSFER_TIME 详解:从接口语义到源码实现

libcurl 首字节时间指标 CURLINFO_STARTTRANSFER_TIME 详解&#xff1a;从接口语义到源码实现 【免费下载链接】curl A command line tool and library for transferring data with URL syntax, supporting DICT, FILE, FTP, FTPS, GOPHER, GOPHERS, HTTP, HTTPS, IMAP, IMAPS,…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬