super-gradients

super-gradients

开源工具库简化SOTA计算机视觉模型的训练与部署

Super-Gradients是一个专注于计算机视觉的开源深度学习库。它提供预训练SOTA模型和易用训练工具,支持分类、分割、检测等任务。该项目集成多种训练技巧,兼容主流部署框架,可快速将模型应用于生产。Super-Gradients适用于学术研究和工业应用,是一个高效的计算机视觉开发工具。

SuperGradients深度学习计算机视觉预训练模型模型训练Github开源项目
<div align="center" markdown="1"> <img src="https://yellow-cdn.veclightyear.com/ab5030c0/a1c980bb-067e-4b3d-b8dd-0099f7fd7956.png" width="600"/> <br/><br/>

构建、训练和微调生产就绪的深度学习SOTA视觉模型 推文

3.5版本已发布!笔记本已更新!


</div> <div align="center"> <p align="center"> <a href="#getting-started">入门</a> • <a href="#implemented-model-architectures">预训练模型</a> • <a href="#community">社区</a> • <a href="#license">许可证</a> • </p> <p align="center"> <a href="https://github.com/Deci-AI/super-gradients#prerequisites"><img src="https://img.shields.io/badge/python-3.7%20%7C%203.8%20%7C%203.9-blue" /></a> <a href="https://github.com/Deci-AI/super-gradients#prerequisites"><img src="https://img.shields.io/badge/pytorch-1.9%20%7C%201.10-blue" /></a> <a href="https://pypi.org/project/super-gradients/"><img src="https://img.shields.io/pypi/v/super-gradients" /></a> <a href="https://github.com/Deci-AI/super-gradients/blob/master/documentation/source/model_zoo.md" ><img src="https://img.shields.io/badge/pre--trained%20models-34-brightgreen" /></a> <a href="https://github.com/Deci-AI/super-gradients/releases"><img src="https://img.shields.io/github/v/release/Deci-AI/super-gradients" /></a> <a href="https://join.slack.com/t/supergradients-comm52/shared_invite/zt-10vz6o1ia-b_0W5jEPEnuHXm087K~t8Q"><img src="https://img.shields.io/badge/slack-community-blueviolet" /></a> <a href="https://github.com/Deci-AI/super-gradients/blob/master/LICENSE.md"><img src="https://img.shields.io/badge/license-Apache%202.0-blue" /></a> <a href="https://docs.deci.ai/super-gradients/documentation/source/welcome.html"><img src="https://img.shields.io/badge/docs-mkdocs-brightgreen" /></a> </p> </div>

使用SuperGradients构建


支持各种计算机视觉任务

<div align="center"> <img src="https://yellow-cdn.veclightyear.com/ab5030c0/2eb17712-07f6-4581-ac64-47f73482bb6f.png" width="250px"> <img src="https://yellow-cdn.veclightyear.com/ab5030c0/4a8a6f51-bf7d-4b14-9a04-155ef29d5ee8.png" width="250px"> <img src="https://yellow-cdn.veclightyear.com/ab5030c0/8d9f75da-b559-4f65-ad25-c1222491ad00.png" width="250px"> <img src="https://yellow-cdn.veclightyear.com/ab5030c0/0b6f9b25-4fbb-471e-adf5-161904f518a0.jpg" width="250px"> </div>

可直接部署的预训练SOTA模型

YOLO-NAS和YOLO-NAS-POSE架构已发布! 新的YOLO-NAS以无与伦比的准确度-速度性能表现出色,超越了其他模型如YOLOv5、YOLOv6、YOLOv7和YOLOv8。 用于姿态估计的YOLO-NAS-POSE模型也已推出,提供了最先进的准确度/性能权衡。

在这里查看详情:YOLO-NASYOLO-NAS-POSE

<div align="center"> <img src="https://yellow-cdn.veclightyear.com/ab5030c0/f4388d3f-014f-45e0-a0cc-8fd4eb6f91b0.png" height="600px"> <img src="https://yellow-cdn.veclightyear.com/ab5030c0/a1101d4d-4d26-4661-9a21-9759281ee2dd.png" height="600px"> </div>
# 加载带有预训练权重的模型 from super_gradients.training import models from super_gradients.common.object_names import Models model = models.get(Models.YOLO_NAS_M, pretrained_weights="coco")

所有计算机视觉模型的预训练检查点可在模型库中找到

分类

<div align="center"> <img src="https://yellow-cdn.veclightyear.com/ab5030c0/204c7d96-d3d4-4e45-9bb4-6085b24d478d.png" width="800px"> </div>

语义分割

<div align="center"> <img src="https://yellow-cdn.veclightyear.com/ab5030c0/bb86e35c-57cc-4ee8-9533-fba581f6914c.png" width="800px"> </div>

目标检测

<div align="center"> <img src="https://yellow-cdn.veclightyear.com/ab5030c0/0ef6dd7f-ca32-4f5b-83e2-67d6341c490e.png" width="800px"> </div>

姿态估计

<div align="center"> <img src="https://yellow-cdn.veclightyear.com/ab5030c0/a1101d4d-4d26-4661-9a21-9759281ee2dd.png" width="400px"> <img src="https://yellow-cdn.veclightyear.com/ab5030c0/8776cab0-32fd-4c6f-b410-b0debfdc0960.png" width="400px"> </div>

轻松训练SOTA模型

轻松加载和微调生产就绪的预训练SOTA模型,这些模型结合了最佳实践和经过验证的超参数,以实现一流的准确性。 有关如何操作的更多信息,请参阅入门

即插即用的配方

python -m super_gradients.train_from_recipe architecture=regnetY800 dataset_interface.data_dir=<YOUR_Imagenet_LOCAL_PATH> ckpt_root_dir=<CHEKPOINT_DIRECTORY>

关于如何以及为什么使用配方的更多示例可以在配方中找到

生产就绪

所有SuperGradients模型都已生产就绪,因为它们与TensorRT(Nvidia)和OpenVINO(Intel)等部署工具兼容,可以轻松投入生产。只需几行代码,您就可以轻松地将模型集成到您的代码库中。

# 加载带有预训练权重的模型 from super_gradients.training import models from super_gradients.common.object_names import Models model = models.get(Models.YOLO_NAS_M, pretrained_weights="coco") # 准备模型进行转换 # 输入大小格式为[Batch x Channels x Width x Height],其中640是标准COCO数据集尺寸 model.eval() model.prep_model_for_conversion(input_size=[1, 3, 640, 640]) # 创建虚拟输入 # 将模型转换为onnx torch.onnx.export(model, dummy_input, "yolo_nas_m.onnx")

关于如何将模型投入生产的更多信息可以在入门笔记本中找到

快速安装


pip install super-gradients

最新动态


3.4.0版本(2023年11月6日)

  • YoloNAS-Pose模型发布 - 姿态估计的新前沿
  • 添加了将配方导出为单个YAML文件或独立train.py文件的选项
  • 其他错误修复和小改进。完整发布说明可在此处查看

3.1.3版本(2023年7月19日)


5月30日

3.1.1版本(5月3日)

查看SG完整发布说明

目录


<!-- toc --> <!-- tocstop -->

入门


只需1条命令行即可开始训练

使用SuperGradients可重现的配方训练SOTA性能模型的最简单直接方法。只需定义数据集路径和保存检查点的位置,就可以在终端中开始训练了!

只需确保按照配方中指定的数据目录设置好数据集

python -m super_gradients.train_from_recipe --config-name=imagenet_regnetY architecture=regnetY800 dataset_interface.data_dir=<你的Imagenet本地路径> ckpt_root_dir=<检查点目录>

快速加载预训练权重以获得SOTA性能的所需模型

想在自己的机器上尝试我们的预训练模型吗?导入SuperGradients,初始化你的Trainer,并从我们的SOTA模型库加载所需的架构和预训练权重

# pretrained_weights参数将加载在提供的数据集上预训练的架构 import super_gradients model = models.get("模型名称", pretrained_weights="预训练模型名称")

分类

语义分割

姿态估计

目标检测

如何使用预训练模型进行预测

Albumentations集成

高级功能


训练后量化和量化感知训练

量化涉及以低精度表示权重和偏置,从而减少内存和计算需求,这对于在资源有限的设备上部署模型很有用。 这个过程可以在训练期间进行,称为量化感知训练,或在训练后进行,称为训练后量化。 完整教程可以在这里找到。

在自定义数据集上进行YoloNAS量化感知训练

本教程提供了如何使用自定义数据集微调YoloNAS模型的全面指南。 它还演示了如何利用SG的QAT(量化感知训练)支持。此外,它还提供了部署模型和进行基准测试的分步说明。

知识蒸馏训练

知识蒸馏是一种训练技术,使用大型模型(教师模型)来提高小型模型(学生模型)的性能。 通过我们在Google Colab上使用预训练的BEiT base教师模型和Resnet18学生模型在CIFAR10上的示例notebook,了解更多关于SuperGradients知识蒸馏训练的信息,这是一个易于使用的教程,使用免费的GPU硬件。

配方

要训练模型,需要配置4个主要组件。 这些组件被聚合到一个"主要"配方.yaml文件中,该文件继承了上述数据集、架构、训练和检查点参数。 也可以(并建议为了灵活性)用自定义设置覆盖默认设置。 所有配方都可以在这里找到 </br> 配方支持在SuperGradients中实现的每个模型、指标或损失函数,但你可以通过"注册"轻松扩展到任何你需要的自定义对象。查看这个教程了解更多信息。

<details markdown="1"> <summary><h3>使用分布式数据并行(DDP)</h3></summary>

为什么使用DDP?

最近的深度学习模型越来越大,以至于在单个GPU上训练可能需要数周时间。 为了及时训练模型,有必要使用多个GPU进行训练。 使用100多个GPU可以将模型的训练时间从一周减少到不到一小时。

它是如何工作的?

每个GPU都有自己的进程,该进程控制模型的一个副本,并在训练期间从磁盘加载自己的小批量数据并将其发送到GPU。 在每个GPU上完成前向传播后,梯度在所有GPU之间进行归约,导致所有GPU在本地具有相同的梯度。这使得在反向传播后,模型权重在所有GPU上保持同步。

如何使用它?

你可以使用SuperGradients在几行代码内用DDP训练你的模型。

main.py

from super_gradients import init_trainer, Trainer from super_gradients.common import MultiGPUMode from super_gradients.training.utils.distributed_training_utils import setup_device # 初始化环境 init_trainer() # 在4个GPU上启动DDP setup_device(multi_gpu=MultiGPUMode.DISTRIBUTED_DATA_PARALLEL, num_gpus=4) # 调用训练器 Trainer(expriment_name=...) # 你在下面做的一切都会在4个gpu上运行 ... Trainer.train(...)

最后,你可以用一个简单的python调用来启动你的分布式训练。

python main.py

请注意,如果你使用torch<1.9.0(已弃用),你将需要使用torch.distributed.launchtorchrun来启动你的训练,在这种情况下,nproc_per_node将覆盖gpu_mode设置的值:

python -m torch.distributed.launch --nproc_per_node=4 main.py
torchrun --nproc_per_node=4 main.py

在单个节点上调用函数

在DDP训练中,我们经常希望在主节点(即rank 0)上执行代码。 在SG中,用户通常通过触发"阶段回调"来执行自己的代码(参见下面的"使用阶段回调"部分)。 可以使用ddp_silent_mode或multi_process_safe装饰器确保所需的代码只在rank 0上运行。 例如,考虑下面这个简单的阶段回调,它在训练期间将每个批次的前3张图像上传到Tensorboard:

from super_gradients.training.utils.callbacks import PhaseCallback, PhaseContext, Phase from super_gradients.common.environment.env_helpers import multi_process_safe class Upload3TrainImagesCalbback(PhaseCallback): def __init__( self, ): super().__init__(phase=Phase.TRAIN_BATCH_END) @multi_process_safe def __call__(self, context: PhaseContext): batch_imgs = context.inputs.cpu().detach().numpy() tag = "batch_" + str(context.batch_idx) + "_images" context.sg_logger.add_images(tag=tag, images=batch_imgs[: 3], global_step=context.epoch)

@multi_process_safe 装饰器确保回调只会被 rank 0 触发。另外,也可以通过 SG trainer 的布尔属性 ddp_silent_mode 来实现(phase context 可以访问该属性)。该属性仅当当前进程 rank 为零时设为 False(即使进程组已被销毁):

from super_gradients.training.utils.callbacks import PhaseCallback, PhaseContext, Phase class Upload3TrainImagesCalbback(PhaseCallback): def __init__( self, ): super().__init__(phase=Phase.TRAIN_BATCH_END) def __call__(self, context: PhaseContext): if not context.ddp_silent_mode: batch_imgs = context.inputs.cpu().detach().numpy() tag = "batch_" + str(context.batch_idx) + "_images" context.sg_logger.add_images(tag=tag, images=batch_imgs[: 3], global_step=context.epoch)

注意 ddp_silent_mode 可以通过 SgTrainer.ddp_silent_mode 访问。因此,在调用 SgTrainer.train() 后,如果脚本的某些部分只需在 rank 0 上运行,可以使用它。

值得了解

你的总批量大小将是 (GPU 数量 x 批量大小),所以你可能需要增加学习率。 没有明确的规则,但经验法则似乎是根据 GPU 数量线性增加学习率

</details> <details markdown="1"> <summary><h3> 轻松更改架构参数 </h3></summary>
from super_gradients.training import models # 实例化默认预训练 resnet18 default_resnet18 = models.get(model_name="resnet18", num_classes=100, pretrained_weights="imagenet") # 实例化预训练 resnet18,开启 DropPath 并设置概率为 0.5 droppath_resnet18 = models.get(model_name="resnet18", arch_params={"droppath_prob": 0.5}, num_classes=100, pretrained_weights="imagenet") # 实例化预训练 resnet18,不含分类器头。输出将来自全局池化前的最后一个阶段 backbone_resnet18 = models.get(model_name="resnet18", arch_params={"backbone_mode": True}, pretrained_weights="imagenet")
</details> <details markdown="1"> <summary><h3> 使用阶段回调 </h3></summary>
from super_gradients import Trainer from torch.optim.lr_scheduler import ReduceLROnPlateau from super_gradients.training.utils.callbacks import Phase, LRSchedulerCallback from super_gradients.training.metrics.classification_metrics import Accuracy # 定义 PyTorch 训练和验证数据加载器以及优化器 # 定义回调中要调用的内容 rop_lr_scheduler = ReduceLROnPlateau(optimizer, mode="max", patience=10, verbose=True) # 定义阶段回调,它们将按 Phase 中定义的方式触发 phase_callbacks = [LRSchedulerCallback(scheduler=rop_lr_scheduler, phase=Phase.VALIDATION_EPOCH_END, metric_name="Accuracy")] # 创建一个训练器对象,查看声明以获取更多参数 trainer = Trainer("experiment_name") # 将 phase_callbacks 定义为训练参数的一部分 train_params = {"phase_callbacks": phase_callbacks}
</details> <details markdown="1"> <summary><h3> 与 DagsHub 集成 </h3></summary>

Open In Colab

from super_gradients import Trainer trainer = Trainer("experiment_name") model = ... training_params = { ... # 你的训练参数 "sg_logger": "dagshub_sg_logger", # DagsHub 日志记录器,详见 super_gradients.common.sg_loggers.dagshub_sg_logger.DagsHubSGLogger 类 "sg_logger_params": # 将传递给日志记录器 super_gradients.common.sg_loggers.dagshub_sg_logger.DagsHubSGLogger 的 __init__ 的参数 { "dagshub_repository": "<REPO_OWNER>/<REPO_NAME>", # 可选: 你的 DagsHub 项目名称,由所有者名称、'/'和仓库名称组成。如果留空,你将在运行时被提示手动填写。 "log_mlflow_only": False, # 可选: 改为 true 以绕过 DVC 日志记录,仅将所有工件记录到 MLflow "save_checkpoints_remote": True, "save_tensorboard_remote": True, "save_logs_remote": True, } }
</details> <details> <summary><h3> 与 Weights and Biases 集成 </h3></summary>
from super_gradients import Trainer # 创建一个训练器对象,查看声明以获取更多参数 trainer = Trainer("experiment_name") train_params = { ... # 训练参数 "sg_logger": "wandb_sg_logger", # Weights&Biases 日志记录器,详见 WandBSGLogger 类 "sg_logger_params": # 将传递给日志记录器 __init__ 的参数 { "project_name": "project_name", # W&B 项目名称 "save_checkpoints_remote": True "save_tensorboard_remote": True "save_logs_remote": True } }
</details> <details markdown="1"> <summary><h3> 与 ClearML 集成 </h3></summary>
from super_gradients import Trainer # 创建一个训练器对象,查看声明以获取更多参数 trainer = Trainer("experiment_name") train_params = { ... # 训练参数 "sg_logger": "clearml_sg_logger", # ClearML 日志记录器,详见 ClearMLSGLogger 类 "sg_logger_params": # 将传递给日志记录器 __init__ 的参数 { "project_name": "project_name", # ClearML 项目名称 "save_checkpoints_remote": True, "save_tensorboard_remote": True, "save_logs_remote": True, } }
</details> <details markdown="1"> <summary><h3> 与 Voxel51 集成 </h3></summary>

你可以使用 apply_model() 方法直接将 SuperGradients YOLO-NAS 模型应用于你的 FiftyOne 数据集:

import fiftyone as fo import fiftyone.zoo as foz from super_gradients.training import models dataset = foz.load_zoo_dataset("quickstart", max_samples=25) dataset.select_fields().keep_fields() model = models.get("yolo_nas_m", pretrained_weights="coco") dataset.apply_model(model, label_field="yolo_nas", confidence_thresh=0.7) session = fo.launch_app(dataset)

可以直接从 FiftyOne Model Zoo 访问 SuperGradients YOLO-NAS 模型:

import fiftyone as fo import fiftyone.zoo as foz model = foz.load_zoo_model("yolo-nas-torch") dataset = foz.load_zoo_dataset("quickstart") dataset.apply_model(model, label_field="yolo_nas") session = fo.launch_app(dataset)
</details>

安装方法


前提条件

<details markdown="1"> <summary>一般要求</summary> </details> <details markdown="1"> <summary>在 nvidia GPU 上训练</summary> </details>

快速安装

<details markdown="1"> <summary>使用 PyPi 安装稳定版本</summary>

参见 PyPi

pip install super-gradients

就这么简单!

</details> <details markdown="1"> <summary>使用 GitHub 安装</summary>
pip install git+https://github.com/Deci-AI/super-gradients.git@stable
</details>

已实现的模型架构


所有计算机视觉模型 - 预训练检查点可在模型库中找到

图像分类

语义分割

目标检测

姿态估计


已实现的数据集


Deci提供了各种数据集的实现。如果您需要下载任何数据集,可以查看说明

图像分类

语义分割

目标检测

姿态估计


文档

查看SuperGradients文档以获取完整文档、用户指南和示例。

贡献

要了解如何为SuperGradients做出贡献,请参阅我们的贡献页面

我们出色的贡献者:

<a href="https://github.com/Deci-AI/super-gradients/graphs/contributors"> <img src="https://contrib.rocks/image?repo=Deci-AI/super-gradients" /> </a>

<br/>contrib.rocks制作。

引用

如果您在研究中使用SuperGradients库或基准测试,请引用SuperGradients深度学习训练库。

社区

如果您想成为SuperGradients不断壮大的社区的一员,了解所有激动人心的新闻和更新,需要帮助,请求高级功能,或想要报告错误或问题,我们非常欢迎您的加入!

许可证

本项目根据Apache 2.0许可证发布。

引用

BibTeX

@misc{supergradients, doi = {10.5281/ZENODO.7789328}, url = {https://zenodo.org/record/7789328}, author = {Aharon, Shay and {Louis-Dupont} and {Ofri Masad} and Yurkova, Kate and {Lotem Fridman} and {Lkdci} and Khvedchenya, Eugene and Rubin, Ran and Bagrov, Natan and Tymchenko, Borys and Keren, Tomer and Zhilko, Alexander and {Eran-Deci}}, title = {Super-Gradients}, publisher = {GitHub}, journal = {GitHub repository}, year = {2021}, }

最新DOI

DOI


在此处申请免费试用

编辑推荐精选

讯飞智文

讯飞智文

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

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

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

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

Trae

Trae

字节跳动发布的AI编程神器IDE

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

AI工具TraeAI IDE协作生产力转型热门
咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

热门AI辅助写作AI工具讯飞绘文内容运营AI创作个性化文章多平台分发AI助手
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

openai-agents-python

openai-agents-python

OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。

openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。

Hunyuan3D-2

Hunyuan3D-2

高分辨率纹理 3D 资产生成

Hunyuan3D-2 是腾讯开发的用于 3D 资产生成的强大工具,支持从文本描述、单张图片或多视角图片生成 3D 模型,具备快速形状生成能力,可生成带纹理的高质量 3D 模型,适用于多个领域,为 3D 创作提供了高效解决方案。

3FS

3FS

一个具备存储、管理和客户端操作等多种功能的分布式文件系统相关项目。

3FS 是一个功能强大的分布式文件系统项目,涵盖了存储引擎、元数据管理、客户端工具等多个模块。它支持多种文件操作,如创建文件和目录、设置布局等,同时具备高效的事件循环、节点选择和协程池管理等特性。适用于需要大规模数据存储和管理的场景,能够提高系统的性能和可靠性,是分布式存储领域的优质解决方案。

下拉加载更多