TorchSSL
TorchSSL 是一个基于 PyTorch 的半监督学习工具箱,旨在为研究人员和开发者提供一个统一、公平的算法对比平台。它主要解决了半监督学习领域算法实现分散、评估标准不一的痛点,让用户能够轻松复现并比较多种主流方法的效果。
该工具特别适合从事机器学习算法研究的研究人员、需要快速验证模型的开发者,以及希望深入理解半监督学习机制的学生。TorchSSL 集成了包括 PiModel、MeanTeacher、MixMatch、FixMatch 等在内的 9 种经典算法,并作为 NeurIPS 2021 论文 FlexMatch 的官方实现,独特地引入了课程伪标签(Curriculum Pseudo Labeling)技术以进一步提升模型性能。此外,它还支持 CIFAR、SVHN 及 ImageNet 等多个标准数据集,覆盖了从基础实验到大规模验证的多种场景。
需要注意的是,TorchSSL 目前已停止维护,其功能已被更强大、训练效率更高且支持多模态数据的升级版项目 USB 所取代。尽管如此,TorchSSL 在历史上为半监督学习的标准化研究做出了重要贡献,其代码结构和实验结果仍具有重要的参考价值。
使用场景
某医疗影像初创公司的算法团队正试图利用少量已标注的肺部 CT 扫描数据,结合大量未标注的历史存档数据,训练一个高精度的肺炎检测模型。
没有 TorchSSL 时
- 复现成本极高:团队成员需分别查找 FixMatch、MixMatch 等顶尖算法的零散代码,花费数周时间统一数据预处理和训练接口,难以进行公平对比。
- 标签依赖严重:在仅有几百张标注样本的情况下,传统全监督训练模型迅速过拟合,对未标注数据的巨大价值束手无策,准确率停滞不前。
- 调参盲目低效:缺乏统一的课程伪标签(Curriculum Pseudo Labeling)等进阶策略支持,工程师只能凭经验手动调整阈值,实验迭代周期长达数天。
使用 TorchSSL 后
- 一键切换算法:借助 TorchSSL 集成的 11 种主流半监督算法,团队可在同一框架下快速切换并对比 FlexMatch 与 FreeMatch 的效果,将算法验证周期从数周缩短至几天。
- 挖掘未标注数据:通过应用内置的半监督学习策略,模型成功利用了海量无标签 CT 影像,在仅 40 个标注样本的极端条件下,准确率较全监督基线提升了 15% 以上。
- 策略自动优化:利用 TorchSSL 特有的动态伪标签机制,自动根据训练进度调整置信度阈值,无需人工干预即可稳定收敛,显著减少了调参试错成本。
TorchSSL 通过提供标准化的半监督学习工具箱,让团队在极低标注成本下实现了医疗影像识别性能的突破性提升。
运行环境要求
- 未说明
- 需要 NVIDIA GPU
- README 提及实验使用了 P100、P40 和 V100-32G 显卡,暗示需要支持 CUDA 的 NVIDIA 显卡,具体显存需求取决于数据集(如 CIFAR-100 使用了 32GB 显存的 V100)
未说明

快速开始
TorchSSL 已弃用且不再维护。请参考 USB,它是 TorchSSL 的升级版本。使用 USB 进行训练仅需 TorchSSL 训练时间的 12.5%,且效果更优。
对 TorchSSL 代码的后续修改及合并的 Pull Request 将不再重新运行以更新结果。

TorchSSL
一个基于 PyTorch 的半监督学习工具箱。这也是发表于 NeurIPS 2021 的论文 FlexMatch: 利用课程伪标签提升半监督学习 的官方实现。[arXiv] [知乎文章] [视频]
新闻与更新
2023年1月31日
- 我们新增了 [FreeMatch] 和 [SoftMatch] 的代码。请注意,freematch.py 对应的是不包含 SAF 的 FreeMatch,而 freematch_entropy.py 则是同时包含 SAT 和 SAF 的 FreeMatch。训练日志也可在 https://1drv.ms/u/s!AlpW9hcyb0KvmyCfsCjGvhDXG5Nb?e=Xc6amH 找到。
2022年8月17日
- TorchSSL(本仓库)已停止维护和更新。我们已创建并更新了一个更为全面的半监督学习代码库和基准测试——USB。它基于 TorchSSL 构建,但使用起来更加灵活、扩展性更强,涵盖了计算机视觉、自然语言处理和音频处理等多个领域的数据集。
2021年2月15日
- 日志和模型权重已共享!我们注意到部分模型权重缺失,未来会尝试补全这些缺失的权重。
- BestAcc 的结果已更新!我在 CIFAR-10 和 SVHN 上使用单块 P100,在 STL-10 上使用单块 P40,在 CIFAR-100 上使用单块 V100-32G。
简介
TorchSSL 是一个基于 PyTorch 的一体化半监督学习(SSL)工具箱。目前,我们实现了 9 种流行的 SSL 算法,以便进行公平比较并推动 SSL 算法的发展。
支持的算法: 除了全监督学习(作为基线),TorchSSL 还支持以下流行算法:
- PiModel(NeurIPS 2015)[1]
- MeanTeacher(NeurIPS 2017)[2]
- PseudoLabel(ICML 2013)[3]
- VAT(虚拟对抗训练,TPAMI 2018)[4]
- MixMatch(NeurIPS 2019)[5]
- UDA(无监督数据增强,NeurIPS 2020)[6]
- ReMixMatch(ICLR 2019)[7]
- FixMatch(NeurIPS 2020)[8]
- FlexMatch(NeurIPS 2021)[9]
- FreeMatch(ICLR 2023)[10]
- SoftMatch(ICLR 2023)[11]
此外,我们还为 PseudoLabel 和 UDA 实现了课程伪标签方法(CPL),分别称为 Flex-Pseudo-Label 和 Flex-UDA。
支持的数据集: TorchSSL 目前支持 SSL 研究中常用的 5 个数据集:
- CIFAR-10
- CIFAR-100
- STL-10
- SVHN
- ImageNet
主要结果
结果为最佳准确率及其标准误差。表中“40”、“250”、“1000”等数字表示不同数量的标注样本(例如,CIFAR-10 中的“40”表示每个类别仅有 4 个标注样本)。所有实验均使用随机种子 0、1、2。所有配置文件均位于 config/ 文件夹下。您可以直接在自己的研究中引用这些结果。
请注意,全监督学习的结果是在不考虑表格中标注样本数量的情况下,使用数据集中全部训练数据训练得到的。
CIFAR-10 和 CIFAR-100
| CIFAR-10 | CIFAR100 | ||||||
|---|---|---|---|---|---|---|---|
| 40 | 250 | 4000 | 400 | 2500 | 10000 | ||
| FullySupervised | 95.38±0.05 | 95.39±0.04 | 95.38±0.05 | 80.7±0.09 | 80.7±0.09 | 80.73±0.05 | |
| PiModel [1] | 25.66±1.76 | 53.76±1.29 | 86.87±0.59 | 13.04±0.8 | 41.2±0.66 | 63.35±0.0 | |
| PseudoLabel [3] | 25.39±0.26 | 53.51±2.2 | 84.92±0.19 | 12.55±0.85 | 42.26±0.28 | 63.45±0.24 | |
| PseudoLabel_Flex [9] | 26.26±1.96 | 53.86±1.81 | 85.25±0.19 | 14.28±0.46 | 43.88±0.51 | 64.4±0.15 | |
| MeanTeacher [2] | 29.91±1.6 | 62.54±3.3 | 91.9±0.21 | 18.89±1.44 | 54.83±1.06 | 68.25±0.23 | |
| VAT [4] | 25.34±2.12 | 58.97±1.79 | 89.49±0.12 | 14.8±1.4 | 53.16±0.79 | 67.86±0.19 | |
| MixMatch [5] | 63.81±6.48 | 86.37±0.59 | 93.34±0.26 | 32.41±0.66 | 60.24±0.48 | 72.22±0.29 | |
| ReMixMatch [7] | 90.12±1.03 | 93.7±0.05 | 95.16±0.01 | 57.25±1.05 | 73.97±0.35 | 79.98±0.27 | |
| UDA [6] | 89.38±3.75 | 94.84±0.06 | 95.71±0.07 | 53.61±1.59 | 72.27±0.21 | 77.51±0.23 | |
| UDA_Flex [9] | 94.56±0.52 | 94.98±0.07 | 95.76±0.06 | 54.83±1.88 | 72.92±0.15 | 78.09±0.1 | |
| FixMatch [8] | 92.53±0.28 | 95.14±0.05 | 95.79±0.08 | 53.58±0.82 | 71.97±0.16 | 77.8±0.12 | |
| FlexMatch [9] | 95.03±0.06 | 95.02±0.09 | 95.81±0.01 | 60.06±1.62 | 73.51±0.2 | 78.1±0.15 |
STL-10 和 SVHN
| STL-10 | SVHN | ||||||
|---|---|---|---|---|---|---|---|
| 40 | 250 | 1000 | 40 | 250 | 1000 | ||
| FullySupervised | 无 | 无 | 无 | 97.87±0.02 | 97.87±0.01 | 97.86±0.01 | |
| PiModel [1] | 25.69±0.85 | 44.87±1.5 | 67.22±0.4 | 32.52±0.95 | 86.7±1.12 | 92.84±0.11 | |
| PseudoLabel [3] | 25.32±0.99 | 44.55±2.43 | 67.36±0.71 | 35.39±5.6 | 84.41±0.95 | 90.6±0.32 | |
| PseudoLabel_Flex [9] | 26.58±2.19 | 47.94±2.5 | 67.95±0.37 | 36.79±3.64 | 79.58±2.11 | 87.95±0.54 | |
| MeanTeacher [2] | 28.28±1.45 | 43.51±2.75 | 66.1±1.37 | 63.91±3.98 | 96.55±0.03 | 96.73±0.05 | |
| VAT [4] | 25.26±0.38 | 43.58±1.97 | 62.05±1.12 | 25.25±3.38 | 95.67±0.12 | 95.89±0.2 | |
| MixMatch [5] | 45.07±0.96 | 65.48±0.32 | 78.3±0.68 | 69.4±8.39 | 95.44±0.32 | 96.31±0.37 | |
| ReMixMatch [7] | 67.88±6.24 | 87.51±1.28 | 93.26±0.14 | 75.96±9.13 | 93.64±0.22 | 94.84±0.31 | |
| UDA [6] | 62.58±8.44 | 90.28±1.15 | 93.36±0.17 | 94.88±4.27 | 98.08±0.05 | 98.11±0.01 | |
| UDA_Flex [9] | 70.47±2.1 | 90.97±0.45 | 93.9±0.25 | 96.58±1.51 | 97.34±0.83 | 97.98±0.05 | |
| FixMatch [8] | 64.03±4.14 | 90.19±1.04 | 93.75±0.33 | 96.19±1.18 | 97.98±0.02 | 98.04±0.03 | |
| FlexMatch [9] | 70.85±4.16 | 91.77±0.39 | 94.23±0.18 | 91.81±3.2 | 93.41±2.29 | 93.28±0.3 |
ImageNet
| 100k 标签 | ||
|---|---|---|
| top-1 | top-5 | |
| FixMatch [8] | 56.34 | 78.20 |
| FlexMatch [9] | 58.15 | 80.52 |
日志和权重
您可以在此处下载共享的日志和权重。
https://1drv.ms/u/s!AlpW9hcyb0KvmyCfsCjGvhDXG5Nb?e=Xc6amH
使用方法
在运行或修改代码之前,您需要:
- 将此仓库克隆到您的机器上。
- 确保已安装 Anaconda 或 Miniconda。
- 运行
conda env create -f environment.yml来初始化环境。
运行实验
使用 TorchSSL 进行实验非常方便。例如,如果您想运行 FlexMatch 算法:
- 根据需要修改
config/flexmatch/flexmatch.yaml中的配置文件。 - 运行
python flexmatch.py --c config/flexmatch/flexmatch.yaml。
自定义
如果您想编写自己的算法,请按照以下步骤操作:
- 为您的算法创建一个目录,例如
SSL,并在其中编写您自己的模型文件SSl/SSL.py。 - 在
SSL.py中编写训练文件。 - 在
config/SSL/SSL.yaml中编写配置文件。
引用 TorchSSL
如果您认为本工具包或相关成果对您的研究有所帮助,请引用我们的论文:
@article{wang2023freematch,
title={FreeMatch: 自适应阈值的半监督学习},
author={王一东、陈浩、衡强、侯文欣、范悦、吴振、王金东、萨维德斯、筱崎隆弘、拉杰、席勒、谢星},
booktitle={国际表征学习会议 (ICLR)},
year={2023}
}
@article{chen2023softmatch,
title={SoftMatch: 解决半监督学习中的数量-质量权衡问题},
author={陈浩、陶然、范悦、王一东、王金东、席勒、谢星、拉杰、萨维德斯},
booktitle={国际表征学习会议 (ICLR)},
year={2023}
}
@article{zhang2021flexmatch,
title={FlexMatch: 通过课程伪标签提升半监督学习},
author={张博文、王一东、侯文欣、吴浩、王金东、奥村学、筱崎隆弘},
booktitle={神经信息处理系统会议 (NeurIPS)},
year={2021}
}
维护者
王一东1、陈浩2、范悦3、吴浩1、张博文1、侯文欣1,4、陈宇豪5、王金东4
东京工业大学1
卡内基梅隆大学2
马克斯普朗克信息研究所3
微软亚洲研究院4
旷视科技5
贡献
- 欢迎您就 bug、问题和建议提出 issue。
- 如果您希望加入 TorchSSL 团队,请发送邮件至王一东(646842131@qq.com;yidongwang37@gmail.com)以获取更多信息。我们计划添加更多 SSL 算法,并将 TorchSSL 从计算机视觉扩展到自然语言处理和语音领域。
声明
关于 ImageNet 数据集: 请从官方网站下载 ImageNet 2014 数据集(与 2012 年版本相同)(链接:https://image-net.org/challenges/LSVRC/2012/2012-downloads.php)。将训练集和验证集解压到*子文件夹*中(测试集不使用),并分别放入 train/ 和 val/ 目录下。每个子文件夹代表一个类别。
注意:官方验证集并未按类别压缩成子文件夹,您可以使用:https://github.com/jiweibo/ImageNet/blob/master/valprep.sh,这是一段用于准备文件结构的优秀脚本。
参考文献
[1] Antti Rasmus、Harri Valpola、Mikko Honkala、Mathias Berglund 和 Tapani Raiko. 半监督学习中的梯形网络。NeurIPS,页 3546–3554,2015 年。
[2] Antti Tarvainen 和 Harri Valpola. 平均教师是更好的榜样:加权平均一致性目标可提高半监督深度学习效果。NeurIPS,页 1195–1204,2017 年。
[3] Dong-Hyun Lee 等人. 伪标签:一种简单高效的深度神经网络半监督学习方法。ICML 表征学习挑战研讨会,第 3 卷,2013 年。
[4] Takeru Miyato、Shin-ichi Maeda、Masanori Koyama 和 Shin Ishii. 虚拟对抗训练:一种用于监督和半监督学习的正则化方法。IEEE TPAMI,41(8):1979–1993,2018 年。
[5] David Berthelot、Nicholas Carlini、Ian Goodfellow、Nicolas Papernot、Avital Oliver 和 Colin Raffel. Mixmatch:一种全面的半监督学习方法。NeurIPS,页 5050–5060,2019 年。
[6] Qizhe Xie、Zihang Dai、Eduard Hovy、Thang Luong 和 Quoc Le. 用于一致性训练的无监督数据增强。NeurIPS,33 届,2020 年。
[7] David Berthelot、Nicholas Carlini、Ekin D Cubuk、Alex Kurakin、Kihyuk Sohn、Han Zhang 和 Colin Raffel. Remixmatch:基于分布匹配和增强锚定的半监督学习。ICLR,2019 年。
[8] Kihyuk Sohn、David Berthelot、Nicholas Carlini、Zizhao Zhang、Han Zhang、Colin A Raf-fel、Ekin Dogus Cubuk、Alexey Kurakin 和 Chun-Liang Li. Fixmatch:通过一致性和置信度简化半监督学习。NeurIPS,33 届,2020 年。
[9] 张博文、王一东、侯文欣、吴浩、王金东、奥村学和筱崎隆弘. FlexMatch:通过课程伪标签提升半监督学习。NeurIPS,2021 年。
[10] 王一东、陈浩、衡强、侯文欣、范悦、吴振、王金东、萨维德斯、筱崎隆弘、拉杰、席勒、谢星. FreeMatch:自适应阈值的半监督学习。ICLR,2023 年。
[11] 陈浩、陶然、范悦、王一东、萨维德斯、王金东、拉杰、谢星、席勒. SoftMatch:解决半监督学习中的数量-质量权衡问题。ICLR,2023 年。
常见问题
相似工具推荐
openclaw
OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你
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 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
gemini-cli
gemini-cli 是一款由谷歌推出的开源 AI 命令行工具,它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言,它提供了一条从输入提示词到获取模型响应的最短路径,无需切换窗口即可享受智能辅助。 这款工具主要解决了开发过程中频繁上下文切换的痛点,让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用,还是执行复杂的 Git 操作,gemini-cli 都能通过自然语言指令高效处理。 它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口,具备出色的逻辑推理能力;内置 Google 搜索、文件操作及 Shell 命令执行等实用工具;更独特的是,它支持 MCP(模型上下文协议),允许用户灵活扩展自定义集成,连接如图像生成等外部能力。此外,个人谷歌账号即可享受免费的额度支持,且项目基于 Apache 2.0 协议完全开源,是提升终端工作效率的理想助手。
markitdown
MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具,专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片(含 OCR)、音频(含语音转录)、HTML 乃至 YouTube 链接等多种格式的解析,能够精准提取文档中的标题、列表、表格和链接等关键结构信息。 在人工智能应用日益普及的今天,大语言模型(LLM)虽擅长处理文本,却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点,它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式,成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外,它还提供了 MCP(模型上下文协议)服务器,可无缝集成到 Claude Desktop 等 LLM 应用中。 这款工具特别适合开发者、数据科学家及 AI 研究人员使用,尤其是那些需要构建文档检索增强生成(RAG)系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性,但其核心优势在于为机器