byol-pytorch

byol-pytorch

实现超越SimCLR的简化自监督学习新方法

这个开源项目提供了一种无需对比学习和负样本分配的自监督学习方法,其性能超过了SimCLR。它支持轻松集成任何基于图像的神经网络,并利用未标记数据提升模型性能。该项目还支持批量规范化和组规范化替代方案,适用于定制化和分布式训练。

BYOL自监督学习PyTorch图像处理UNLABELLED_IMAGE_DATAGithub开源项目

<img src="https://yellow-cdn.veclightyear.com/35dd4d3f/4ea2933a-8c98-4632-a289-b91a744fccf3.png" width="700px"></img>

Pytorch实现的Bootstrap Your Own Latent (BYOL)

PyPI version

<a href="https://arxiv.org/abs/2006.07733">一种令人惊讶的简单方法</a>的实际实现——一种自监督学习方法,它在无需对比学习和指定负样本对的情况下,达到了新的技术水平(超越SimCLR)。

这个仓库提供了一个模块,可以轻松地包装任何基于图像的神经网络(剩余网络、判别器、策略网络),以立即开始利用未标记的图像数据。

更新 1:现在有<a href="https://untitled-ai.github.io/understanding-self-supervised-contrastive-learning.html">新证据</a>表明批量归一化是使这种技术工作得很好的关键

更新 2:一篇<a href="https://arxiv.org/abs/2010.10241">新论文</a>成功将批量归一化替换为组归一化和权重标准化,驳斥了BYOL需要批量统计量才能工作

更新 3:终于,我们有了<a href="https://arxiv.org/abs/2102.06810">一些分析</a>来说明为什么这能起作用

<a href="https://www.youtube.com/watch?v=YPfUiOMYOEE">Yannic Kilcher的优秀解释</a>

现在,去拯救你的组织,不用再为标签付费了 :)

安装

$ pip install byol-pytorch

用法

只需插入你的神经网络,指定(1)图像尺寸以及(2)隐藏层的名称(或索引),其输出将用作用于自监督训练的潜在表示。

import torch from byol_pytorch import BYOL from torchvision import models resnet = models.resnet50(pretrained=True) learner = BYOL( resnet, image_size = 256, hidden_layer = 'avgpool' ) opt = torch.optim.Adam(learner.parameters(), lr=3e-4) def sample_unlabelled_images(): return torch.randn(20, 3, 256, 256) for _ in range(100): images = sample_unlabelled_images() loss = learner(images) opt.zero_grad() loss.backward() opt.step() learner.update_moving_average() # 更新目标编码器的移动平均 # 保存改进后的网络 torch.save(resnet.state_dict(), './improved-net.pt')

基本上就这些。经过大量训练后,剩余网络现在应能更好地完成其下游监督任务。

BYOL → SimSiam

来自何恺明的<a href="https://arxiv.org/abs/2011.10566">新论文</a>表明,BYOL甚至不需要目标编码器是线上编码器的指数移动平均。我决定内置此选项,这样你可以通过将use_momentum标志设置为False轻松使用该变体进行训练。如果你采用此方法,则不再需要调用update_moving_average,如下例所示。

import torch from byol_pytorch import BYOL from torchvision import models resnet = models.resnet50(pretrained=True) learner = BYOL( resnet, image_size = 256, hidden_layer = 'avgpool', use_momentum = False # 关闭目标编码器的动量 ) opt = torch.optim.Adam(learner.parameters(), lr=3e-4) def sample_unlabelled_images(): return torch.randn(20, 3, 256, 256) for _ in range(100): images = sample_unlabelled_images() loss = learner(images) opt.zero_grad() loss.backward() opt.step() # 保存改进后的网络 torch.save(resnet.state_dict(), './improved-net.pt')

进阶

虽然超参数已经设置为论文中找到的最佳值,但你可以使用基础包装类的额外关键字参数来更改它们。

learner = BYOL( resnet, image_size = 256, hidden_layer = 'avgpool', projection_size = 256, # 投影大小 projection_hidden_size = 4096, # 投影和预测的MLP的隐藏维度 moving_average_decay = 0.99 # 目标编码器的移动平均衰减因子,已设置为论文推荐值 )

默认情况下,此库将使用来自SimCLR论文的增强(BYOL论文中也使用了)。但是,如果你想指定自己的增强管道,可以简单地通过augment_fn关键字传递你自己的自定义增强函数。

augment_fn = nn.Sequential( kornia.augmentation.RandomHorizontalFlip() ) learner = BYOL( resnet, image_size = 256, hidden_layer = -2, augment_fn = augment_fn )

在论文中,他们似乎保证其中一个增强的高斯模糊概率比另一个高。你也可以根据自己的喜好进行调整。

augment_fn = nn.Sequential( kornia.augmentation.RandomHorizontalFlip() ) augment_fn2 = nn.Sequential( kornia.augmentation.RandomHorizontalFlip(), kornia.filters.GaussianBlur2d((3, 3), (1.5, 1.5)) ) learner = BYOL( resnet, image_size = 256, hidden_layer = -2, augment_fn = augment_fn, augment_fn2 = augment_fn2, )

要获取嵌入或投影,你只需将return_embeddings = True标志传递给BYOL学习实例

import torch from byol_pytorch import BYOL from torchvision import models resnet = models.resnet50(pretrained=True) learner = BYOL( resnet, image_size = 256, hidden_layer = 'avgpool' ) imgs = torch.randn(2, 3, 256, 256) projection, embedding = learner(imgs, return_embedding = True)

分布式训练

该仓库现在提供了使用<a href="https://huggingface.co/docs/accelerate/index">🤗 Huggingface Accelerate</a>进行分布式训练的功能。你只需将你自己的Dataset传递给导入的BYOLTrainer

首先使用accelerate CLI设置分布式训练的配置

$ accelerate config

然后按如下所示制作你的训练脚本,比如在./train.py

from torchvision import models from byol_pytorch import ( BYOL, BYOLTrainer, MockDataset ) resnet = models.resnet50(pretrained = True) dataset = MockDataset(256, 10000) trainer = BYOLTrainer( resnet, dataset = dataset, image_size = 256, hidden_layer = 'avgpool', learning_rate = 3e-4, num_train_steps = 100_000, batch_size = 16, checkpoint_every = 1000 # 改进后的模型将定期保存到./checkpoints文件夹 ) trainer()

然后再次使用accelerate CLI启动脚本

$ accelerate launch ./train.py

替代方案

如果你的下游任务涉及分割,请查看以下仓库,该仓库将BYOL扩展到“像素”级学习。

https://github.com/lucidrains/pixel-level-contrastive-learning

引用

@misc{grill2020bootstrap, title = {Bootstrap Your Own Latent: A New Approach to Self-Supervised Learning}, author = {Jean-Bastien Grill and Florian Strub and Florent Altché and Corentin Tallec and Pierre H. Richemond and Elena Buchatskaya and Carl Doersch and Bernardo Avila Pires and Zhaohan Daniel Guo and Mohammad Gheshlaghi Azar and Bilal Piot and Koray Kavukcuoglu and Rémi Munos and Michal Valko}, year = {2020}, eprint = {2006.07733}, archivePrefix = {arXiv}, primaryClass = {cs.LG} }
@misc{chen2020exploring, title={Exploring Simple Siamese Representation Learning}, author={Xinlei Chen and Kaiming He}, year={2020}, eprint={2011.10566}, archivePrefix={arXiv}, primaryClass={cs.CV} }

编辑推荐精选

Qwen2.5-VL

Qwen2.5-VL

一款强大的视觉语言模型,支持图像和视频输入

Qwen2.5-VL 是一款强大的视觉语言模型,支持图像和视频输入,可用于多种场景,如商品特点总结、图像文字识别等。项目提供了 OpenAI API 服务、Web UI 示例等部署方式,还包含了视觉处理工具,有助于开发者快速集成和使用,提升工作效率。

HunyuanVideo

HunyuanVideo

HunyuanVideo 是一个可基于文本生成高质量图像和视频的项目。

HunyuanVideo 是一个专注于文本到图像及视频生成的项目。它具备强大的视频生成能力,支持多种分辨率和视频长度选择,能根据用户输入的文本生成逼真的图像和视频。使用先进的技术架构和算法,可灵活调整生成参数,满足不同场景的需求,是文本生成图像视频领域的优质工具。

WebUI for Browser Use

WebUI for Browser Use

一个基于 Gradio 构建的 WebUI,支持与浏览器智能体进行便捷交互。

WebUI for Browser Use 是一个强大的项目,它集成了多种大型语言模型,支持自定义浏览器使用,具备持久化浏览器会话等功能。用户可以通过简洁友好的界面轻松控制浏览器智能体完成各类任务,无论是数据提取、网页导航还是表单填写等操作都能高效实现,有利于提高工作效率和获取信息的便捷性。该项目适合开发者、研究人员以及需要自动化浏览器操作的人群使用,在 SEO 优化方面,其关键词涵盖浏览器使用、WebUI、大型语言模型集成等,有助于提高网页在搜索引擎中的曝光度。

xiaozhi-esp32

xiaozhi-esp32

基于 ESP32 的小智 AI 开发项目,支持多种网络连接与协议,实现语音交互等功能。

xiaozhi-esp32 是一个极具创新性的基于 ESP32 的开发项目,专注于人工智能语音交互领域。项目涵盖了丰富的功能,如网络连接、OTA 升级、设备激活等,同时支持多种语言。无论是开发爱好者还是专业开发者,都能借助该项目快速搭建起高效的 AI 语音交互系统,为智能设备开发提供强大助力。

olmocr

olmocr

一个用于 OCR 的项目,支持多种模型和服务器进行 PDF 到 Markdown 的转换,并提供测试和报告功能。

olmocr 是一个专注于光学字符识别(OCR)的 Python 项目,由 Allen Institute for Artificial Intelligence 开发。它支持多种模型和服务器,如 vllm、sglang、OpenAI 等,可将 PDF 文件的页面转换为 Markdown 格式。项目还提供了测试框架和 HTML 报告生成功能,方便用户对 OCR 结果进行评估和分析。适用于科研、文档处理等领域,有助于提高工作效率和准确性。

飞书多维表格

飞书多维表格

飞书多维表格 ×DeepSeek R1 满血版

飞书多维表格联合 DeepSeek R1 模型,提供 AI 自动化解决方案,支持批量写作、数据分析、跨模态处理等功能,适用于电商、短视频、影视创作等场景,提升企业生产力与创作效率。关键词:飞书多维表格、DeepSeek R1、AI 自动化、批量处理、企业协同工具。

CSM

CSM

高质量语音生成模型

CSM 是一个开源的语音生成项目,它提供了一个基于 Llama-3.2-1B 和 CSM-1B 的语音生成模型。该项目支持多语言,可生成多种声音,适用于研究和教育场景。通过使用 CSM,用户可以方便地进行语音合成,同时项目还提供了水印功能,确保生成音频的可追溯性和透明度。

agents-course

agents-course

Hugging Face 的 AI 智能体课程,涵盖多种智能体框架及相关知识

本项目是 Hugging Face 推出的 AI 智能体课程,深入介绍了 AI 智能体的相关概念,如大语言模型、工具使用等。课程包含多个单元,详细讲解了不同的智能体框架,如 smolagents 和 LlamaIndex,提供了丰富的学习资源和实践案例。适合对 AI 智能体感兴趣的开发者和学习者,有助于提升他们在该领域的知识和技能。

RagaAI-Catalyst

RagaAI-Catalyst

用于 AI 项目管理和 API 交互的工具集,助力 AI 项目高效开发与管理。

RagaAI-Catalyst 是一款专注于 AI 领域的强大工具集,为开发者提供了便捷的项目管理、API 交互、令牌管理等功能。支持多 API 密钥上传,能快速创建、列出和管理 AI 项目,还可获取项目用例和指标信息。适用于各类 AI 开发场景,提升开发效率,推动 AI 项目顺利开展。

smolagents

smolagents

一个包含多种工具和文档处理功能,适用于 LLM 使用的项目。

smolagents 是一个功能丰富的项目,提供了如文件格式转换、网页内容读取、语义搜索等多种工具,支持将常见文件类型或网页转换为 Markdown,方便进行文档处理和信息提取,能满足不同场景下的需求,提升工作效率和数据处理能力。

下拉加载更多