軽くSSLは、自己教師の学習のためのコンピュータービジョンフレームワークです。
埋め込み、分類、検出、および単一のコマンドを使用したセグメンテーションタスクのためのDockerサポートや事前削除モデルなど、より多くの機能を備えた商用バージョンについては、[email protected]にお問い合わせください。
また、アクティブな学習とデータキュレーションのための追加機能を備えたプラットフォーム全体を上に構築しました。数百万のサンプルを簡単に処理し、データで強力なアルゴリズムを実行するための軽度のワーカーソリューションに興味がある場合は、軽くチェックしてください。開始するのは無料です!
この自己教師の学習フレームワークは、次の機能を提供します。
サポートされているすべてのモデルのサンプルコードをここで見つけることができます。 Pytorch、Pytorch Lightning、およびPytorch Lightningの分散例を、すべてのモデルがプロジェクトを開始するための例を提供します。
モデル:
| モデル | 年 | 紙 | ドキュメント | colab(pytorch) | colab(pytorch lightning) |
|---|---|---|---|---|---|
| 標的 | 2024 | 紙 | ドキュメント | ||
| バーロウ双子 | 2021 | 紙 | ドキュメント | ||
| バイオル | 2020 | 紙 | ドキュメント | ||
| DCL&DCLW | 2021 | 紙 | ドキュメント | ||
| densecl | 2021 | 紙 | ドキュメント | ||
| ディノ | 2021 | 紙 | ドキュメント | ||
| メイ | 2021 | 紙 | ドキュメント | ||
| MSN | 2022 | 紙 | ドキュメント | ||
| モコ | 2019年 | 紙 | ドキュメント | ||
| nnclr | 2021 | 紙 | ドキュメント | ||
| PMSN | 2022 | 紙 | ドキュメント | ||
| simclr | 2020 | 紙 | ドキュメント | ||
| シムミム | 2022 | 紙 | ドキュメント | ||
| シムシアム | 2021 | 紙 | ドキュメント | ||
| swav | 2020 | 紙 | ドキュメント | ||
| vicreg | 2021 | 紙 | ドキュメント |
チュートリアルにジャンプして、動いているように軽く見たいですか?
コミュニティとパートナーのプロジェクト:
Python 3.7+が軽く必要です。 LinuxまたはOSX環境に軽くインストールすることをお勧めします。 Pytorch自体にはPython 3.13の互換性がないため、Python 3.13はまだサポートされていません。
軽いパッケージのモジュール性の性質により、一部のモジュールは、依存関係の古いバージョンで使用できます。ただし、今日のすべての機能を使用するには、次の依存関係が軽く必要です。
PytorchとPytorch Lightning v2.0+と軽く互換性があります!
Pypiからの依存関係を軽くインストールできます。
pip3 install lightly
システムパッケージとの競合を避けるために、専用のVirtualenvに軽くインストールすることを強くお勧めします。
軽く使用すると、Pytorchの全力を使用して、最新の自己監視学習方法をモジュラー方法で使用できます。さまざまなバックボーン、モデル、および損失関数を試します。このフレームワークは、ゼロから使いやすいように設計されています。ドキュメントでより多くの例を見つけてください。
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 } " )モデルと損失関数を交換することにより、SimSiamのような別のモデルを簡単に使用できます。
# 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 ()SimSiamのより完全な例をこちらで見つけることができます。
Pytorch Lightningを使用してモデルをトレーニングします。
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 )完全なPytorch Lightningの例については、ドキュメントを参照してください。
または、4 GPUでモデルをトレーニングします。
# 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 )分散した収集および同期バッチノームを使用して、マルチGPUトレーニングの例を提供します。分散トレーニングに関するドキュメントをご覧ください。
さまざまなデータセットで実装されたモデルとそのパフォーマンス。ハイパーパラメーターは、最大の精度のために調整されていません。詳細な結果とベンチマークの詳細については、ここをクリックしてください。
imagenet1kベンチマーク
注:評価設定は、これらの論文に基づいています。
詳細については、ベンチマークスクリプトを参照してください。
| モデル | バックボーン | バッチサイズ | エポック | 線形TOP1 | Finetune Top1 | KNN TOP1 | テンソルボード | チェックポイント |
|---|---|---|---|---|---|---|---|---|
| Barlowtwins | Res50 | 256 | 100 | 62.9 | 72.6 | 45.6 | リンク | リンク |
| バイオル | Res50 | 256 | 100 | 62.5 | 74.5 | 46.0 | リンク | リンク |
| ディノ | Res50 | 128 | 100 | 68.2 | 72.5 | 49.9 | リンク | リンク |
| メイ | VIT-B/16 | 256 | 100 | 46.0 | 81.3 | 11.2 | リンク | リンク |
| MOCOV2 | Res50 | 256 | 100 | 61.5 | 74.3 | 41.8 | リンク | リンク |
| simclr* | Res50 | 256 | 100 | 63.2 | 73.9 | 44.8 | リンク | リンク |
| simclr* + dcl | Res50 | 256 | 100 | 65.1 | 73.5 | 49.6 | リンク | リンク |
| simclr* + dclw | Res50 | 256 | 100 | 64.5 | 73.2 | 48.5 | リンク | リンク |
| swav | Res50 | 256 | 100 | 67.2 | 75.4 | 49.5 | リンク | リンク |
| ティコ | Res50 | 256 | 100 | 49.7 | 72.7 | 26.6 | リンク | リンク |
| vicreg | Res50 | 256 | 100 | 63.0 | 73.7 | 46.3 | リンク | リンク |
*より小さなバッチサイズでより良い結果が得られるため、線形スケーリングの代わりに平方根学習速度スケーリングを使用します。 SIMCLRペーパーの付録B.1を参照してください。
ImagENET100ベンチマークの詳細な結果
イメージネットベンチマークの詳細な結果
CIFAR-10ベンチマークの詳細な結果
以下に、パッケージ内のさまざまな概念の概略図をご覧ください。太字の用語については、ドキュメントで詳細に説明しています。

ドキュメントにアクセスして、あなたが実現できることを軽く見てください!
開発者の依存関係をインストールするには(たとえば、フレームワークに貢献するため)、次のコマンドを使用できます。
pip3 install -e ".[dev]"
貢献方法の詳細については、こちらをご覧ください。
ユニットテストはテストディレクトリ内にあり、pytestを使用して実行することをお勧めします。利用可能な2つのテスト構成があります。デフォルトでは、サブセットのみが実行されます。
make test-fast
すべてのテスト(遅いものを含む)を実行するには、次のコマンドを使用できます。
make test
特定のファイルまたはディレクトリの使用をテストするには:
pytest <path to file or directory>
ブラックとISORTの実行を使用したコードをフォーマットするには:
make format
自己学習学習:
なぜ私は自己学習学習を気にする必要があるのですか? ImagENetの事前に訓練されたモデルは、転送学習のためにはるかに優れていませんか?
どうすれば貢献できますか?
このフレームワークは無料ですか?
このフレームワークが無料の場合、会社はどのようにして軽くお金を稼いでいますか?
軽くはETHチューリッヒからのスピンオフで、企業は効率的なアクティブな学習パイプラインを構築して、モデルに最も関連するデータを選択します。
以下のリンクに従って、会社とITの詳細を確認できます。
トップに戻ります