continual-learning-baselines

continual-learning-baselines

综合持续学习策略基准与评估平台

该项目提供了一套持续学习策略和基线示例,基于Avalanche库实现多种算法,如Less-Forgetful Learning和Elastic Weight Consolidation。项目在Permuted MNIST、Split CIFAR-100等数据集上进行了评估,可重现原始论文结果或自定义参数。这为持续学习研究提供了可靠的基准平台,便于比较不同策略的性能。

Continual LearningAvalanche实验基准测试模型性能Github开源项目
<div align="center">

持续学习基线

Avalanche 网站 | Avalanche 代码库

</div> <p align="center"> <img src="https://yellow-cdn.veclightyear.com/0a4dffa0/f91dbf45-ea92-43cd-a652-1cfefe01b48f.png?raw=1"/> </p>

本项目提供了一系列流行持续学习策略和基线的示例。您可以轻松运行实验来重现原始论文的结果,或调整超参数以获得自己的结果。天空才是极限!

为保证公平实现,我们依赖由 ContinualAI 开发和维护的 Avalanche 库。欢迎查看并支持该项目!

实验

下表描述了当前在 experiments 文件夹中实现的所有实验及其结果。这些表格并非用于比较不同方法,而是作为它们性能的参考。不同方法可能使用略微不同的设置(例如,从预训练模型开始或从头开始),因此并不总是有意义进行比较。

如果一个实验在 性能 方面完全重现了论文的结果(即使使用不同的超参数),则在 已重现 列中标记为 ✅。否则,标记为 ❌。 Avalanche 表示我们无法找到任何特定的参考论文,我们使用的是该策略首次添加到 Avalanche 库时获得的性能。 如果 性能 远低于预期,则在 已重现 列中使用 bug 标签。 最后,参考 列报告了预期性能,以及相关论文的链接(如果有)。请注意,链接并不总是指向引入该策略的论文,因为它有时与我们用来获取目标性能的论文不同。

ACC 表示在最后一个经验上训练后,所有经验的平均准确率。

首先,我们报告非在线持续学习情况(也称为批量持续学习)的结果。然后,我们报告在线持续学习情况的结果。

批量持续学习(非在线)

基准测试策略场景性能参考已重现
置换 MNISTLess-Forgetful Learning (LFL)域增量ACC=0.88ACC=0.88Avalanche
置换 MNISTElastic Weight Consolidation (EWC)域增量ACC=0.83ACC=0.94
置换 MNISTSynaptic Intelligence (SI)域增量ACC=0.83ACC=0.95
拆分 CIFAR-100LaMAML任务增量ACC=0.70ACC=0.70
拆分 CIFAR-100iCaRL类别增量ACC=0.48ACC=0.50
拆分 CIFAR-100重放类别增量ACC=0.32ACC=0.32Avalanche
拆分 MNISTRWalk任务增量ACC=0.99ACC=0.99
拆分 MNISTSynaptic Intelligence (SI)任务增量ACC=0.97ACC=0.97
拆分 MNISTGDumb类别增量ACC=0.97ACC=0.97
拆分 MNISTGSS_greedy类别增量ACC=0.82ACC=0.78
拆分 MNISTGenerative Replay (GR)类别增量ACC=0.75ACC=0.75
拆分 MNISTLearning without Forgetting (LwF)类别增量ACC=0.23ACC=0.23
拆分 Tiny ImageNetLaMAML任务增量ACC=0.54ACC=0.66
拆分 Tiny ImageNetLearning without Forgetting (LwF)任务增量ACC=0.44ACC=0.44
拆分 Tiny ImageNetMemory Aware Synapses (MAS)任务增量ACC=0.40ACC=0.40
拆分 Tiny ImageNetPackNet任务增量ACC=0.46ACC=0.47 (表 4 SMALL)

在线持续学习

基准测试策略场景性能指标参考文献是否复现
CORe50深度流式LDA (DSLDA)类别增量ACC=0.79ACC=0.79
置换MNISTGEM域增量ACC=0.80ACC=0.83
分割CIFAR-10在线重放类别增量ACC=0.50ACC=0.50Avalanche
分割CIFAR-10ER-AML类别增量ACC=0.47ACC=0.47
分割CIFAR-10ER-ACE类别增量ACC=0.45ACC=0.52
分割CIFAR-10监督对比重放 (SCR)类别增量ACC=0.36ACC=0.48Avalanche
置换MNIST平均GEM (AGEM)域增量ACC=0.81ACC=0.81
分割CIFAR-100GEM任务增量ACC=0.63ACC=0.63
分割CIFAR-100平均GEM (AGEM)任务增量ACC=0.62ACC=0.62
分割CIFAR-100ER-ACE类别增量ACC=0.24ACC=0.25
分割CIFAR-100ER-AML类别增量ACC=0.24ACC=0.24
分割CIFAR-100在线重放类别增量ACC=0.21ACC=0.21Avalanche
分割MNISTCoPE类别增量ACC=0.93ACC=0.93
分割MNIST在线重放类别增量ACC=0.92ACC=0.92Avalanche

实验所需的Python依赖

除了Python标准库外,运行实验所需的主要软件包是PyTorch、Avalanche和Pandas。

  • Avalanche:此仓库的最新版本需要最新的Avalanche版本(来自主分支):pip install git+https://github.com/ContinualAI/avalanche.git。CL基准仓库标记了支持的Avalanche版本(您可以浏览标签查看所有版本)。您可以使用pip install avalanche-lib==[版本号]安装相应的Avalanche版本,其中[版本号]的格式为0.1.0。 对于某些策略(如LaMAML),您可能需要安装带有额外软件包的Avalanche,例如pip install avalanche-lib[extra]。 有关如何安装Avalanche的更多详细信息,请查看此处的完整指南。
  • PyTorch:我们建议遵循官方指南
  • Pandaspip install pandas官方指南

使用Python运行实验

请将您的工作目录设置为项目根文件夹。

可以通过简单地从experiments文件夹导入函数并执行它来运行实验。 默认情况下,实验将在可用时在GPU上运行。

每个实验的输入参数是一个可选的参数字典,用于实验中。如果为None,将使用默认参数(取自原始论文)。

from experiments.split_mnist import synaptic_intelligence_smnist # 选择实验 # 可以为None以使用默认参数 custom_hyperparameters = {'si_lambda': 0.01, 'cuda': -1, 'seed': 3} # 运行实验 result = synaptic_intelligence_smnist(custom_hyperparameters) # Avalanche指标字典 print(result)

命令行实验

请将您的工作目录设置为项目根文件夹。 您应该将项目根文件夹添加到您的PYTHONPATH中。

例如,在Linux上,您可以全局设置:

export PYTHONPATH=${PYTHONPATH}:/path/to/continual-learning-baselines

或仅为当前命令设置:

PYTHONPATH=${PYTHONPATH}:/path/to/continual-learning-baselines command to be executed

您可以直接通过控制台使用默认参数运行实验。 打开控制台并通过指定其路径运行所需的Python文件。

例如,要在分割MNIST上运行突触智能:

python experiments/split_mnist/synaptic_intelligence.py

要使用自定义参数执行实验,请参考上一节。

运行测试

请将您的工作目录设置为项目根文件夹。

您可以运行所有测试:

python -m unittest

或者您可以通过提供格式为tests.strategy_class_name.test_benchmarkname的测试名称来指定测试。

例如,要在分割MNIST上运行突触智能,您可以运行:

python -m unittest tests.SynapticIntelligence.test_smnist

引用

如果您使用了这个仓库,就意味着您使用了Avalanche,请记得引用我们在CLVision @ CVPR2021工作坊上发表的参考论文:"Avalanche: 一个端到端的持续学习库"。 这将帮助我们在机器学习社区中提高Avalanche的知名度,最终使其成为一个更好的工具:

@InProceedings{lomonaco2021avalanche,
    title={Avalanche: an End-to-End Library for Continual Learning},
    author={Vincenzo Lomonaco and Lorenzo Pellegrini and Andrea Cossu and Antonio Carta and Gabriele Graffieti and Tyler L. Hayes and Matthias De Lange and Marc Masana and Jary Pomponi and Gido van de Ven and Martin Mundt and Qi She and Keiland Cooper and Jeremy Forest and Eden Belouadah and Simone Calderara and German I. Parisi and Fabio Cuzzolin and Andreas Tolias and Simone Scardapane and Luca Antiga and Subutai Amhad and Adrian Popescu and Christopher Kanan and Joost van de Weijer and Tinne Tuytelaars and Davide Bacciu and Davide Maltoni},
    booktitle={Proceedings of IEEE Conference on Computer Vision and Pattern Recognition},
    series={2nd Continual Learning in Computer Vision Workshop},
    year={2021}
}

为项目做贡献

我们一直在寻找愿意帮助我们完成为社区提供稳健实验这一具有挑战性任务的新贡献者。您想加入我们吗?步骤很简单!

  1. 查看已开放的问题并找到适合您的
  2. Fork这个仓库并编写一个实验(参见下一节)
  3. 提交PR并获得维护者的支持
  4. 合并PR,您的贡献现在已包含在项目中!

编写实验

  1. experiments/benchmark_folder中创建适当的脚本。如果基准测试不存在,您可以添加一个。
  2. 按照其他实验的风格,在experiment.py文件中填写您的代码。脚本应返回相关测试使用的指标。
  3. tests/target_results.csv中为您的实验添加预期结果。您可以添加一个数字或一个数字列表。
  4. tests/strategy_folder/experiment.py中编写单元测试。遵循现有测试的简单结构。
  5. 更新README.md中的表格。

找出导致回归的avalanche提交

  1. 进入avalanche文件夹,确保您在Python环境中使用的是该仓库的avalanche版本(通常只需将/path/to/avalanche添加到您的PYTHONPATH中即可)。
  2. 结合git bisect使用本仓库提供的gitbisect_test.sh来检索引入回归的avalanche提交。 git bisect start HEAD v0.1.0 -- # HEAD(当前版本)是坏的,v0.1.0是好的 git bisect run /path/to/gitbisect_test.sh /path/to/continual-learning-baselines optional_test_name git bisect reset
  3. gitbisect_test.sh脚本需要一个指向continual-learning-baselines目录的必填参数,以及一个指定特定单元测试路径的可选参数(例如,tests.EWC.test_pmnist)。如果未提供第二个参数,将运行所有单元测试。
  4. 终端输出将告诉您哪个提交引入了错误
  5. 您可以将HEADv0.1.0引用更改为任何avalanche提交。

编辑推荐精选

TRAE编程

TRAE编程

AI辅助编程,代码自动修复

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
商汤小浣熊

商汤小浣熊

最强AI数据分析助手

小浣熊家族Raccoon,您的AI智能助手,致力于通过先进的人工智能技术,为用户提供高效、便捷的智能服务。无论是日常咨询还是专业问题解答,小浣熊都能以快速、准确的响应满足您的需求,让您的生活更加智能便捷。

imini AI

imini AI

像人一样思考的AI智能体

imini 是一款超级AI智能体,能根据人类指令,自主思考、自主完成、并且交付结果的AI智能体。

Keevx

Keevx

AI数字人视频创作平台

Keevx 一款开箱即用的AI数字人视频创作平台,广泛适用于电商广告、企业培训与社媒宣传,让全球企业与个人创作者无需拍摄剪辑,就能快速生成多语言、高质量的专业视频。

即梦AI

即梦AI

一站式AI创作平台

提供 AI 驱动的图片、视频生成及数字人等功能,助力创意创作

扣子-AI办公

扣子-AI办公

AI办公助手,复杂任务高效处理

AI办公助手,复杂任务高效处理。办公效率低?扣子空间AI助手支持播客生成、PPT制作、网页开发及报告写作,覆盖科研、商业、舆情等领域的专家Agent 7x24小时响应,生活工作无缝切换,提升50%效率!

蛙蛙写作

蛙蛙写作

AI小说写作助手,一站式润色、改写、扩写

蛙蛙写作—国内先进的AI写作平台,涵盖小说、学术、社交媒体等多场景。提供续写、改写、润色等功能,助力创作者高效优化写作流程。界面简洁,功能全面,适合各类写作者提升内容品质和工作效率。

AI辅助写作AI工具蛙蛙写作AI写作工具学术助手办公助手营销助手AI助手
问小白

问小白

全能AI智能助手,随时解答生活与工作的多样问题

问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。

热门AI助手AI对话AI工具聊天机器人
Transly

Transly

实时语音翻译/同声传译工具

Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
下拉加载更多