自监督表示学习发展迅速,但仍存在不少问题。近日,香港中文大学多媒体实验室(MMLab)和南洋理工大学的研究人员开源了一个统一的自监督学习代码库OpenSelfSup。前言近几个月来,监督表示学习领域取得了重大突破,特别是随着RotationPrediction、DeepCluster、MoCo、SimCLR等简单有效方法的诞生,自监督表示学习有趋向超越监督表征学习。然而,这一领域的研究者深受触动:1)自监督任务复杂多样,不同的方法都有自己专用的训练代码,难以组合、??复用和改进;2)评价方案不统一,不同方法难以在公平环境下进行比较;3)训练数据上百万,训练效率是个大问题。针对这些问题,香港中文大学多媒体实验室(MMLab)和南洋理工大学的研究人员近日开源了一个统一的自监督学习代码库:OpenSelfSup。开源地址:https://github.com/open-mmlab/OpenSelfSupOpenSelfSup统一代码框架和模块化设计OpenSelfSup使用PyTorch实现,支持多种基于分类、重构、聚类、记忆库、对比学习的自监督学习框架,目前包含RelativeLocation、RotationPrediction、DeepCluster、OnlineDeepCluster、NPID、MoCo、SimCLR等一系列性能良好的自监督表示学习方法,并将持续跟进学术界的最新算法。在这个框架下,每个算法被拆解成几个可以独立设计的模块,如backbone、neck、head、memory_bank(可选)、hook(可选),每个模块提供多种选择。每个模块都可以自己设计。SimCLR中的backbone、neck和head设计标准化评估方案OpenSelfSup目前支持ImageNet/Place205LinearClassification、ImageNetSemi-SupervisedClassification、PASCALVOC07??LinearSVM、PASCALVOC/COCOObjectDetection等多种基准评估方案,可以实现一行命令运行评估非常方便。高效的分布式训练OpenSelfSup中包含的算法都实现了多机多卡的分布式训练、特征提取和测试。上手容易代码库的环境配置和数据配置都有脚本或详细指导从头开始,简单易上手。训练和测试现有算法只需要一行命令。高灵活性和可扩展性1.改进现有算法。OpenSelfSup使用配置文件来定义各种参数和模块,以便于修改。config还支持一些更复杂的调整,比如数据增强的组合,学习率调度,针对某些网络参数的优化参数的独立调整等。例如,如果你想单独调整fully-head中connectedlayer,或者backbone中某些layer的weightdecay等等,那么你可以在optimizer:config中的paramwise_option下使用正则表达式过滤掉对应的网络参数,然后在不改变你的情况下指定这些值代码。DeepCluster中head(fc层)指定的动量为02。使用自己的训练数据。OpenSelfSup将数据处理与数据源分离。要使用自己的训练数据,只需要添加自己的数据源文件,并在config.xml中指定即可。3.设计自己的算法。高度模块化的设计使得自己设计算法变得非常简单。您只需要设计自己的模块或重用现有模块,然后创建一个新的模型文件来组织这些模块。如果你的算法包括区间迭代和区间epoch的操作(比如DeepCluster需要在每个epoch之后对训练集进行聚类),你只需要新建一个hook来定义这些操作,并在config中设置这个hook。钩子的调用是自动完成的。DeepCluster初始聚类和每n个epochs后的聚类结论OpenSelfSup是一个长期维护的开源项目,旨在促进学术界和工业界的研究人员推进自监督表示学习领域。我也希望有兴趣的研究人员和开发人员能够帮助继续改进OpenSelfSup并为该领域做出贡献。
