[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-YyzHarry--imbalanced-semi-self":3,"tool-YyzHarry--imbalanced-semi-self":65},[4,18,28,40,49,57],{"id":5,"name":6,"github_repo":7,"description_zh":8,"stars":9,"difficulty_score":10,"last_commit_at":11,"category_tags":12,"status":17},4358,"openclaw","openclaw\u002Fopenclaw","OpenClaw 是一款专为个人打造的本地化 AI 助手，旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚，能够直接接入你日常使用的各类通讯渠道，包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息，OpenClaw 都能即时响应，甚至支持在 macOS、iOS 和 Android 设备上进行语音交互，并提供实时的画布渲染功能供你操控。\n\n这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地，用户无需依赖云端服务即可享受快速、私密的智能辅助，真正实现了“你的数据，你做主”。其独特的技术亮点在于强大的网关架构，将控制平面与核心助手分离，确保跨平台通信的流畅性与扩展性。\n\nOpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者，以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力（支持 macOS、Linux 及 Windows WSL2），即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你",349277,3,"2026-04-06T06:32:30",[13,14,15,16],"Agent","开发框架","图像","数据工具","ready",{"id":19,"name":20,"github_repo":21,"description_zh":22,"stars":23,"difficulty_score":24,"last_commit_at":25,"category_tags":26,"status":17},9989,"n8n","n8n-io\u002Fn8n","n8n 是一款面向技术团队的公平代码（fair-code）工作流自动化平台，旨在让用户在享受低代码快速构建便利的同时，保留编写自定义代码的灵活性。它主要解决了传统自动化工具要么过于封闭难以扩展、要么完全依赖手写代码效率低下的痛点，帮助用户轻松连接 400 多种应用与服务，实现复杂业务流程的自动化。\n\nn8n 特别适合开发者、工程师以及具备一定技术背景的业务人员使用。其核心亮点在于“按需编码”：既可以通过直观的可视化界面拖拽节点搭建流程，也能随时插入 JavaScript 或 Python 代码、调用 npm 包来处理复杂逻辑。此外，n8n 原生集成了基于 LangChain 的 AI 能力，支持用户利用自有数据和模型构建智能体工作流。在部署方面，n8n 提供极高的自由度，支持完全自托管以保障数据隐私和控制权，也提供云端服务选项。凭借活跃的社区生态和数百个现成模板，n8n 让构建强大且可控的自动化系统变得简单高效。",184740,2,"2026-04-19T23:22:26",[16,14,13,15,27],"插件",{"id":29,"name":30,"github_repo":31,"description_zh":32,"stars":33,"difficulty_score":24,"last_commit_at":34,"category_tags":35,"status":17},2268,"ML-For-Beginners","microsoft\u002FML-For-Beginners","ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程，旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周，包含 26 节精炼课程和 52 道配套测验，内容涵盖从基础概念到实际应用的完整流程，有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。\n\n无论是希望转型的开发者、需要补充算法背景的研究人员，还是对人工智能充满好奇的普通爱好者，都能从中受益。课程不仅提供了清晰的理论讲解，还强调动手实践，让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持，通过自动化机制提供了包括简体中文在内的 50 多种语言版本，极大地降低了全球不同背景用户的学习门槛。此外，项目采用开源协作模式，社区活跃且内容持续更新，确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路，ML-For-Beginners 将是理想的起点。",85267,"2026-04-18T11:00:28",[15,16,36,27,13,37,38,14,39],"视频","其他","语言模型","音频",{"id":41,"name":42,"github_repo":43,"description_zh":44,"stars":45,"difficulty_score":46,"last_commit_at":47,"category_tags":48,"status":17},5784,"funNLP","fighting41love\u002FfunNLP","funNLP 是一个专为中文自然语言处理（NLP）打造的超级资源库，被誉为\"NLP 民工的乐园”。它并非单一的软件工具，而是一个汇集了海量开源项目、数据集、预训练模型和实用代码的综合性平台。\n\n面对中文 NLP 领域资源分散、入门门槛高以及特定场景数据匮乏的痛点，funNLP 提供了“一站式”解决方案。这里不仅涵盖了分词、命名实体识别、情感分析、文本摘要等基础任务的标准工具，还独特地收录了丰富的垂直领域资源，如法律、医疗、金融行业的专用词库与数据集，甚至包含古诗词生成、歌词创作等趣味应用。其核心亮点在于极高的全面性与实用性，从基础的字典词典到前沿的 BERT、GPT-2 模型代码，再到高质量的标注数据和竞赛方案，应有尽有。\n\n无论是刚刚踏入 NLP 领域的学生、需要快速验证想法的算法工程师，还是从事人工智能研究的学者，都能在这里找到急需的“武器弹药”。对于开发者而言，它能大幅减少寻找数据和复现模型的时间；对于研究者，它提供了丰富的基准测试资源和前沿技术参考。funNLP 以开放共享的精神，极大地降低了中文自然语言处理的开发与研究成本，是中文 AI 社区不可或缺的宝藏仓库。",79857,1,"2026-04-08T20:11:31",[38,16,37],{"id":50,"name":51,"github_repo":52,"description_zh":53,"stars":54,"difficulty_score":46,"last_commit_at":55,"category_tags":56,"status":17},5773,"cs-video-courses","Developer-Y\u002Fcs-video-courses","cs-video-courses 是一个精心整理的计算机科学视频课程清单，旨在为自学者提供系统化的学习路径。它汇集了全球知名高校（如加州大学伯克利分校、新南威尔士大学等）的完整课程录像，涵盖从编程基础、数据结构与算法，到操作系统、分布式系统、数据库等核心领域，并深入延伸至人工智能、机器学习、量子计算及区块链等前沿方向。\n\n面对网络上零散且质量参差不齐的教学资源，cs-video-courses 解决了学习者难以找到成体系、高难度大学级别课程的痛点。该项目严格筛选内容，仅收录真正的大学层级课程，排除了碎片化的简短教程或商业广告，确保用户能接触到严谨的学术内容。\n\n这份清单特别适合希望夯实计算机基础的开发者、需要补充特定领域知识的研究人员，以及渴望像在校生一样系统学习计算机科学的自学者。其独特的技术亮点在于分类极其详尽，不仅包含传统的软件工程与网络安全，还细分了生成式 AI、大语言模型、计算生物学等新兴学科，并直接链接至官方视频播放列表，让用户能一站式获取高质量的教育资源，免费享受世界顶尖大学的课堂体验。",79792,"2026-04-08T22:03:59",[37,15,16,14],{"id":58,"name":59,"github_repo":60,"description_zh":61,"stars":62,"difficulty_score":24,"last_commit_at":63,"category_tags":64,"status":17},7347,"lobehub","lobehub\u002Flobehub","LobeHub 是一个致力于工作与生活的智能体协作平台，旨在帮助用户发现、构建并与不断成长的 AI 智能体队友协同工作。它解决了当前 AI 应用中单点交互效率低、难以形成规模化协作网络的问题，将“智能体”确立为工作的基本单元，让人类与 AI 能够共同进化。\n\n无论是开发者、研究人员还是普通用户，都能通过 LobeHub 轻松设计多智能体协作流程。平台支持一键安装 MCP 插件、访问丰富的智能体市场，并提供本地与云端数据库管理、多用户协作等高级功能。其独特的技术亮点包括对多种大模型服务商的兼容、本地大模型部署支持、视觉识别、语音对话（TTS\u002FSTT）、文生图以及思维链（Chain of Thought）等能力。此外，LobeHub 还具备分支对话、工件生成、文件上传与知识库集成等实用特性，并适配桌面端、移动端及 PWA 场景，支持自定义主题。\n\n通过开源与自托管选项，LobeHub 为构建人机共演的未来协作网络提供了灵活、可扩展的基础设施。",75141,"2026-04-13T22:06:32",[38,16,13,14,15],{"id":66,"github_repo":67,"name":68,"description_en":69,"description_zh":70,"ai_summary_zh":71,"readme_en":72,"readme_zh":73,"quickstart_zh":74,"use_case_zh":75,"hero_image_url":76,"owner_login":77,"owner_name":78,"owner_avatar_url":79,"owner_bio":80,"owner_company":81,"owner_location":81,"owner_email":81,"owner_twitter":82,"owner_website":83,"owner_url":84,"languages":85,"stars":90,"forks":91,"last_commit_at":92,"license":93,"difficulty_score":10,"env_os":94,"env_gpu":95,"env_ram":96,"env_deps":97,"category_tags":105,"github_topics":106,"view_count":24,"oss_zip_url":81,"oss_zip_packed_at":81,"status":17,"created_at":118,"updated_at":119,"faqs":120,"releases":155},10022,"YyzHarry\u002Fimbalanced-semi-self","imbalanced-semi-self","[NeurIPS 2020] Semi-Supervision (Unlabeled Data) & Self-Supervision Improve Class-Imbalanced \u002F Long-Tailed Learning","imbalanced-semi-self 是一个专为解决类别不平衡（长尾分布）学习问题而设计的开源算法库，源自 NeurIPS 2020 的研究成果。在现实世界的数据集中，某些类别的样本数量往往远少于其他类别，导致传统模型难以准确识别这些“尾部”类别。该工具通过引入半监督学习和自监督预训练两种策略，有效提升了模型在数据分布不均场景下的表现。\n\n其核心亮点在于：利用未标记数据辅助划分更清晰的类别边界，特别增强了对稀有类别的识别能力；同时，通过自监督预训练（如旋转预测或 MoCo 方法），减少测试时尾部类别的特征泄露，从而学习到更具泛化性的特征表示。无论标记数据或未标记数据是否存在不平衡，该方法均能稳定提升性能。\n\nimbalanced-semi-self 非常适合从事机器学习、计算机视觉领域的研究人员和开发者使用，尤其是那些需要处理长尾分布数据集（如 CIFAR-LT、ImageNet-LT、iNaturalist 等）的团队。项目提供了完整的训练脚本、预训练模块及详细配置指南，基于 PyTorch 构建，便于复现论文结果或作为基线进行二次开发。如果你正在探索如何利用无标签数据或自监督信","imbalanced-semi-self 是一个专为解决类别不平衡（长尾分布）学习问题而设计的开源算法库，源自 NeurIPS 2020 的研究成果。在现实世界的数据集中，某些类别的样本数量往往远少于其他类别，导致传统模型难以准确识别这些“尾部”类别。该工具通过引入半监督学习和自监督预训练两种策略，有效提升了模型在数据分布不均场景下的表现。\n\n其核心亮点在于：利用未标记数据辅助划分更清晰的类别边界，特别增强了对稀有类别的识别能力；同时，通过自监督预训练（如旋转预测或 MoCo 方法），减少测试时尾部类别的特征泄露，从而学习到更具泛化性的特征表示。无论标记数据或未标记数据是否存在不平衡，该方法均能稳定提升性能。\n\nimbalanced-semi-self 非常适合从事机器学习、计算机视觉领域的研究人员和开发者使用，尤其是那些需要处理长尾分布数据集（如 CIFAR-LT、ImageNet-LT、iNaturalist 等）的团队。项目提供了完整的训练脚本、预训练模块及详细配置指南，基于 PyTorch 构建，便于复现论文结果或作为基线进行二次开发。如果你正在探索如何利用无标签数据或自监督信号来改善不平衡分类任务，这是一个值得参考的实用工具。","# Rethinking the Value of Labels for Improving Class-Imbalanced Learning\n\nThis repository contains the implementation code for paper: \u003Cbr>\n__Rethinking the Value of Labels for Improving Class-Imbalanced Learning__ \u003Cbr>\n[Yuzhe Yang](http:\u002F\u002Fwww.mit.edu\u002F~yuzhe\u002F), and [Zhi Xu](http:\u002F\u002Fwww.mit.edu\u002F~zhixu\u002F) \u003Cbr>\n_34th Conference on Neural Information Processing Systems (NeurIPS), 2020_ \u003Cbr>\n[[Website](https:\u002F\u002Fwww.mit.edu\u002F~yuzhe\u002Fimbalanced-semi-self.html)] [[arXiv](https:\u002F\u002Farxiv.org\u002Fabs\u002F2006.07529)] [[Paper](https:\u002F\u002Farxiv.org\u002Fpdf\u002F2006.07529.pdf)] [[Slides](https:\u002F\u002Fwww.mit.edu\u002F~yuzhe\u002Fstatic\u002Fimbalance_nips20_slides.pdf)] [[Video](https:\u002F\u002Fyoutu.be\u002FXltXZ3OZvyI)]\n\nIf you find this code or idea useful, please consider citing our work:\n```bib\n@inproceedings{yang2020rethinking,\n  title={Rethinking the Value of Labels for Improving Class-Imbalanced Learning},\n  author={Yang, Yuzhe and Xu, Zhi},\n  booktitle={Conference on Neural Information Processing Systems (NeurIPS)},\n  year={2020}\n}\n```\n\n\n## Overview\nIn this work, we show theoretically and empirically that, both __semi-supervised learning__ (using unlabeled data) and __self-supervised pre-training__ (first pre-train the model with self-supervision) can substantially improve the performance on imbalanced (long-tailed) datasets, regardless of the imbalanceness on labeled\u002Funlabeled data and the base training techniques.\n\n__Semi-Supervised Imbalanced Learning__: \nUsing unlabeled data helps to shape clearer class boundaries and results in better class separation, especially for the tail classes.\n![semi](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FYyzHarry_imbalanced-semi-self_readme_616b52cce483.png)\n\n__Self-Supervised Imbalanced Learning__:\nSelf-supervised pre-training (SSP) helps mitigate the tail classes leakage during testing, which results in better learned boundaries and representations.\n![self](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FYyzHarry_imbalanced-semi-self_readme_a7fdf1d49db2.png)\n\n\n## Installation\n\n#### Prerequisites\n- Download [CIFAR](https:\u002F\u002Fwww.cs.toronto.edu\u002F~kriz\u002Fcifar.html) & [SVHN](http:\u002F\u002Fufldl.stanford.edu\u002Fhousenumbers\u002F) dataset, and place them in your `data_path`. Original data will be converted by [`imbalance_cifar.py`](dataset\u002Fimbalance_cifar.py) and [`imbalance_svhn.py`](dataset\u002Fimbalance_svhn.py)\n- Download [ImageNet](http:\u002F\u002Fimage-net.org\u002Fdownload) & [iNaturalist 2018](https:\u002F\u002Fgithub.com\u002Fvisipedia\u002Finat_comp\u002Ftree\u002Fmaster\u002F2018) dataset, and place them in your `data_path`. Long-tailed version will be created using train\u002Fval splits (.txt files) in corresponding subfolders under `imagenet_inat\u002Fdata\u002F`\n- Change the `data_root` in [`imagenet_inat\u002Fmain.py`](.\u002Fimagenet_inat\u002Fmain.py) accordingly for ImageNet-LT & iNaturalist 2018\n\n#### Dependencies\n- PyTorch (>= 1.2, tested on 1.4)\n- yaml\n- scikit-learn\n- TensorboardX\n\n\n## Code Overview\n\n#### Main Files\n- [`train_semi.py`](train_semi.py): train model with extra unlabeled data, on CIFAR-LT \u002F SVHN-LT\n- [`train.py`](train.py): train model with (or without) SSP, on CIFAR-LT \u002F SVHN-LT\n- [`imagenet_inat\u002Fmain.py`](.\u002Fimagenet_inat\u002Fmain.py): train model with (or without) SSP, on ImageNet-LT \u002F iNaturalist 2018\n- [`pretrain_rot.py`](pretrain_rot.py) & [`pretrain_moco.py`](pretrain_moco.py): self-supervised pre-training using [Rotation prediction](https:\u002F\u002Farxiv.org\u002Fpdf\u002F1803.07728.pdf) or [MoCo](https:\u002F\u002Farxiv.org\u002Fabs\u002F1911.05722)\n\n#### Main Arguments\n- `--dataset`: name of chosen long-tailed dataset\n- `--imb_factor`: imbalance factor (inverse value of imbalance ratio `\\rho` in the paper)\n- `--imb_factor_unlabel`: imbalance factor for unlabeled data (inverse value of unlabel imbalance ratio `\\rho_U`)\n- `--pretrained_model`: path to self-supervised pre-trained models\n- `--resume`: path to resume checkpoint (also for evaluation)\n\n\n## Getting Started\n\n### Semi-Supervised Imbalanced Learning\n\n#### Unlabeled data sourcing\n\n__CIFAR-10-LT__: CIFAR-10 unlabeled data is prepared following [this repo](https:\u002F\u002Fgithub.com\u002Fyaircarmon\u002Fsemisup-adv) using the [80M TinyImages](https:\u002F\u002Fpeople.csail.mit.edu\u002Ftorralba\u002Fpublications\u002F80millionImages.pdf). In short, a data sourcing model is trained to distinguish CIFAR-10 classes and an \"non-CIFAR\" class. For each class, images are then ranked based on the prediction confidence, and unlabeled (imbalanced) datasets are constructed accordingly. Use the following link to download the prepared unlabeled data, and place in your `data_path`:\n- [Unlabeled dataset for CIFAR-10-LT from TinyImages](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F1SODQBUvv2qycDivBb4nhHaCk3TMzaVM4\u002Fview?usp=sharing)\n\n__SVHN-LT__: Since its own dataset contains an extra part with 531.1K additional (labeled) samples, they are directly used to simulate the unlabeled dataset.\n\nNote that the class imbalance in unlabeled data is also considered, which is controlled by `--imb_factor_unlabel` (`\\rho_U` in the paper). See [`imbalance_cifar.py`](dataset\u002Fimbalance_cifar.py) and [`imbalance_svhn.py`](dataset\u002Fimbalance_svhn.py) for details.\n\n#### Semi-supervised learning with pseudo-labeling\n\nTo perform pseudo-labeling (self-training), first a base classifier is trained on original imbalanced dataset. With the trained base classifier, pseudo-labels can be generated using\n```bash\npython gen_pseudolabels.py --resume \u003Cckpt-path> --data_dir \u003Cdata_path> --output_dir \u003Coutput_path> --output_filename \u003Csave_name>\n```\nWe provide generated pseudo label files for CIFAR-10-LT & SVHN-LT with `\\rho=50`, using base models trained with standard cross-entropy (CE) loss:\n- [Generated pseudo labels for CIFAR-10-LT with `\\rho=50`](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F1Z4rwaqzjNoNQ27sofx1aDl8OLH-etoyP\u002Fview?usp=sharing)\n- [Generated pseudo labels for SVHN-LT with `\\rho=50`](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F19VeMQ07unVq3hIjLN5LiXWZNTI4CiN5F\u002Fview?usp=sharing)\n\nTo train with unlabeled data, for example, on CIFAR-10-LT with `\\rho=50` and `\\rho_U=50`\n```bash\npython train_semi.py --dataset cifar10 --imb_factor 0.02 --imb_factor_unlabel 0.02\n```\n\n### Self-Supervised Imbalanced Learning\n\n#### Self-supervised pre-training (SSP)\nTo perform Rotation SSP on CIFAR-10-LT with `\\rho=100`\n```bash\npython pretrain_rot.py --dataset cifar10 --imb_factor 0.01\n```\n\nTo perform MoCo SSP on ImageNet-LT\n```bash\npython pretrain_moco.py --dataset imagenet --data \u003Cdata_path>\n```\n\n#### Network training with SSP models\nTrain on CIFAR-10-LT with `\\rho=100`\n```bash\npython train.py --dataset cifar10 --imb_factor 0.01 --pretrained_model \u003Cpath_to_ssp_model>\n```\n\nTrain on ImageNet-LT \u002F iNaturalist 2018\n```bash\npython -m imagenet_inat.main --cfg \u003Cpath_to_ssp_config> --model_dir \u003Cpath_to_ssp_model>\n```\n\n\n## Results and Models\n\nAll related data and checkpoints can be found via [this link](https:\u002F\u002Fdrive.google.com\u002Fdrive\u002Ffolders\u002F1VbdqYZ0sqyApM6AdmCgsZd46TsPlQcpT?usp=sharing). Individual results and checkpoints are detailed as follows.\n\n### Semi-Supervised Imbalanced Learning\n#### CIFAR-10-LT\n|   Model   | Top-1 Error |   Download    |\n| --------- |:-----------:|:-------------:|\n|CE + D_U@5x (`\\rho=50` and `\\rho_U=1`) |  16.79 | [ResNet-32](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F1gIzvqSBf87LA_NGi0Ov488OVBAlCsAhr\u002Fview?usp=sharing) |\n|CE + D_U@5x (`\\rho=50` and `\\rho_U=25`) |  16.88 | [ResNet-32](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F18ACYaEvIOF_neoDCoVOorQGqcv8-qmyd\u002Fview?usp=sharing) |\n|CE + D_U@5x (`\\rho=50` and `\\rho_U=50`) | 18.36 | [ResNet-32](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F17eEb_USf2fgDq6vURzi2q3tda8DvTmzG\u002Fview?usp=sharing) |\n|CE + D_U@5x (`\\rho=50` and `\\rho_U=100`) | 19.94  | [ResNet-32](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F19eVBcGcA3eoD9ayxCw09Gn1wtWsESSwS\u002Fview?usp=sharing) |\n\n#### SVHN-LT\n|   Model   | Top-1 Error |   Download    |\n| --------- |:-----------:|:-------------:|\n|CE + D_U@5x (`\\rho=50` and `\\rho_U=1`) |  13.07 | [ResNet-32](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F1i4baS9QT8atmiF1QZwIDua4mSoRUQb_E\u002Fview?usp=sharing) |\n|CE + D_U@5x (`\\rho=50` and `\\rho_U=25`) |  13.36 | [ResNet-32](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F1r_fkQtZYUYMxP9Angpjd_bDPY4iy31IQ\u002Fview?usp=sharing) |\n|CE + D_U@5x (`\\rho=50` and `\\rho_U=50`) | 13.16 | [ResNet-32](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F1sBkqxI2GiStMWUjKGAmmXLLgT0bJTb0T\u002Fview?usp=sharing) |\n|CE + D_U@5x (`\\rho=50` and `\\rho_U=100`) | 14.54 | [ResNet-32](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F1HGNk-tc3iy1cxbTlYGf8nboMZYIUN1nQ\u002Fview?usp=sharing) |\n\n#### Test a pretrained checkpoint\n```bash\npython train_semi.py --dataset cifar10 --resume \u003Cckpt-path> -e\n```\n\n### Self-Supervised Imbalanced Learning\n#### CIFAR-10-LT\n- Self-supervised pre-trained models (Rotation)\n\n  |  Dataset Setting  |  `\\rho=100` | `\\rho=50` | `\\rho=10` |\n  | ---------- |:-----------:|:-----------:|:-----------:|\n  | __Download__ | [ResNet-32](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F1FVjuKvBrNBFrSRRLDmYpOsTZADsdDKfx\u002Fview?usp=sharing) |  [ResNet-32](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F1HnJNTmWOS8Js6TjpFKmCcj87U3BvldqI\u002Fview?usp=sharing) | [ResNet-32](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F1YXVlHDwVNPRHpbEUxEHCzVp_4lToX0N9\u002Fview?usp=sharing) |\n\n- Final models (200 epochs)\n\n  |   Model   |     `\\rho`    | Top-1 Error |   Download    |\n  | --------- |:-------------:|:-----------:|:-------------:|\n  |CE(Uniform) + SSP| 10 |  12.28 | [ResNet-32](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F1sk6j_QWwiCpbbulMOCnZAgDUxv28S85F\u002Fview?usp=sharing) |\n  |CE(Uniform) + SSP| 50 |  21.80 | [ResNet-32](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F1CnWBII1IqgtC-rXlk2NzMVwDJUPP6dxE\u002Fview?usp=sharing) |\n  |CE(Uniform) + SSP| 100 |  26.50 | [ResNet-32](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F1hhc5P3cLWHYkCmKrk1Zvl5XwXsegpdQS\u002Fview?usp=sharing) |\n  |CE(Balanced) + SSP| 10 |  11.57 | [ResNet-32](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F1wSG3lk2u1n5WYb4iY0D8EMG4ERhWxJN1\u002Fview?usp=sharing) |\n  |CE(Balanced) + SSP| 50 |  19.60 | [ResNet-32](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F1EoyWw9sXucCyUdOQ1m6QLc6jDr2VceCG\u002Fview?usp=sharing) |\n  |CE(Balanced) + SSP| 100 |  23.47 | [ResNet-32](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F1Hkle1XEjzNrRRYbRRN-3aZkVlauwU161\u002Fview?usp=sharing) |\n\n#### CIFAR-100-LT\n- Self-supervised pre-trained models (Rotation)\n\n  |  Dataset Setting  |  `\\rho=100` | `\\rho=50` | `\\rho=10` |\n  | ---------- |:-----------:|:-----------:|:-----------:|\n  | __Download__ | [ResNet-32](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F1gTlVOG9Wf3m6mcjvsjaqYFt6NsyIaWGn\u002Fview?usp=sharing) |  [ResNet-32](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F1Rvhdscw2ZfDRAsCQ3a_A-o_Ay3UEeu3c\u002Fview?usp=sharing) | [ResNet-32](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F1iOCguSnCXJrFDLe1mmmnK39dnLPcDv4Y\u002Fview?usp=sharing) |\n  \n- Final models (200 epochs)\n\n  |   Model   |     `\\rho`    | Top-1 Error |   Download    |\n  | --------- |:-------------:|:-----------:|:-------------:|\n  |CE(Uniform) + SSP| 10 |  42.93 | [ResNet-32](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F1aXwZ5Zm2LGUYJuzL9AbCD4a0G3clx-0O\u002Fview?usp=sharing) |\n  |CE(Uniform) + SSP| 50 |  54.96 | [ResNet-32](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F11I60p5tNEf1KOXI2CnqMP7oph540ufjC\u002Fview?usp=sharing) |\n  |CE(Uniform) + SSP| 100 |  59.60 | [ResNet-32](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F1I5Ro0Jdw30fT28XPzV4jZYbg0htlukfw\u002Fview?usp=sharing) |\n  |CE(Balanced) + SSP| 10 |  41.94 | [ResNet-32](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F1URi-XE4Ua9Eahl1mzK4sTvolOdabaJ4q\u002Fview?usp=sharing) |\n  |CE(Balanced) + SSP| 50 |  52.91 | [ResNet-32](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F1HXUYWDnywJ9CSSvwWIKMOlX2u5LNOl_w\u002Fview?usp=sharing) |\n  |CE(Balanced) + SSP| 100 |  56.94 | [ResNet-32](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F1Fsg8wWpEScNXzdBavfs8Kxl3efAz-MAP\u002Fview?usp=sharing) |\n\n#### ImageNet-LT\n- Self-supervised pre-trained models (MoCo) \u003Cbr>\n  [[ResNet-50](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F1XritMl3dYa9iW-TomaKU1XLQJVqgopMz\u002Fview?usp=sharing)]\n\n- Final models (90 epochs)\n\n  |   Model   | Top-1 Error |   Download    |\n  | --------- |:-----------:|:-------------:|\n  |CE(Uniform) + SSP |  54.4 | [ResNet-50](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F13Bxu4yzSoZAzh_q--HtrFTRA4K2WiU8W\u002Fview?usp=sharing) |\n  |CE(Balanced) + SSP |  52.4 | [ResNet-50](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F1a4QTeCWrQq3Sow2raYl_ASzSDTBq48xs\u002Fview?usp=sharing) |\n  |cRT + SSP |  48.7 | [ResNet-50](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F1LAe-2gGZ4dVKy76wIpT-FbBR-kuyCfJ4\u002Fview?usp=sharing) |\n\n#### iNaturalist 2018\n- Self-supervised pre-trained models (MoCo) \u003Cbr>\n  [[ResNet-50](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F1uY1KyofLf5Wp-fKU9lA47G7MXZkmI8rQ\u002Fview?usp=sharing)]\n\n- Final models (90 epochs)\n\n  |   Model   | Top-1 Error |   Download    |\n  | --------- |:-----------:|:-------------:|\n  |CE(Uniform) + SSP |  35.6 | [ResNet-50](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F1Ry0afHMGkx6sh7Z8sM9zUtc2VclTCF9h\u002Fview?usp=sharing) |\n  |CE(Balanced) + SSP |  34.1 | ResNet-50 |\n  |cRT + SSP |  31.9 | [ResNet-50](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F1bAUFns0CJJJi2-6MpvXCOmRlcciv1ef3\u002Fview?usp=sharing) |\n\n#### Test a pretrained checkpoint\n```bash\n# test on CIFAR-10 \u002F CIFAR-100\npython train.py --dataset cifar10 --resume \u003Cckpt-path> -e\n\n# test on ImageNet-LT \u002F iNaturalist 2018\npython -m imagenet_inat.main --cfg \u003Cpath_to_ssp_config> --model_dir \u003Cpath_to_model> --test\n```\n\n\n## Acknowledgements\nThis code is partly based on the open-source implementations from the following sources:\n[OpenLongTailRecognition](https:\u002F\u002Fgithub.com\u002Fzhmiao\u002FOpenLongTailRecognition-OLTR), [classifier-balancing](https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002Fclassifier-balancing), [LDAM-DRW](https:\u002F\u002Fgithub.com\u002Fkaidic\u002FLDAM-DRW), [MoCo](https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002Fmoco), and [semisup-adv](https:\u002F\u002Fgithub.com\u002Fyaircarmon\u002Fsemisup-adv).\n\n\n## Contact\nIf you have any questions, feel free to contact us through email (yuzhe@mit.edu & zhixu@mit.edu) or Github issues. Enjoy!\n","# 重新思考标签在改善类别不平衡学习中的价值\n\n本仓库包含论文的实现代码：  \n__重新思考标签在改善类别不平衡学习中的价值__ \u003Cbr>\n[杨宇哲](http:\u002F\u002Fwww.mit.edu\u002F~yuzhe\u002F) 和 [许志](http:\u002F\u002Fwww.mit.edu\u002F~zhixu\u002F) \u003Cbr>\n_第34届神经信息处理系统大会（NeurIPS），2020年_ \u003Cbr>\n[[官网](https:\u002F\u002Fwww.mit.edu\u002F~yuzhe\u002Fimbalanced-semi-self.html)] [[arXiv](https:\u002F\u002Farxiv.org\u002Fabs\u002F2006.07529)] [[论文](https:\u002F\u002Farxiv.org\u002Fpdf\u002F2006.07529.pdf)] [[幻灯片](https:\u002F\u002Fwww.mit.edu\u002F~yuzhe\u002Fstatic\u002Fimbalance_nips20_slides.pdf)] [[视频](https:\u002F\u002Fyoutu.be\u002FXltXZ3OZvyI)]\n\n如果您觉得这段代码或这一想法有用，请考虑引用我们的工作：\n```bib\n@inproceedings{yang2020rethinking,\n  title={Rethinking the Value of Labels for Improving Class-Imbalanced Learning},\n  author={Yang, Yuzhe and Xu, Zhi},\n  booktitle={Conference on Neural Information Processing Systems (NeurIPS)},\n  year={2020}\n}\n```\n\n\n## 概述\n在本工作中，我们从理论和实验两方面证明：无论有标签\u002F无标签数据的不平衡程度如何，以及采用何种基础训练方法，__半监督学习__（利用未标注数据）和__自监督预训练__（先通过自监督任务对模型进行预训练）都能显著提升在不平衡（长尾）数据集上的性能。\n\n__半监督不平衡学习__：  \n利用未标注数据有助于形成更清晰的类别边界，从而实现更好的类别分离，尤其对于尾部类别效果显著。  \n![semi](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FYyzHarry_imbalanced-semi-self_readme_616b52cce483.png)\n\n__自监督不平衡学习__：  \n自监督预训练（SSP）有助于缓解测试阶段尾部类别的泄露问题，进而学习到更好的边界和表征。  \n![self](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FYyzHarry_imbalanced-semi-self_readme_a7fdf1d49db2.png)\n\n\n## 安装\n\n#### 前置条件\n- 下载 [CIFAR](https:\u002F\u002Fwww.cs.toronto.edu\u002F~kriz\u002Fcifar.html) 和 [SVHN](http:\u002F\u002Fufldl.stanford.edu\u002Fhousenumbers\u002F) 数据集，并将其放置在您的 `data_path` 中。原始数据将由 [`imbalance_cifar.py`](dataset\u002Fimbalance_cifar.py) 和 [`imbalance_svhn.py`](dataset\u002Fimbalance_svhn.py) 转换。\n- 下载 [ImageNet](http:\u002F\u002Fimage-net.org\u002Fdownload) 和 [iNaturalist 2018](https:\u002F\u002Fgithub.com\u002Fvisipedia\u002Finat_comp\u002Ftree\u002Fmaster\u002F2018) 数据集，并将其放置在您的 `data_path` 中。长尾版本将使用 `imagenet_inat\u002Fdata\u002F` 目录下相应子文件夹中的 train\u002Fval 切分文件（.txt 文件）创建。\n- 根据 ImageNet-LT 和 iNaturalist 2018 的情况，相应地修改 [`imagenet_inat\u002Fmain.py`](.\u002Fimagenet_inat\u002Fmain.py) 中的 `data_root`。\n\n#### 依赖项\n- PyTorch (>= 1.2，已在 1.4 上测试)\n- yaml\n- scikit-learn\n- TensorboardX\n\n\n## 代码概览\n\n#### 主要文件\n- [`train_semi.py`](train_semi.py)：在 CIFAR-LT \u002F SVHN-LT 上使用额外的未标注数据训练模型\n- [`train.py`](train.py)：在 CIFAR-LT \u002F SVHN-LT 上使用（或不使用）SSP 训练模型\n- [`imagenet_inat\u002Fmain.py`](.\u002Fimagenet_inat\u002Fmain.py)：在 ImageNet-LT \u002F iNaturalist 2018 上使用（或不使用）SSP 训练模型\n- [`pretrain_rot.py`](pretrain_rot.py) 和 [`pretrain_moco.py`](pretrain_moco.py)：分别使用 [旋转预测](https:\u002F\u002Farxiv.org\u002Fpdf\u002F1803.07728.pdf) 或 [MoCo](https:\u002F\u002Farxiv.org\u002Fabs\u002F1911.05722) 进行自监督预训练\n\n#### 主要参数\n- `--dataset`：所选长尾数据集的名称\n- `--imb_factor`：不平衡因子（即论文中不平衡比 `\\rho` 的倒数）\n- `--imb_factor_unlabel`：未标注数据的不平衡因子（即未标注不平衡比 `\\rho_U` 的倒数）\n- `--pretrained_model`：自监督预训练模型的路径\n- `--resume`：恢复检查点的路径（也用于评估）\n\n\n## 快速入门\n\n### 半监督不平衡学习\n\n#### 未标注数据的获取\n\n__CIFAR-10-LT__：CIFAR-10 的未标注数据是按照 [这个仓库](https:\u002F\u002Fgithub.com\u002Fyaircarmon\u002Fsemisup-adv) 使用 [80M TinyImages](https:\u002F\u002Fpeople.csail.mit.edu\u002Ftorralba\u002Fpublications\u002F80millionImages.pdf) 准备的。简而言之，首先训练一个数据源模型来区分 CIFAR-10 的各个类别以及“非-CIFAR”类别。然后根据每个类别的预测置信度对图像进行排序，并据此构建未标注（不平衡）数据集。请使用以下链接下载准备好的未标注数据，并将其放置在您的 `data_path` 中：\n- [来自 TinyImages 的 CIFAR-10-LT 未标注数据集](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F1SODQBUvv2qycDivBb4nhHaCk3TMzaVM4\u002Fview?usp=sharing)\n\n__SVHN-LT__：由于其自身数据集中包含额外的 531.1K 个样本（已标注），这些样本直接被用来模拟未标注数据集。\n\n需要注意的是，未标注数据中的类别不平衡也被考虑在内，这由 `--imb_factor_unlabel` 参数控制（即论文中的 `\\rho_U`）。详细信息请参阅 [`imbalance_cifar.py`](dataset\u002Fimbalance_cifar.py) 和 [`imbalance_svhn.py`](dataset\u002Fimbalance_svhn.py)。\n\n#### 基于伪标签的半监督学习\n\n要进行伪标签（自训练），首先需要在原始的不平衡数据集上训练一个基础分类器。然后使用该基础分类器生成伪标签：\n```bash\npython gen_pseudolabels.py --resume \u003Cckpt-path> --data_dir \u003Cdata_path> --output_dir \u003Coutput_path> --output_filename \u003Csave_name>\n```\n我们提供了 CIFAR-10-LT 和 SVHN-LT 在 `\\rho=50` 时的伪标签文件，这些文件是基于使用标准交叉熵（CE）损失训练的基础模型生成的：\n- [CIFAR-10-LT 在 `\\rho=50` 时生成的伪标签](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F1Z4rwaqzjNoNQ27sofx1aDl8OLH-etoyP\u002Fview?usp=sharing)\n- [SVHN-LT 在 `\\rho=50` 时生成的伪标签](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F19VeMQ07unVq3hIjLN5LiXWZNTI4CiN5F\u002Fview?usp=sharing)\n\n例如，在 CIFAR-10-LT 上使用未标注数据进行训练，假设 `\\rho=50` 且 `\\rho_U=50`：\n```bash\npython train_semi.py --dataset cifar10 --imb_factor 0.02 --imb_factor_unlabel 0.02\n```\n\n### 自监督不平衡学习\n\n#### 自监督预训练（SSP）\n要在 CIFAR-10-LT 上进行旋转 SSP，且 `\\rho=100`：\n```bash\npython pretrain_rot.py --dataset cifar10 --imb_factor 0.01\n```\n\n要在 ImageNet-LT 上进行 MoCo SSP：\n```bash\npython pretrain_moco.py --dataset imagenet --data \u003Cdata_path>\n```\n\n#### 使用 SSP 模型进行网络训练\n在 CIFAR-10-LT 上训练，且 `\\rho=100`：\n```bash\npython train.py --dataset cifar10 --imb_factor 0.01 --pretrained_model \u003Cpath_to_ssp_model>\n```\n\n在 ImageNet-LT \u002F iNaturalist 2018 上训练：\n```bash\npython -m imagenet_inat.main --cfg \u003Cpath_to_ssp_config> --model_dir \u003Cpath_to_ssp_model>\n```\n\n\n## 结果与模型\n所有相关数据和检查点都可以通过 [此链接](https:\u002F\u002Fdrive.google.com\u002Fdrive\u002Ffolders\u002F1VbdqYZ0sqyApM6AdmCgsZd46TsPlQcpT?usp=sharing) 查看。具体的结果和检查点如下所示。\n\n### 半监督不平衡学习\n#### CIFAR-10-LT\n|   模型   | Top-1 错误率 |   下载    |\n| --------- |:-----------:|:-------------:|\n|CE + D_U@5x (`\\rho=50` 和 `\\rho_U=1`) |  16.79 | [ResNet-32](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F1gIzvqSBf87LA_NGi0Ov488OVBAlCsAhr\u002Fview?usp=sharing) |\n|CE + D_U@5x (`\\rho=50` 和 `\\rho_U=25`) |  16.88 | [ResNet-32](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F18ACYaEvIOF_neoDCoVOorQGqcv8-qmyd\u002Fview?usp=sharing) |\n|CE + D_U@5x (`\\rho=50` 和 `\\rho_U=50`) | 18.36 | [ResNet-32](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F17eEb_USf2fgDq6vURzi2q3tda8DvTmzG\u002Fview?usp=sharing) |\n|CE + D_U@5x (`\\rho=50` 和 `\\rho_U=100`) | 19.94  | [ResNet-32](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F19eVBcGcA3eoD9ayxCw09Gn1wtWsESSwS\u002Fview?usp=sharing) |\n\n#### SVHN-LT\n|   模型   | Top-1 错误率 |   下载    |\n| --------- |:-----------:|:-------------:|\n|CE + D_U@5x (`\\rho=50` 和 `\\rho_U=1`) |  13.07 | [ResNet-32](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F1i4baS9QT8atmiF1QZwIDua4mSoRUQb_E\u002Fview?usp=sharing) |\n|CE + D_U@5x (`\\rho=50` 和 `\\rho_U=25`) |  13.36 | [ResNet-32](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F1r_fkQtZYUYMxP9Angpjd_bDPY4iy31IQ\u002Fview?usp=sharing) |\n|CE + D_U@5x (`\\rho=50` 和 `\\rho_U=50`) | 13.16 | [ResNet-32](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F1sBkqxI2GiStMWUjKGAmmXLLgT0bJTb0T\u002Fview?usp=sharing) |\n|CE + D_U@5x (`\\rho=50` 和 `\\rho_U=100`) | 14.54 | [ResNet-32](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F1HGNk-tc3iy1cxbTlYGf8nboMZYIUN1nQ\u002Fview?usp=sharing) |\n\n#### 测试预训练检查点\n```bash\npython train_semi.py --dataset cifar10 --resume \u003Cckpt-path> -e\n```\n\n### 自监督不平衡学习\n#### CIFAR-10-LT\n- 自监督预训练模型（旋转）\n\n  |  数据集设置  |  `\\rho=100` | `\\rho=50` | `\\rho=10` |\n  | ---------- |:-----------:|:-----------:|:-----------:|\n  | __下载__ | [ResNet-32](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F1FVjuKvBrNBFrSRRLDmYpOsTZADsdDKfx\u002Fview?usp=sharing) |  [ResNet-32](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F1HnJNTmWOS8Js6TjpFKmCcj87U3BvldqI\u002Fview?usp=sharing) | [ResNet-32](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F1YXVlHDwVNPRHpbEUxEHCzVp_4lToX0N9\u002Fview?usp=sharing) |\n\n- 最终模型（200轮）\n\n  |   模型   |     `\\rho`    | Top-1 错误率 |   下载    |\n  | --------- |:-------------:|:-----------:|:-------------:|\n  |CE(均匀) + SSP| 10 |  12.28 | [ResNet-32](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F1sk6j_QWwiCpbbulMOCnZAgDUxv28S85F\u002Fview?usp=sharing) |\n  |CE(均匀) + SSP| 50 |  21.80 | [ResNet-32](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F1CnWBII1IqgtC-rXlk2NzMVwDJUPP6dxE\u002Fview?usp=sharing) |\n  |CE(均匀) + SSP| 100 |  26.50 | [ResNet-32](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F1hhc5P3cLWHYkCmKrk1Zvl5XwXsegpdQS\u002Fview?usp=sharing) |\n  |CE(平衡) + SSP| 10 |  11.57 | [ResNet-32](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F1wSG3lk2u1n5WYb4iY0D8EMG4ERhWxJN1\u002Fview?usp=sharing) |\n  |CE(平衡) + SSP| 50 |  19.60 | [ResNet-32](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F1EoyWw9sXucCyUdOQ1m6QLc6jDr2VceCG\u002Fview?usp=sharing) |\n  |CE(平衡) + SSP| 100 |  23.47 | [ResNet-32](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F1Hkle1XEjzNrRRYbRRN-3aZkVlauwU161\u002Fview?usp=sharing) |\n\n#### CIFAR-100-LT\n- 自监督预训练模型（旋转）\n\n  |  数据集设置  |  `\\rho=100` | `\\rho=50` | `\\rho=10` |\n  | ---------- |:-----------:|:-----------:|:-----------:|\n  | __下载__ | [ResNet-32](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F1gTlVOG9Wf3m6mcjvsjaqYFt6NsyIaWGn\u002Fview?usp=sharing) |  [ResNet-32](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F1Rvhdscw2ZfDRAsCQ3a_A-o_Ay3UEeu3c\u002Fview?usp=sharing) | [ResNet-32](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F1iOCguSnCXJrFDLe1mmmnK39dnLPcDv4Y\u002Fview?usp=sharing) |\n  \n- 最终模型（200轮）\n\n  |   模型   |     `\\rho`    | Top-1 错误率 |   下载    |\n  | --------- |:-------------:|:-----------:|:-------------:|\n  |CE(均匀) + SSP| 10 |  42.93 | [ResNet-32](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F1aXwZ5Zm2LGUYJuzL9AbCD4a0G3clx-0O\u002Fview?usp=sharing) |\n  |CE(均匀) + SSP| 50 |  54.96 | [ResNet-32](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F11I60p5tNEf1KOXI2CnqMP7oph540ufjC\u002Fview?usp=sharing) |\n  |CE(均匀) + SSP| 100 |  59.60 | [ResNet-32](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F1I5Ro0Jdw30fT28XPzV4jZYbg0htlukfw\u002Fview?usp=sharing) |\n  |CE(平衡) + SSP| 10 |  41.94 | [ResNet-32](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F1URi-XE4Ua9Eahl1mzK4sTvolOdabaJ4q\u002Fview?usp=sharing) |\n  |CE(平衡) + SSP| 50 |  52.91 | [ResNet-32](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F1HXUYWDnywJ9CSSvwWIKMOlX2u5LNOl_w\u002Fview?usp=sharing) |\n  |CE(平衡) + SSP| 100 |  56.94 | [ResNet-32](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F1Fsg8wWpEScNXzdBavfs8Kxl3efAz-MAP\u002Fview?usp=sharing) |\n\n#### ImageNet-LT\n- 自监督预训练模型（MoCo） \u003Cbr>\n  [[ResNet-50](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F1XritMl3dYa9iW-TomaKU1XLQJVqgopMz\u002Fview?usp=sharing)]\n\n- 最终模型（90轮）\n\n  |   模型   | Top-1 错误率 |   下载    |\n  | --------- |:-----------:|:-------------:|\n  |CE(均匀) + SSP |  54.4 | [ResNet-50](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F13Bxu4yzSoZAzh_q--HtrFTRA4K2WiU8W\u002Fview?usp=sharing) |\n  |CE(平衡) + SSP |  52.4 | [ResNet-50](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F1a4QTeCWrQq3Sow2raYl_ASzSDTBq48xs\u002Fview?usp=sharing) |\n  |cRT + SSP |  48.7 | [ResNet-50](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F1LAe-2gGZ4dVKy76wIpT-FbBR-kuyCfJ4\u002Fview?usp=sharing) |\n\n#### iNaturalist 2018\n- 自监督预训练模型（MoCo） \u003Cbr>\n  [[ResNet-50](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F1uY1KyofLf5Wp-fKU9lA47G7MXZkmI8rQ\u002Fview?usp=sharing)]\n\n- 最终模型（90轮）\n\n  |   模型   | Top-1 错误率 |   下载    |\n  | --------- |:-----------:|:-------------:|\n  |CE(均匀) + SSP |  35.6 | [ResNet-50](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F1Ry0afHMGkx6sh7Z8sM9zUtc2VclTCF9h\u002Fview?usp=sharing) |\n  |CE(平衡) + SSP |  34.1 | ResNet-50 |\n  |cRT + SSP |  31.9 | [ResNet-50](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F1bAUFns0CJJJi2-6MpvXCOmRlcciv1ef3\u002Fview?usp=sharing) |\n\n#### 测试预训练检查点\n```bash\n# 在CIFAR-10 \u002F CIFAR-100 上测试\npython train.py --dataset cifar10 --resume \u003Cckpt-path> -e\n\n# 在ImageNet-LT \u002F iNaturalist 2018 上测试\npython -m imagenet_inat.main --cfg \u003Cpath_to_ssp_config> --model_dir \u003Cpath_to_model> --test\n```\n\n\n## 致谢\n本代码部分基于以下开源项目的实现：\n[OpenLongTailRecognition](https:\u002F\u002Fgithub.com\u002Fzhmiao\u002FOpenLongTailRecognition-OLTR), [classifier-balancing](https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002Fclassifier-balancing), [LDAM-DRW](https:\u002F\u002Fgithub.com\u002Fkaidic\u002FLDAM-DRW), [MoCo](https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002Fmoco)，以及 [semisup-adv](https:\u002F\u002Fgithub.com\u002Fyaircarmon\u002Fsemisup-adv)。\n\n\n## 联系方式\n如有任何问题，请随时通过电子邮件（yuzhe@mit.edu & zhixu@mit.edu）或GitHub Issues与我们联系。祝您使用愉快！","# imbalanced-semi-self 快速上手指南\n\n本指南旨在帮助开发者快速部署并使用 `imbalanced-semi-self` 工具，该工具实现了 NeurIPS 2020 论文《Rethinking the Value of Labels for Improving Class-Imbalanced Learning》中的算法，用于解决长尾分布（类别不平衡）下的半监督学习与自监督预训练问题。\n\n## 环境准备\n\n### 系统要求\n- **操作系统**: Linux (推荐) 或 macOS\n- **Python**: 3.6+\n- **GPU**: 支持 CUDA 的 NVIDIA 显卡（可选，但强烈建议用于加速训练）\n\n### 前置依赖\n请确保已安装以下核心库：\n- **PyTorch**: 版本 >= 1.2 (已在 1.4 上测试通过)\n- **yaml**: 用于配置文件解析\n- **scikit-learn**: 用于数据处理与评估\n- **TensorboardX**: 用于可视化训练过程\n\n> **提示**：国内用户建议使用清华源或阿里源加速 PyTorch 及相关包的安装。\n> ```bash\n> pip install torch torchvision -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n> pip install pyyaml scikit-learn tensorboardx -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n> ```\n\n## 安装步骤\n\n1. **克隆仓库**\n   ```bash\n   git clone https:\u002F\u002Fgithub.com\u002FYyzHarry\u002Fimbalanced-semi-self.git\n   cd imbalanced-semi-self\n   ```\n\n2. **准备数据集**\n   本项目支持 CIFAR, SVHN, ImageNet-LT 和 iNaturalist 2018。需将下载的数据集放置在指定目录，并通过脚本转换为不平衡版本。\n\n   - **CIFAR \u002F SVHN**:\n     下载原始数据集后，运行以下脚本生成不平衡版本：\n     ```bash\n     # 示例：处理 CIFAR 数据集\n     python dataset\u002Fimbalance_cifar.py\n     # 示例：处理 SVHN 数据集\n     python dataset\u002Fimbalance_svhn.py\n     ```\n     *注：对于半监督学习所需的无标签数据（如 CIFAR-10-LT），需从提供的 [Google Drive 链接](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F1SODQBUvv2qycDivBb4nhHaCk3TMzaVM4\u002Fview?usp=sharing) 下载预处理好的文件并放入 `data_path`。*\n\n   - **ImageNet-LT \u002F iNaturalist 2018**:\n     下载原始数据集，并根据 `imagenet_inat\u002Fdata\u002F` 子文件夹中的 `.txt` 分割文件构建长尾版本。\n     *注意：需修改 `imagenet_inat\u002Fmain.py` 中的 `data_root` 变量指向你的数据存放路径。*\n\n## 基本使用\n\n本工具主要包含两种核心模式：**半监督不平衡学习** 和 **自监督不平衡学习**。以下提供最简化的运行示例。\n\n### 场景一：半监督不平衡学习 (Semi-Supervised)\n利用无标签数据提升长尾数据集（如 CIFAR-10-LT）的分类性能。\n\n1. **生成伪标签** (如果尚未准备好伪标签文件)\n   使用基础模型为无标签数据生成伪标签：\n   ```bash\n   python gen_pseudolabels.py --resume \u003Cckpt-path> --data_dir \u003Cdata_path> --output_dir \u003Coutput_path> --output_filename \u003Csave_name>\n   ```\n\n2. **开始训练**\n   以 CIFAR-10-LT 为例，设置不平衡因子 $\\rho=50$ (`--imb_factor 0.02`) 和无标签数据不平衡因子 $\\rho_U=50$ (`--imb_factor_unlabel 0.02`)：\n   ```bash\n   python train_semi.py --dataset cifar10 --imb_factor 0.02 --imb_factor_unlabel 0.02\n   ```\n\n### 场景二：自监督不平衡学习 (Self-Supervised)\n先进行自监督预训练（SSP），再在长尾数据上进行微调。\n\n1. **自监督预训练**\n   使用旋转预测（Rotation Prediction）方法在 CIFAR-10-LT ($\\rho=100$) 上进行预训练：\n   ```bash\n   python pretrain_rot.py --dataset cifar10 --imb_factor 0.01\n   ```\n   *或者在 ImageNet-LT 上使用 MoCo 进行预训练：*\n   ```bash\n   python pretrain_moco.py --dataset imagenet --data \u003Cdata_path>\n   ```\n\n2. **加载预训练模型进行微调**\n   使用上一步生成的预训练模型权重进行正式训练：\n   ```bash\n   python train.py --dataset cifar10 --imb_factor 0.01 --pretrained_model \u003Cpath_to_ssp_model>\n   ```\n\n   *针对 ImageNet-LT 或 iNaturalist 2018 的微调命令：*\n   ```bash\n   python -m imagenet_inat.main --cfg \u003Cpath_to_ssp_config> --model_dir \u003Cpath_to_ssp_model>\n   ```\n\n### 参数说明\n- `--dataset`: 选择数据集名称 (如 `cifar10`, `svhn`, `imagenet`)。\n- `--imb_factor`: 不平衡因子（即论文中不平衡比率 $\\rho$ 的倒数）。值越小，长尾效应越明显。\n- `--pretrained_model`: 指定自监督预训练模型的路径。\n- `--resume`: 指定断点续训或评估用的检查点路径。","某医疗影像初创团队正在构建一个罕见皮肤病变识别系统，面临训练数据中常见病灶样本充足，但关键罕见病灶样本极度稀缺的长尾分布难题。\n\n### 没有 imbalanced-semi-self 时\n- **尾部类别识别率极低**：模型严重偏向常见病灶，对罕见病变的召回率不足 30%，导致漏诊风险高。\n- **决策边界模糊**：由于缺乏足够的正样本，模型无法在特征空间中为罕见病灶划定清晰的分类边界，容易与相似常见病灶混淆。\n- **标注成本高昂**：为了提升效果，团队被迫投入大量资金聘请专家标注更多罕见样本，但数据收集周期长且难以规模化。\n- **泛化能力差**：在测试集中，一旦遇到稍有变化的罕见病灶图像，模型表现大幅波动，鲁棒性不足。\n\n### 使用 imbalanced-semi-self 后\n- **显著提升尾部性能**：利用大量未标注的临床影像数据进行半监督学习，罕见病灶的识别准确率提升了 25% 以上。\n- **特征表示更清晰**：通过自监督预训练（如旋转预测或 MoCo），模型学到了更强的通用特征，有效缓解了尾部类别的特征泄露问题，分类边界更加明确。\n- **降低标注依赖**：无需额外标注昂贵数据，直接挖掘现有未标注数据的价值，大幅降低了数据准备成本和项目启动门槛。\n- **鲁棒性增强**：在不同分布的测试集上，模型对罕见病灶的判定更加稳定，减少了因样本稀缺导致的过拟合现象。\n\nimbalanced-semi-self 通过巧妙结合未标注数据与自监督预训练，以低成本解决了长尾分布下“少数类”难以学习的核心痛点，让小样本场景下的 AI 落地成为可能。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FYyzHarry_imbalanced-semi-self_616b52cc.png","YyzHarry","Yuzhe Yang","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002FYyzHarry_fd28f518.jpg","Prof @ UCLA. PhD @ MIT.\r\n",null,"yang_yuzhe","https:\u002F\u002Fwww.cs.ucla.edu\u002F~yuzhe\u002F","https:\u002F\u002Fgithub.com\u002FYyzHarry",[86],{"name":87,"color":88,"percentage":89},"Python","#3572A5",100,758,119,"2026-04-10T04:56:15","MIT","未说明","需要 NVIDIA GPU（用于运行 PyTorch 及 MoCo\u002FRotation 自监督预训练），具体型号和显存大小未说明，但 ImageNet-LT 等大数据集训练通常建议 16GB+ 显存","未说明（处理 80M TinyImages 或 ImageNet 数据集建议 32GB+）",{"notes":98,"python":99,"dependencies":100},"该项目主要研究类别不平衡学习，需手动下载并准备 CIFAR、SVHN、ImageNet 及 iNaturalist 2018 数据集。对于 CIFAR-10-LT 的半监督学习，需额外下载基于 80M TinyImages 构建的无标签数据集或提供的伪标签文件。代码支持两种自监督预训练方法：Rotation Prediction 和 MoCo。ImageNet 和 iNaturalist 的长尾版本需通过提供的脚本和分割文件生成。","未说明（兼容 PyTorch 1.2+，通常对应 Python 3.6+）",[101,102,103,104],"torch>=1.2","pyyaml","scikit-learn","tensorboardX",[16],[107,108,109,110,111,112,113,114,115,116,117],"imbalanced-learning","imbalanced-classification","semi-supervised-learning","unlabeled-data","self-supervised-learning","long-tail","long-tailed-recognition","class-imbalance","neurips","neurips-2020","imbalanced-data","2026-03-27T02:49:30.150509","2026-04-20T16:52:54.187310",[121,126,131,136,141,146,150],{"id":122,"question_zh":123,"answer_zh":124,"source_url":125},45017,"为什么在 CIFAR-10 上复现时，自监督预训练（SSP）的效果反而不如基线模型？","首先请确保使用了正确的批量大小（Batch Size），CIFAR-10 实验的默认值应为 128（代码库已更新修复了不一致问题）。其次，建议直接下载并使用作者提供的旋转预训练检查点（Rotation checkpoint，准确率约 83.07%）进行测试，以排除本地预训练过程的差异。如果问题依旧，请检查预训练权重是否正确加载。作者在相同设置下使用提供的检查点配合 DRW 策略取得了 77.45% 的准确率，高于论文报告值。","https:\u002F\u002Fgithub.com\u002FYyzHarry\u002Fimbalanced-semi-self\u002Fissues\u002F5",{"id":127,"question_zh":128,"answer_zh":129,"source_url":130},45018,"如何在自己的数据集上应用半监督学习和自监督学习？","对于半监督学习：只需收集相关的未标记数据。研究表明，只要数据相关性高，即使未标记数据本身也是高度不平衡的，仍能提升效果。可以使用自训练（self-training）或其他半监督技术（如 VAT\u002FMT）。对于自监督学习：根据数据格式选择合适的自监督学习方法进行预训练（此时不使用不平衡标签）。预训练完成后，再使用任何基础训练方法进行有监督训练。这种方法能一致地提升结果，且不受基础训练技术的限制。","https:\u002F\u002Fgithub.com\u002FYyzHarry\u002Fimbalanced-semi-self\u002Fissues\u002F6",{"id":132,"question_zh":133,"answer_zh":134,"source_url":135},45019,"如何生成 README 中展示的 t-SNE 可视化图像？","作者未保存单独的可视化脚本文件，但实现过程很简单：首先保存模型提取的特征向量，然后使用 scikit-learn 库中的 t-SNE 工具对这些特征进行降维和可视化。参考链接：https:\u002F\u002Fscikit-learn.org\u002Fstable\u002Fmodules\u002Fgenerated\u002Fsklearn.manifold.TSNE.html","https:\u002F\u002Fgithub.com\u002FYyzHarry\u002Fimbalanced-semi-self\u002Fissues\u002F23",{"id":137,"question_zh":138,"answer_zh":139,"source_url":140},45020,"运行 pretrain_rot.py 时出现 \"Output size is too small\" 的 RuntimeError 错误怎么办？","该错误通常与输入图像尺寸或网络架构不匹配有关。虽然具体修复代码未在评论中直接给出，但此类错误常见于将适用于大图像（如 ImageNet）的配置直接用于小图像（如 CIFAR）而未调整网络层（如池化层或全连接层前的适配）。请检查 `pretrain_rot.py` 中针对 CIFAR-10 数据集的网络定义部分，确保没有使用仅适用于高分辨率输入的卷积步长或池化设置，或者确认是否混用了 ImageNet 的配置文件。","https:\u002F\u002Fgithub.com\u002FYyzHarry\u002Fimbalanced-semi-self\u002Fissues\u002F22",{"id":142,"question_zh":143,"answer_zh":144,"source_url":145},45021,"在 ImageNet-LT 上使用提供的预训练模型无法达到论文报告的精度（如 45.6%），可能的原因是什么？","如果确认模型权重已正确加载（可通过测试给定模型验证），性能差距可能源于超参数设置。建议尝试调整初始学习率（参考 OLTR 配置，初始学习率可能设为 0.1），并增加训练的 epoch 数量，因为更长的训练时间通常能带来更好的结果。此外，请仔细比对您的配置文件（yaml）与原始实验配置是否完全一致。","https:\u002F\u002Fgithub.com\u002FYyzHarry\u002Fimbalanced-semi-self\u002Fissues\u002F17",{"id":147,"question_zh":148,"answer_zh":149,"source_url":140},45022,"自监督预训练任务中显示的准确率（如 83.75%）代表什么含义？","该准确率指的是自监督预训练任务本身的性能，例如在旋转预测任务（Rotation prediction）中的分类准确率，而不是最终的不平衡图像分类任务的准确率。因此，这个数值通常会很高，但它只是中间步骤的指标，不代表最终下游任务的性能。",{"id":151,"question_zh":152,"answer_zh":153,"source_url":154},45023,"为什么项目中选择使用 ResNeXt 架构而不是其他论文中的架构？批量大小设置对结果有影响吗？","选择 ResNeXt 主要是受限于计算资源，因为需要对比多种方法，所以只选择了 1-2 种代表性架构，但相信类似结果在不同架构上也成立。关于批量大小：在 ImageNet-LT 上使用 128，在 iNat 上使用 100，这是 GPU 显存允许的最大值。重要的是，基线模型和带有 SSP 的模型使用的是完全相同的训练设置（包括批量大小），因此性能提升主要来自 SSP 而非批量大小的调整。","https:\u002F\u002Fgithub.com\u002FYyzHarry\u002Fimbalanced-semi-self\u002Fissues\u002F1",[]]