imbalanced-semi-self
imbalanced-semi-self 是一个专为解决类别不平衡(长尾分布)学习问题而设计的开源算法库,源自 NeurIPS 2020 的研究成果。在现实世界的数据集中,某些类别的样本数量往往远少于其他类别,导致传统模型难以准确识别这些“尾部”类别。该工具通过引入半监督学习和自监督预训练两种策略,有效提升了模型在数据分布不均场景下的表现。
其核心亮点在于:利用未标记数据辅助划分更清晰的类别边界,特别增强了对稀有类别的识别能力;同时,通过自监督预训练(如旋转预测或 MoCo 方法),减少测试时尾部类别的特征泄露,从而学习到更具泛化性的特征表示。无论标记数据或未标记数据是否存在不平衡,该方法均能稳定提升性能。
imbalanced-semi-self 非常适合从事机器学习、计算机视觉领域的研究人员和开发者使用,尤其是那些需要处理长尾分布数据集(如 CIFAR-LT、ImageNet-LT、iNaturalist 等)的团队。项目提供了完整的训练脚本、预训练模块及详细配置指南,基于 PyTorch 构建,便于复现论文结果或作为基线进行二次开发。如果你正在探索如何利用无标签数据或自监督信号来改善不平衡分类任务,这是一个值得参考的实用工具。
使用场景
某医疗影像初创团队正在构建一个罕见皮肤病变识别系统,面临训练数据中常见病灶样本充足,但关键罕见病灶样本极度稀缺的长尾分布难题。
没有 imbalanced-semi-self 时
- 尾部类别识别率极低:模型严重偏向常见病灶,对罕见病变的召回率不足 30%,导致漏诊风险高。
- 决策边界模糊:由于缺乏足够的正样本,模型无法在特征空间中为罕见病灶划定清晰的分类边界,容易与相似常见病灶混淆。
- 标注成本高昂:为了提升效果,团队被迫投入大量资金聘请专家标注更多罕见样本,但数据收集周期长且难以规模化。
- 泛化能力差:在测试集中,一旦遇到稍有变化的罕见病灶图像,模型表现大幅波动,鲁棒性不足。
使用 imbalanced-semi-self 后
- 显著提升尾部性能:利用大量未标注的临床影像数据进行半监督学习,罕见病灶的识别准确率提升了 25% 以上。
- 特征表示更清晰:通过自监督预训练(如旋转预测或 MoCo),模型学到了更强的通用特征,有效缓解了尾部类别的特征泄露问题,分类边界更加明确。
- 降低标注依赖:无需额外标注昂贵数据,直接挖掘现有未标注数据的价值,大幅降低了数据准备成本和项目启动门槛。
- 鲁棒性增强:在不同分布的测试集上,模型对罕见病灶的判定更加稳定,减少了因样本稀缺导致的过拟合现象。
imbalanced-semi-self 通过巧妙结合未标注数据与自监督预训练,以低成本解决了长尾分布下“少数类”难以学习的核心痛点,让小样本场景下的 AI 落地成为可能。
运行环境要求
- 未说明
需要 NVIDIA GPU(用于运行 PyTorch 及 MoCo/Rotation 自监督预训练),具体型号和显存大小未说明,但 ImageNet-LT 等大数据集训练通常建议 16GB+ 显存
未说明(处理 80M TinyImages 或 ImageNet 数据集建议 32GB+)

快速开始
重新思考标签在改善类别不平衡学习中的价值
本仓库包含论文的实现代码:
重新思考标签在改善类别不平衡学习中的价值
杨宇哲 和 许志
第34届神经信息处理系统大会(NeurIPS),2020年
[官网] [arXiv] [论文] [幻灯片] [视频]
如果您觉得这段代码或这一想法有用,请考虑引用我们的工作:
@inproceedings{yang2020rethinking,
title={Rethinking the Value of Labels for Improving Class-Imbalanced Learning},
author={Yang, Yuzhe and Xu, Zhi},
booktitle={Conference on Neural Information Processing Systems (NeurIPS)},
year={2020}
}
概述
在本工作中,我们从理论和实验两方面证明:无论有标签/无标签数据的不平衡程度如何,以及采用何种基础训练方法,半监督学习(利用未标注数据)和__自监督预训练__(先通过自监督任务对模型进行预训练)都能显著提升在不平衡(长尾)数据集上的性能。
半监督不平衡学习:
利用未标注数据有助于形成更清晰的类别边界,从而实现更好的类别分离,尤其对于尾部类别效果显著。
自监督不平衡学习:
自监督预训练(SSP)有助于缓解测试阶段尾部类别的泄露问题,进而学习到更好的边界和表征。
安装
前置条件
- 下载 CIFAR 和 SVHN 数据集,并将其放置在您的
data_path中。原始数据将由imbalance_cifar.py和imbalance_svhn.py转换。 - 下载 ImageNet 和 iNaturalist 2018 数据集,并将其放置在您的
data_path中。长尾版本将使用imagenet_inat/data/目录下相应子文件夹中的 train/val 切分文件(.txt 文件)创建。 - 根据 ImageNet-LT 和 iNaturalist 2018 的情况,相应地修改
imagenet_inat/main.py中的data_root。
依赖项
- PyTorch (>= 1.2,已在 1.4 上测试)
- yaml
- scikit-learn
- TensorboardX
代码概览
主要文件
train_semi.py:在 CIFAR-LT / SVHN-LT 上使用额外的未标注数据训练模型train.py:在 CIFAR-LT / SVHN-LT 上使用(或不使用)SSP 训练模型imagenet_inat/main.py:在 ImageNet-LT / iNaturalist 2018 上使用(或不使用)SSP 训练模型pretrain_rot.py和pretrain_moco.py:分别使用 旋转预测 或 MoCo 进行自监督预训练
主要参数
--dataset:所选长尾数据集的名称--imb_factor:不平衡因子(即论文中不平衡比\rho的倒数)--imb_factor_unlabel:未标注数据的不平衡因子(即未标注不平衡比\rho_U的倒数)--pretrained_model:自监督预训练模型的路径--resume:恢复检查点的路径(也用于评估)
快速入门
半监督不平衡学习
未标注数据的获取
CIFAR-10-LT:CIFAR-10 的未标注数据是按照 这个仓库 使用 80M TinyImages 准备的。简而言之,首先训练一个数据源模型来区分 CIFAR-10 的各个类别以及“非-CIFAR”类别。然后根据每个类别的预测置信度对图像进行排序,并据此构建未标注(不平衡)数据集。请使用以下链接下载准备好的未标注数据,并将其放置在您的 data_path 中:
SVHN-LT:由于其自身数据集中包含额外的 531.1K 个样本(已标注),这些样本直接被用来模拟未标注数据集。
需要注意的是,未标注数据中的类别不平衡也被考虑在内,这由 --imb_factor_unlabel 参数控制(即论文中的 \rho_U)。详细信息请参阅 imbalance_cifar.py 和 imbalance_svhn.py。
基于伪标签的半监督学习
要进行伪标签(自训练),首先需要在原始的不平衡数据集上训练一个基础分类器。然后使用该基础分类器生成伪标签:
python gen_pseudolabels.py --resume <ckpt-path> --data_dir <data_path> --output_dir <output_path> --output_filename <save_name>
我们提供了 CIFAR-10-LT 和 SVHN-LT 在 \rho=50 时的伪标签文件,这些文件是基于使用标准交叉熵(CE)损失训练的基础模型生成的:
例如,在 CIFAR-10-LT 上使用未标注数据进行训练,假设 \rho=50 且 \rho_U=50:
python train_semi.py --dataset cifar10 --imb_factor 0.02 --imb_factor_unlabel 0.02
自监督不平衡学习
自监督预训练(SSP)
要在 CIFAR-10-LT 上进行旋转 SSP,且 \rho=100:
python pretrain_rot.py --dataset cifar10 --imb_factor 0.01
要在 ImageNet-LT 上进行 MoCo SSP:
python pretrain_moco.py --dataset imagenet --data <data_path>
使用 SSP 模型进行网络训练
在 CIFAR-10-LT 上训练,且 \rho=100:
python train.py --dataset cifar10 --imb_factor 0.01 --pretrained_model <path_to_ssp_model>
在 ImageNet-LT / iNaturalist 2018 上训练:
python -m imagenet_inat.main --cfg <path_to_ssp_config> --model_dir <path_to_ssp_model>
结果与模型
所有相关数据和检查点都可以通过 此链接 查看。具体的结果和检查点如下所示。
半监督不平衡学习
CIFAR-10-LT
| 模型 | Top-1 错误率 | 下载 |
|---|---|---|
CE + D_U@5x (\rho=50 和 \rho_U=1) |
16.79 | ResNet-32 |
CE + D_U@5x (\rho=50 和 \rho_U=25) |
16.88 | ResNet-32 |
CE + D_U@5x (\rho=50 和 \rho_U=50) |
18.36 | ResNet-32 |
CE + D_U@5x (\rho=50 和 \rho_U=100) |
19.94 | ResNet-32 |
SVHN-LT
| 模型 | Top-1 错误率 | 下载 |
|---|---|---|
CE + D_U@5x (\rho=50 和 \rho_U=1) |
13.07 | ResNet-32 |
CE + D_U@5x (\rho=50 和 \rho_U=25) |
13.36 | ResNet-32 |
CE + D_U@5x (\rho=50 和 \rho_U=50) |
13.16 | ResNet-32 |
CE + D_U@5x (\rho=50 和 \rho_U=100) |
14.54 | ResNet-32 |
测试预训练检查点
python train_semi.py --dataset cifar10 --resume <ckpt-path> -e
自监督不平衡学习
CIFAR-10-LT
自监督预训练模型(旋转)
数据集设置 \rho=100\rho=50\rho=10下载 ResNet-32 ResNet-32 ResNet-32 最终模型(200轮)
模型 \rhoTop-1 错误率 下载 CE(均匀) + SSP 10 12.28 ResNet-32 CE(均匀) + SSP 50 21.80 ResNet-32 CE(均匀) + SSP 100 26.50 ResNet-32 CE(平衡) + SSP 10 11.57 ResNet-32 CE(平衡) + SSP 50 19.60 ResNet-32 CE(平衡) + SSP 100 23.47 ResNet-32
CIFAR-100-LT
自监督预训练模型(旋转)
数据集设置 \rho=100\rho=50\rho=10下载 ResNet-32 ResNet-32 ResNet-32 最终模型(200轮)
模型 \rhoTop-1 错误率 下载 CE(均匀) + SSP 10 42.93 ResNet-32 CE(均匀) + SSP 50 54.96 ResNet-32 CE(均匀) + SSP 100 59.60 ResNet-32 CE(平衡) + SSP 10 41.94 ResNet-32 CE(平衡) + SSP 50 52.91 ResNet-32 CE(平衡) + SSP 100 56.94 ResNet-32
ImageNet-LT
自监督预训练模型(MoCo)
[ResNet-50]最终模型(90轮)
模型 Top-1 错误率 下载 CE(均匀) + SSP 54.4 ResNet-50 CE(平衡) + SSP 52.4 ResNet-50 cRT + SSP 48.7 ResNet-50
iNaturalist 2018
自监督预训练模型(MoCo)
[ResNet-50]最终模型(90轮)
模型 Top-1 错误率 下载 CE(均匀) + SSP 35.6 ResNet-50 CE(平衡) + SSP 34.1 ResNet-50 cRT + SSP 31.9 ResNet-50
测试预训练检查点
# 在CIFAR-10 / CIFAR-100 上测试
python train.py --dataset cifar10 --resume <ckpt-path> -e
# 在ImageNet-LT / iNaturalist 2018 上测试
python -m imagenet_inat.main --cfg <path_to_ssp_config> --model_dir <path_to_model> --test
致谢
本代码部分基于以下开源项目的实现: OpenLongTailRecognition, classifier-balancing, LDAM-DRW, MoCo,以及 semisup-adv。
联系方式
如有任何问题,请随时通过电子邮件(yuzhe@mit.edu & zhixu@mit.edu)或GitHub Issues与我们联系。祝您使用愉快!
常见问题
相似工具推荐
openclaw
OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你
n8n
n8n 是一款面向技术团队的公平代码(fair-code)工作流自动化平台,旨在让用户在享受低代码快速构建便利的同时,保留编写自定义代码的灵活性。它主要解决了传统自动化工具要么过于封闭难以扩展、要么完全依赖手写代码效率低下的痛点,帮助用户轻松连接 400 多种应用与服务,实现复杂业务流程的自动化。 n8n 特别适合开发者、工程师以及具备一定技术背景的业务人员使用。其核心亮点在于“按需编码”:既可以通过直观的可视化界面拖拽节点搭建流程,也能随时插入 JavaScript 或 Python 代码、调用 npm 包来处理复杂逻辑。此外,n8n 原生集成了基于 LangChain 的 AI 能力,支持用户利用自有数据和模型构建智能体工作流。在部署方面,n8n 提供极高的自由度,支持完全自托管以保障数据隐私和控制权,也提供云端服务选项。凭借活跃的社区生态和数百个现成模板,n8n 让构建强大且可控的自动化系统变得简单高效。
ML-For-Beginners
ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。
funNLP
funNLP 是一个专为中文自然语言处理(NLP)打造的超级资源库,被誉为"NLP 民工的乐园”。它并非单一的软件工具,而是一个汇集了海量开源项目、数据集、预训练模型和实用代码的综合性平台。 面对中文 NLP 领域资源分散、入门门槛高以及特定场景数据匮乏的痛点,funNLP 提供了“一站式”解决方案。这里不仅涵盖了分词、命名实体识别、情感分析、文本摘要等基础任务的标准工具,还独特地收录了丰富的垂直领域资源,如法律、医疗、金融行业的专用词库与数据集,甚至包含古诗词生成、歌词创作等趣味应用。其核心亮点在于极高的全面性与实用性,从基础的字典词典到前沿的 BERT、GPT-2 模型代码,再到高质量的标注数据和竞赛方案,应有尽有。 无论是刚刚踏入 NLP 领域的学生、需要快速验证想法的算法工程师,还是从事人工智能研究的学者,都能在这里找到急需的“武器弹药”。对于开发者而言,它能大幅减少寻找数据和复现模型的时间;对于研究者,它提供了丰富的基准测试资源和前沿技术参考。funNLP 以开放共享的精神,极大地降低了中文自然语言处理的开发与研究成本,是中文 AI 社区不可或缺的宝藏仓库。
cs-video-courses
cs-video-courses 是一个精心整理的计算机科学视频课程清单,旨在为自学者提供系统化的学习路径。它汇集了全球知名高校(如加州大学伯克利分校、新南威尔士大学等)的完整课程录像,涵盖从编程基础、数据结构与算法,到操作系统、分布式系统、数据库等核心领域,并深入延伸至人工智能、机器学习、量子计算及区块链等前沿方向。 面对网络上零散且质量参差不齐的教学资源,cs-video-courses 解决了学习者难以找到成体系、高难度大学级别课程的痛点。该项目严格筛选内容,仅收录真正的大学层级课程,排除了碎片化的简短教程或商业广告,确保用户能接触到严谨的学术内容。 这份清单特别适合希望夯实计算机基础的开发者、需要补充特定领域知识的研究人员,以及渴望像在校生一样系统学习计算机科学的自学者。其独特的技术亮点在于分类极其详尽,不仅包含传统的软件工程与网络安全,还细分了生成式 AI、大语言模型、计算生物学等新兴学科,并直接链接至官方视频播放列表,让用户能一站式获取高质量的教育资源,免费享受世界顶尖大学的课堂体验。
lobehub
LobeHub 是一个致力于工作与生活的智能体协作平台,旨在帮助用户发现、构建并与不断成长的 AI 智能体队友协同工作。它解决了当前 AI 应用中单点交互效率低、难以形成规模化协作网络的问题,将“智能体”确立为工作的基本单元,让人类与 AI 能够共同进化。 无论是开发者、研究人员还是普通用户,都能通过 LobeHub 轻松设计多智能体协作流程。平台支持一键安装 MCP 插件、访问丰富的智能体市场,并提供本地与云端数据库管理、多用户协作等高级功能。其独特的技术亮点包括对多种大模型服务商的兼容、本地大模型部署支持、视觉识别、语音对话(TTS/STT)、文生图以及思维链(Chain of Thought)等能力。此外,LobeHub 还具备分支对话、工件生成、文件上传与知识库集成等实用特性,并适配桌面端、移动端及 PWA 场景,支持自定义主题。 通过开源与自托管选项,LobeHub 为构建人机共演的未来协作网络提供了灵活、可扩展的基础设施。