가볍게 SSL은 자기 감독 학습을위한 컴퓨터 비전 프레임 워크입니다.
단일 명령으로 포함, 분류, 감지 및 세분화 작업을위한 Docker 지원 및 사전 여과 모델을 포함한 더 많은 기능이있는 상용 버전의 경우 [email protected]로 문의하십시오.
또한 능동 학습 및 데이터 큐 레이션을위한 추가 기능과 함께 전체 플랫폼을 구축했습니다. 가벼운 작업자 솔루션에 관심이 있으시면 수백만 개의 샘플을 쉽게 처리하고 데이터에서 강력한 알고리즘을 실행하는 경우 가볍게 확인하십시오. 무료로 시작할 수 있습니다!
이 자체 감독 학습 프레임 워크는 다음과 같은 기능을 제공합니다.
모든 지원되는 모델에 대한 샘플 코드를 여기에서 찾을 수 있습니다. 우리는 모든 모델에 대한 Pytorch, Pytorch Lightning 및 Pytorch Lightning Distributed 예제를 제공하여 프로젝트를 시작합니다.
모델 :
| 모델 | 년도 | 종이 | 문서 | Colab (Pytorch) | Colab (Pytorch Lightning) |
|---|---|---|---|---|---|
| 목표 | 2024 | 종이 | 문서 | ||
| 바로우 쌍둥이 | 2021 | 종이 | 문서 | ||
| Byol | 2020 | 종이 | 문서 | ||
| DCL & DCLW | 2021 | 종이 | 문서 | ||
| densecl | 2021 | 종이 | 문서 | ||
| 디노 | 2021 | 종이 | 문서 | ||
| 매 | 2021 | 종이 | 문서 | ||
| MSN | 2022 | 종이 | 문서 | ||
| 모코 | 2019 | 종이 | 문서 | ||
| nnclr | 2021 | 종이 | 문서 | ||
| PMSN | 2022 | 종이 | 문서 | ||
| SIMCLR | 2020 | 종이 | 문서 | ||
| 심무 | 2022 | 종이 | 문서 | ||
| 심시암 | 2021 | 종이 | 문서 | ||
| Swav | 2020 | 종이 | 문서 | ||
| Vicreg | 2021 | 종이 | 문서 |
튜토리얼로 뛰어 들어 가볍게 행동하고 싶습니까?
커뮤니티 및 파트너 프로젝트 :
가볍게 파이썬 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 )우리는 분산 된 수집 및 동기화 된 Batchnorm과 함께 멀티 GPU 교육 예제를 제공합니다. 분산 교육에 관한 문서를 살펴보십시오.
다양한 데이터 세트에서 모델과 성능을 구현했습니다. 하이퍼 파라미터는 최대 정확도를 위해 조정되지 않습니다. 자세한 결과와 벤치 마크에 대한 자세한 내용은 여기를 클릭하십시오.
imagenet1k 벤치 마크
참고 : 평가 설정은이 논문을 기반으로합니다.
자세한 내용은 벤치마킹 스크립트를 참조하십시오.
| 모델 | 등뼈 | 배치 크기 | 에포크 | 선형 상단 1 | Finetune Top1 | KNN TOP1 | 텐서 보드 | 검문소 |
|---|---|---|---|---|---|---|---|---|
| Barlowtwins | RES50 | 256 | 100 | 62.9 | 72.6 | 45.6 | 링크 | 링크 |
| Byol | 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 벤치 마크 상세한 결과
Imagenette 벤치 마크 상세한 결과
CIFAR-10 벤치 마크 상세한 결과
아래에서는 패키지의 다양한 개념에 대한 개략도를 볼 수 있습니다. 대담한 용어는 문서에 자세히 설명되어 있습니다.

문서로 가서 가볍게 달성 할 수있는 것들을보십시오!
DEV 종속성을 설치하려면 (예 : 프레임 워크에 기여하기 위해) 다음 명령을 사용할 수 있습니다.
pip3 install -e ".[dev]"
기부 방법에 대한 자세한 내용은 여기를 참조하십시오.
단위 테스트는 테스트 디렉토리 내에 있으며 Pytest를 사용하여 실행하는 것이 좋습니다. 사용 가능한 두 가지 테스트 구성이 있습니다. 기본적으로 서브 세트 만 실행됩니다.
make test-fast
모든 테스트 (느린 테스트 포함)를 실행하려면 다음 명령을 사용할 수 있습니다.
make test
특정 파일 또는 디렉토리 사용을 테스트하려면 :
pytest <path to file or directory>
검은 색 및 ISORT 실행으로 코드를 포맷하려면 :
make format
자기 감독 학습 :
왜 자기 감독 학습에 관심을 가져야합니까? Imagenet의 미리 훈련 된 모델이 전송 학습을 위해 훨씬 나은 모델이 아닌가?
어떻게 기여할 수 있습니까?
이 프레임 워크는 무료입니까?
이 프레임 워크가 무료라면 회사는 어떻게 돈을 벌고 있습니까?
Lightly는 ETH 취리히의 분사로, 회사가 효율적인 활성 학습 파이프 라인을 구축하여 모델에 가장 관련성이 높은 데이터를 선택할 수 있도록 도와줍니다.
아래 링크를 따라 회사와 서비스에 대한 자세한 내용을 확인할 수 있습니다.
위로 돌아갑니다