lightly

lightly-aiMIT活跃维护

基于 PyTorch 的自监督学习库,用对比学习和 JEPA 世界模型在无标注图像上训练表征,省去人工标注成本。

A python library for self-supervised learning and latent world models on images.

v1.6.0发布于 2026-10-26 19:29 UTC3,831star378fork同步于 2026-11-10 11:39 UTC

怎么上手

由 README 提炼,执行前请确认
pip3 install lightly
硬件要求按 README 说明

README 未说明具体显存或 GPU 型号要求;示例代码使用 ResNet18 和 batch_size=128,建议在 GPU 上训练。

多卡 / 张量并行
下载:源码 zip·GitHub Releases(安装包)本站不镜像安装包

项目说明

由 README 自动翻译提炼

PyTorch 自监督学习框架,提供模块化损失、模型头和数据集,快速搭建图像预训练流程

基于 PyTorch 的自监督学习库,用对比学习和 JEPA 世界模型在无标注图像上训练表征,省去人工标注成本。

核心能力

  • 提供 MoCo、SimCLR、BYOL、SwaV 等自监督方法的模块化实现
  • 暴露损失函数、投影头等底层组件,可按需自由组合
  • 支持自定义骨干网络进行自监督预训练
  • 基于 PyTorch Lightning 支持分布式训练
  • 新增 LeWM 世界模型与 LeJEPA 自监督方法支持

容易踩的坑

需 Python 3.8+ 且暂不支持 Python 3.13;依赖 PyTorch>=1.11.0、Torchvision>=0.12.0、PyTorch Lightning>=1.7.1;LeWM 需通过 pip install "lightly[timm]" 安装并依赖 PyTorch 2.0+;建议在独立虚拟环境中安装以避免依赖冲突。

内容由模型根据 README 生成,可能不完整或不准确,以官方文档为准。看原文 README

最近发版

5 个版本v1.6.0
  1. v1.6.0最新正式版2026-10-26 · 2026-10-26 19:29 UTC

    Highlights

    LightlySSL now trains latent world models, starting with LeWM (#2032). LeWM predicts the embedding of the next frame from past frames and actions. Try it in the tutorial Train a World Model and Plan with It (#2076). The world model modules are experimental.

    LeWM planning

    New method: CAPI, with examples, docs and an ImageNet benchmark (#1993, #1994, #1995, #1996, #1998).

    The MAE and Pixio TIMM decoders are deprecated in favor of the new MaskedVisionTransformerDecoder (#1978, #2006).

    Breaking changes

    • The API client is removed. If you still need ApiWorkflowClient, pin lightly<1.6 (#1939). These modules and commands are gone:
    lightly.api, lightly.openapi_generated, lightly.active_learning
    lightly-download, lightly-serve
    
    • Deprecated collate functions, model wrappers and arguments are removed, and the PR has a migration table (#2021). The removals are:
    lightly.data.collate                (the whole module)
    lightly.data.imagenet_normalize
    lightly.models.{BarlowTwins, BYOL, MoCo, NNCLR, SimCLR, SimSiam}
    lightly.loss.SymNegCosineSimilarityLoss
    MSNLoss(me_max_weight=...)
    GaussianBlur(kernel_size=..., scale=...)
    MemoryBankModule(size=<int>)
    trainer.weights_summary             (CLI config)
    
    • Python 3.7 is no longer supported (#2028).
    • I-JEPA predictor checkpoints from earlier releases no longer load with strict=True, because the predictor's submodules were renamed (#1978).

    Fixes

    • LeJEPALoss now includes all views in SIGReg and the invariance term, so its loss values differ from earlier releases (#2023).
    • WMSELoss no longer raises RuntimeError on construction (#2045).

    What's Changed

  2. v1.5.262026-07-27 · 2026-07-27 17:39 UTC
    查看更新说明

    What's Changed

    New Contributors

    Full Changelog: https://github.com/lightly-ai/lightly/compare/v1.5.25...v1.5.26

  3. v1.5.252026-06-17 · 2026-06-17 18:13 UTC
    查看更新说明

    What's Changed

    New Contributors

    Full Changelog: https://github.com/lightly-ai/lightly/compare/v1.5.24...v1.5.25

  4. v1.5.242026-05-28 · 2026-05-28 17:57 UTC
    查看更新说明

    Implement LeJEPA!

    What's Changed

    New Contributors

    Full Changelog: https://github.com/lightly-ai/lightly/compare/v1.5.23...v1.5.24

  5. v1.5.232026-03-24 · 2026-03-24 15:28 UTC
    查看更新说明

    What's Changed

    New Contributors

    Full Changelog: https://github.com/lightly-ai/lightly/compare/v1.5.22...v1.5.23

    Many thanks to our contributors!

    Models

用户点评

登录用户的真实使用记录,可按版本和硬件筛选
共 0 条

    还没有人点评。第一个说出真实体验的人最有价值。

    README 原文

    未翻译

    LightlySSL self-supervised learning Logo

    GitHub Unit Tests PyPI Downloads Ruff Discord Twitter

    LightlySSL is a computer vision framework for self-supervised learning and latent world models.

    For a commercial version with more features, including Docker support and pretraining models for embedding, classification, detection, and segmentation tasks with a single command, please contact [email protected].

    We've also built a whole platform on top, with additional features for active learning and data curation. If you're interested in the LightlyStudio, our all-in-one product for data curation and labeling on your data, check out lightly.ai. It's free to get started!

    News 🚀

    • October 26, 2026 - LightlySSL now trains world models! Learn how a scene responds to actions with LeWM and plan with it in our new tutorial. 🌍
    • May 28, 2026 - We now have LeJEPA support for self-supervised learning! 🧬
    • March 23, 2026 - Check out our latest open-source project LightlyStudio to visualize, annotate, and manage your data with ease! 🔍
    • April 15, 2025 - We are excited to announce that you can now leverage SSL and distillation pretraining in just a few lines of code! We've worked hard to make self-supervised learning even more accessible with our new project LightlyTrain. Head over there to get started and supercharge your models! ⚡️

    World Models 🌍

    A world model learns how a scene responds to actions. LeWM learns it from raw frames and actions, then plans by imagining the outcome of each move in its own embedding space.

    pip install "lightly[timm]"  # LeWM needs PyTorch 2.0+
    

    Features

    This self-supervised learning framework offers the following features:

    • Modular framework, which exposes low-level building blocks such as loss functions and model heads.
    • Easy to use and written in a PyTorch-like style.
    • Supports custom backbone models for self-supervised pre-training.
    • Support for distributed training using PyTorch Lightning.

    Supported Models

    You can find sample code for all the supported models here. We provide PyTorch, PyTorch Lightning, and PyTorch Lightning distributed examples for all models to kickstart your project.

    Models:

    ModelYearPaperDocsColab (PyTorch)Colab (PyTorch Lightning)
    MoCo2019paperdocsOpen In ColabOpen In Colab
    SimCLR2020paperdocsOpen In ColabOpen In Colab
    BYOL2020paperdocsOpen In ColabOpen In Colab
    SwaV2020paperdocsOpen In ColabOpen In Colab
    DenseCL2020paperdocsOpen In ColabOpen In Colab
    SimSiam2020paperdocsOpen In ColabOpen In Colab
    Barlow Twins2021paperdocsOpen In ColabOpen In Colab
    DetConS2021paperdocsOpen In ColabOpen In Colab
    DINO2021paperdocsOpen In ColabOpen In Colab
    NNCLR2021paperdocsOpen In ColabOpen In Colab
    VICReg2021paperdocsOpen In ColabOpen In Colab
    DCL & DCLW2021paperdocsOpen In ColabOpen In Colab
    MAE2021paperdocsOpen In ColabOpen In Colab
    iBOT2021paperdocsOpen In ColabOpen In Colab
    SimMIM2021paperdocsOpen In ColabOpen In Colab
    MSN2022paperdocsOpen In ColabOpen In Colab
    PMSN2022paperdocsOpen In ColabOpen In Colab
    DINOv22023paperdocsOpen In ColabOpen In Colab
    FroSSL2023paperdocsOpen In ColabOpen In Colab
    AIM2024paperdocsOpen In ColabOpen In Colab
    CAPI2025paperdocsOpen In ColabOpen In Colab
    LeJEPA2025paperdocsOpen In ColabOpen In Colab
    Pixio2025paperdocsOpen In ColabOpen In Colab

    World models:

    ModelYearPaperDocsColab (PyTorch)
    LeWM2026paperdocsOpen In Colab

    Tutorials

    Want to jump to the tutorials and see Lightly in action?

    Community and partner projects:

    Quick Start

    Lightly requires Python 3.8+. We recommend installing Lightly in a Linux or OSX environment. Python 3.13 is not yet supported, as PyTorch itself lacks Python 3.13 compatibility.

    Dependencies

    Due to the modular nature of the Lightly package some modules can be used with older versions of dependencies. However, to use all features as of today lightly requires the following dependencies:

    Lightly is compatible with PyTorch and PyTorch Lightning v2.0+!

    Installation

    You can install Lightly and its dependencies from PyPI with:

    pip3 install lightly
    

    We strongly recommend installing Lightly in a dedicated virtualenv to avoid conflicts with your system packages.

    Lightly in Action

    With Lightly, you can use the latest self-supervised learning methods in a modular way using the full power of PyTorch. Experiment with various backbones, models, and loss functions. The framework has been designed to be easy to use from the ground up. Find more examples in our docs.

    import torch
    import torchvision
    
    from lightly import loss
    from lightly import transforms
    from lightly.data import LightlyDataset
    from lightly.models.modules import heads
    
    
    # Create a PyTorch module for the SimCLR model.
    class SimCLR(torch.nn.Module):
        def __init__(self, backbone):
            super().__init__()
            self.backbone = backbone
            self.projection_head = heads.SimCLRProjectionHead(
                input_dim=512,  # Resnet18 features have 512 dimensions.
                hidden_dim=512,
                output_dim=128,
            )
    
        def forward(self, x):
            features = self.backbone(x).flatten(start_dim=1)
            z = self.projection_head(features)
            return z
    
    
    # Use a resnet backbone from torchvision.
    backbone = torchvision.models.resnet18()
    # Ignore the classification head as we only want the features.
    backbone.fc = torch.nn.Identity()
    
    # Build the SimCLR model.
    model = SimCLR(backbone)
    
    # Prepare transform that creates multiple random views for every image.
    transform = transforms.SimCLRTransform(input_size=32, cj_prob=0.5)
    
    
    # Create a dataset from your image folder.
    dataset = LightlyDataset(input_dir="./my/cute/cats/dataset/", transform=transform)
    
    # Build a PyTorch dataloader.
    dataloader = torch.utils.data.DataLoader(
        dataset,  # Pass the dataset to the dataloader.
        batch_size=128,  # A large batch size helps with the learning.
        shuffle=True,  # Shuffling is important!
    )
    
    # Lightly exposes building blocks such as loss functions.
    criterion = loss.NTXentLoss(temperature=0.5)
    
    # Get a PyTorch optimizer.
    optimizer = torch.optim.SGD(model.parameters(), lr=0.1, weight_decay=1e-6)
    
    # Train the model.
    for epoch in range(10):
        for (view0, view1), targets, filenames in dataloader:
            z0 = model(view0)
            z1 = model(view1)
            loss = criterion(z0, z1)
            loss.backward()
            optimizer.step()
            optimizer.zero_grad()
            print(f"loss: {loss.item():.5f}")
    

    You can easily use another model like SimSiam by swapping the model and the loss function.

    # PyTorch module for the SimSiam model.
    class SimSiam(torch.nn.Module):
        def __init__(self, backbone):
            super().__init__()
            self.backbone = backbone
            self.projection_head = heads.SimSiamProjectionHead(512, 512, 128)
            self.prediction_head = heads.SimSiamPredictionHead(128, 64, 128)
    
        def forward(self, x):
            features = self.backbone(x).flatten(start_dim=1)
            z = self.projection_head(features)
            p = self.prediction_head(z)
            z = z.detach()
            return z, p
    
    
    model = SimSiam(backbone)
    
    # Use the SimSiam loss function.
    criterion = loss.NegativeCosineSimilarity()
    

    You can find a more complete example for SimSiam here.

    Use PyTorch Lightning to train the model:

    from pytorch_lightning import LightningModule, Trainer
    
    class SimCLR(LightningModule):
        def __init__(self):
            super().__init__()
            resnet = torchvision.models.resnet18()
            resnet.fc = torch.nn.Identity()
            self.backbone = resnet
            self.projection_head = heads.SimCLRProjectionHead(512, 512, 128)
            self.criterion = loss.NTXentLoss()
    
        def forward(self, x):
            features = self.backbone(x).flatten(start_dim=1)
            z = self.projection_head(features)
            return z
    
        def training_step(self, batch, batch_index):
            (view0, view1), _, _ = batch
            z0 = self.forward(view0)
            z1 = self.forward(view1)
            loss = self.criterion(z0, z1)
            return loss
    
        def configure_optimizers(self):
            optim = torch.optim.SGD(self.parameters(), lr=0.06)
            return optim
    
    
    model = SimCLR()
    trainer = Trainer(max_epochs=10, devices=1, accelerator="gpu")
    trainer.fit(model, dataloader)
    

    See our docs for a full PyTorch Lightning example.

    Or train the model on 4 GPUs:

    
    # Use distributed version of loss functions.
    criterion = loss.NTXentLoss(gather_distributed=True)
    
    trainer = Trainer(
        max_epochs=10,
        devices=4,
        accelerator="gpu",
        strategy="ddp",
        sync_batchnorm=True,
        use_distributed_sampler=True,  # or replace_sampler_ddp=True for PyTorch Lightning <2.0
    )
    trainer.fit(model, dataloader)
    

    We provide multi-GPU training examples with distributed gather and synchronized BatchNorm. Have a look at our docs regarding distributed training.

    Benchmarks

    Implemented models and their performance on various datasets. Hyperparameters are not tuned for maximum accuracy. For detailed results and more information about the benchmarks click here.

    ImageNet1k

    ImageNet1k benchmarks

    Note: Evaluation settings are based on these papers:

    See the benchmarking scripts for details.

    ModelBackboneBatch SizeEpochsLinear Top1Finetune Top1kNN Top1TensorboardCheckpoint
    BarlowTwinsRes5025610062.972.645.6linklink
    BYOLRes5025610062.574.546.0linklink
    DINORes5012810068.272.549.9linklink
    DINOViT-S/1612810073.379.867.5linklink
    iBOTViT-S/1612810072.278.365.4linklink
    LeJEPA**ViT-S/1651210064.078.747.1linklink
    MAEViT-B/1625610046.081.311.2linklink
    MoCoV2Res5025610061.574.341.8linklink
    SimCLR*Res5025610063.273.944.8linklink
    SimCLR* + DCLRes5025610065.173.549.6linklink
    SimCLR* + DCLWRes5025610064.573.248.5linklink
    SwAVRes5025610067.275.449.5linklink
    TiCoRes5025610049.772.726.6linklink
    VICRegRes5025610063.073.746.3linklink

    *We use square root learning rate scaling instead of linear scaling as it yields better results for smaller batch sizes. See Appendix B.1 in the SimCLR paper.

    **The LeJEPA numbers were published in #1935 (a08c5c35) and predate the loss fix in #2023, which adds the global views to SIGReg and the invariance term. They will be updated after a re-run.

    ImageNet100

    ImageNet100 benchmarks detailed results

    Imagenette

    Imagenette benchmarks detailed results

    CIFAR-10

    CIFAR-10 benchmarks detailed results

    Terminology

    Below you can see a schematic overview of the different concepts in the package. The terms in bold are explained in more detail in our documentation.

    Next Steps

    Head to the documentation and see the things you can achieve with Lightly!

    Development

    We use uv to manage dependencies. To set up a development environment (for example to contribute to the framework) you can use the following command:

    make install-dev
    

    This installs the package with all extras and development dependencies, and sets up the pre-commit hooks. You do not need to activate the virtual environment manually.

    For more information about how to contribute have a look here.

    Running Tests

    Unit tests are within the tests directory and we recommend running them using pytest. There are two test configurations available. By default, only a subset will be run:

    make test-fast
    

    To run all tests (including the slow ones) you can use the following command:

    make test
    

    To test a specific file or directory use:

    uv run --frozen pytest <path to file or directory>
    

    Code Formatting

    To format code with ruff run:

    make format
    

    Further Reading

    Self-Supervised Learning:

    FAQ

    • Why should I care about self-supervised learning? Aren't pre-trained models from ImageNet much better for transfer learning?

      • Self-supervised learning has become increasingly popular among scientists over the last years because the learned representations perform extraordinarily well on downstream tasks. This means that they capture the important information in an image better than other types of pre-trained models. By training a self-supervised model on your dataset, you can make sure that the representations have all the necessary information about your images.
    • How can I contribute?

      • Create an issue if you encounter bugs or have ideas for features we should implement. You can also add your own code by forking this repository and creating a PR. More details about how to contribute with code is in our contribution guide.
    • Is this framework for free?

      • Yes, this framework is completely free to use and we provide the source code. We believe that we need to make training deep learning models more data efficient to achieve widespread adoption. One step to achieve this goal is by leveraging self-supervised learning. The company behind Lightly is committed to keep this framework open-source.
    • If this framework is free, how is the company behind Lightly making money?

      • Training self-supervised models is only one part of our solution. The company behind Lightly focuses on processing and analyzing embeddings created by self-supervised models. By building, what we call a self-supervised active learning loop we help companies understand and work with their data more efficiently. As the Lightly Solution is a freemium product, you can try it out for free. However, we will charge for some features.
      • In any case this framework will always be free to use, even for commercial purposes.

    Lightly in Research

    Company behind this Open Source Framework

    Lightly is a spin-off from ETH Zurich that helps companies build efficient active learning pipelines to select the most relevant data for their models.

    You can find out more about the company and it's services by following the links below:

    Back to top🚀