Switchable-Normalization
Switchable Normalization(简称 SN)是一种“会自己挑”的归一化方法。它把 BatchNorm、LayerNorm、InstanceNorm 等常见归一方式做成可学习的“开关”,让网络在训练过程中自动为每一层选出最合适的归一策略,全程端到端,无需人工调参。这样一来,当 batch 很小(如目标检测、语义分割)或硬件受限时,模型仍能保持稳定收敛和高精度,解决了传统 BatchNorm 在小 batch 场景下失效、GroupNorm 又可能牺牲大 batch 性能的两难问题。
代码库提供了 ImageNet 预训练模型(ResNet50/101 等)、分布式训练脚本,以及专为小 batch 设计的 SyncBN/SyncSN 实现,方便直接迁移到检测、分割、人脸识别等任务。研究者和算法工程师只需把原来的归一层换成 SN,就能在几乎不改动网络结构的前提下获得更稳健的表现,尤其适合受显存或 batch size 限制、又希望保持精度的深度学习项目。
使用场景
一家做医学影像 AI 的初创公司正在训练一套 3D 肺结节检测模型,数据来自 8 家医院的 1.2 万张 CT 扫描,每张体积 512×512×300,显存占用极高,不得不用 1 GPU/1 样本的小批次训练。
没有 Switchable-Normalization 时
- 用传统 BatchNorm:batch=1 时梯度爆炸,训练直接发散,必须手动冻结 BN 层,导致收敛慢 3 倍。
- 改用 GroupNorm:虽然能跑,但固定 32 组通道切分,在 3D 卷积里与网络深度耦合,调参全靠经验,验证 FROC 分数卡在 0.812。
- 每张 CT 需裁 64 个 patch 才能凑出 8 样本的“伪批次”,数据加载成为 I/O 瓶颈,GPU 利用率长期低于 40%。
- 不同医院设备参数差异大,BN 统计量漂移严重,模型在 A 医院数据上训练后,到 B 医院推理时敏感度下降 7%。
使用 Switchable-Normalization 后
- 网络自动为每层选择 BN/GN/LN 的加权组合,batch=1 也能稳定收敛,训练时间从 5 天缩短到 1.5 天。
- 可微分学习机制让网络自己决定 3D 卷积块用 16 组还是 8 组 GN,FROC 提升到 0.857,无需人工调参。
- 直接单样本训练即可,省去 patch 拼接,I/O 压力骤降,GPU 利用率稳定在 90% 以上。
- 预训练的 ResNet50+SN(8,1) 权重在迁移到不同医院数据时,只需 3 个 epoch 微调即可恢复原有敏感度,跨域差距缩小到 1.2%。
Switchable-Normalization 让小批次 3D 医学影像模型也能又快又稳地训练,并显著降低跨设备泛化门槛。
运行环境要求
- Linux
需要 NVIDIA GPU,显存 ≥8 GB,支持多卡分布式训练,CUDA 版本未说明
未说明

快速开始
可切换归一化
可切换归一化是一种归一化技术,能够在深度神经网络中以端到端的方式为不同的归一化层学习不同的归一化操作。

更新
- 2019年3月21日:发布分布式训练框架和人脸识别框架。我们还发布了针对分割、检测等小批量任务的SyncBN和SyncSN的PyTorch实现。关于SyncBN和SyncSN的更多细节,请参阅这篇。
- 2018年7月27日:ResNet50+SN(8,1)和SN(8,4)的预训练模型已发布。这些模型在目标任务的批量大小受限于较小的情况下,有助于微调阶段。我们还发布了ResNet101v2+SN的预训练模型,该模型在ImageNet上达到了78.81%/94.16%的top-1/top-5准确率。更多预训练模型将很快发布!
- 2018年7月26日:目标检测的代码已在SwitchNorm_Detection仓库中发布。
- 2018年7月9日:我们想解释一下SN背后的优势。请参阅HTML预览或这篇中文博客。
- 2018年7月4日:模型库已更新!
- 2018年7月2日:图像分类的代码以及在ImageNet上的预训练模型已发布。
引用
本仓库提供了使用可切换归一化训练的ImageNet分类结果和模型。如果您在研究中使用SN,欢迎引用以下论文:
@article{SwitchableNorm,
title={通过可切换归一化实现可微分的自学习归一化},
author={罗平、任佳敏、彭章林、张瑞茂、李静宇},
journal={国际表征学习会议(ICLR)},
year={2019}
}
结果概述
ImageNet上的图像分类
在不同批量大小设置下,使用SN、BN和GN训练的ResNet50在ImageNet验证集上的top-1准确率比较。括号内数字表示(#GPUs,#samples per GPU)。底部的“GN-BN”表示GN与BN准确率之差。BN中的(8,1)里的“-”表示其未收敛。
| (8,32) | (8,16) | (8,8) | (8,4) | (8,2) | (1,16) | (1,32) | (8,1) | (1,8) | |
| BN | 76.4 | 76.3 | 75.2 | 72.7 | 65.3 | 76.2 | 76.5 | – | 75.4 |
| GN | 75.9 | 75.8 | 76.0 | 75.8 | 75.9 | 75.9 | 75.8 | 75.5 | 75.5 |
| SN | 76.9 | 76.7 | 76.7 | 75.9 | 75.6 | 76.3 | 76.6 | 75.0* | 75.9 |
| GN−BN | -0.5 | -0.5 | 0.8 | 3.1 | 10.6 | -0.3 | -0.7 | – | 0.1 |
| SN−BN | 0.5 | 0.4 | 1.5 | 3.2 | 10.3 | 0.1 | 0.1 | – | 0.5 |
| SN−GN | 1.0 | 0.9 | 0.7 | 0.1 | -0.3 | 0.4 | 0.8 | -0.5 | 0.4 |
模型 Zoo
我们提供了在 ImageNet 上使用 SN 预训练的模型,并以使用 BN 预训练的模型作为参考进行对比。如果您在研究中使用这些模型,请引用 SN 论文。SN 的配置以 (#GPUs, #images per GPU) 表示。
| 模型 | Top-1* | Top-5* | Epochs | LR Scheduler | Weight Decay | 下载 |
|---|---|---|---|---|---|---|
| ResNet101v2+SN (8,32) | 78.81% | 94.16% | 120 | warmup + cosine lr | 1e-4 | [Google Drive] [Baidu Pan] |
| ResNet101v1+SN (8,32) | 78.54% | 94.10% | 120 | warmup + cosine lr | 1e-4 | [Google Drive] [Baidu Pan] |
| ResNet50v2+SN (8,32) | 77.57% | 93.65% | 120 | warmup + cosine lr | 1e-4 | [Google Drive] [Baidu Pan] |
| ResNet50v1+SN (8,32) | 77.49% | 93.32% | 120 | warmup + cosine lr | 1e-4 | [Google Drive] [Baidu Pan] |
| ResNet50v1+SN (8,32) | 76.92% | 93.26% | 100 | Initial lr=0.1 decay=0.1 steps[30,60,90,10] | 1e-4 | [Google Drive] [Baidu Pan] |
| ResNet50v1+SN (8,4) | 75.85% | 92.7% | 100 | Initial lr=0.0125 decay=0.1 steps[30,60,90,10] | 1e-4 | [Google Drive] [Baidu Pan] |
| ResNet50v1+SN (8,1)† | 75.94% | 92.7% | 100 | Initial lr=0.003125 decay=0.1 steps[30,60,90,10] | 1e-4 | [Google Drive] [Baidu Pan] |
| ResNet50v1+BN | 75.20% | 92.20% | -- | stepwise decay | -- | [TensorFlow models] |
| ResNet50v1+BN | 76.00% | 92.98% | -- | stepwise decay | -- | [PyTorch Vision] |
| ResNet50v1+BN | 75.30% | 92.20% | -- | stepwise decay | -- | [MSRA] |
| ResNet50v1+BN | 75.99% | 92.98% | -- | stepwise decay | -- | [FB Torch] |
*单裁剪验证准确率,基于 ImageNet(对缩放后短边为 256 的图像进行 224×224 中心裁剪)
†对于 (8,1),SN 包含 IN 和 LN 而无 BN,因为在训练过程中 BN 实际上等同于 IN。使用该模型时,您应在 yaml 文件中添加 using_bn : False。
许可协议
本仓库中的所有材料均依据 CC-BY-NC 4.0 许可协议 发布。
常见问题
相似工具推荐
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
NextChat
NextChat 是一款轻量且极速的 AI 助手,旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性,以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发,NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。 这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言,它也提供了便捷的自托管方案,支持一键部署到 Vercel 或 Zeabur 等平台。 NextChat 的核心亮点在于其广泛的模型兼容性,原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型,让用户在一个界面即可自由切换不同 AI 能力。此外,它还率先支持 MCP(Model Context Protocol)协议,增强了上下文处理能力。针对企业用户,NextChat 提供专业版解决方案,具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能,满足公司对数据隐私和个性化管理的高标准要求。
ML-For-Beginners
ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。
ragflow
RAGFlow 是一款领先的开源检索增强生成(RAG)引擎,旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体(Agent)能力相结合,不仅支持从各类文档中高效提取知识,还能让模型基于这些知识进行逻辑推理和任务执行。 在大模型应用中,幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构(如表格、图表及混合排版),显著提升了信息检索的准确度,从而有效减少模型“胡编乱造”的现象,确保回答既有据可依又具备时效性。其内置的智能体机制更进一步,使系统不仅能回答问题,还能自主规划步骤解决复杂问题。 这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统,还是致力于探索大模型在垂直领域落地的创新者,都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口,既降低了非算法背景用户的上手门槛,也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目,它正成为连接通用大模型与行业专有知识之间的重要桥梁。