Слегка SSL -это структура компьютерного зрения для самоотверженного обучения.
Для коммерческой версии с дополнительными функциями, включая поддержку Docker и модели предварительной подготовки для внедрения, классификации, обнаружения и задач сегментации с помощью одной команды, пожалуйста, свяжитесь с [email protected].
Мы также создали целую платформу сверху, с дополнительными функциями для активного обучения и курации данных. Если вы заинтересованы в слегка рабочем решении, чтобы легко обрабатывать миллионы образцов и запустить мощные алгоритмы на ваших данных, ознакомьтесь с легким. Это бесплатно, чтобы начать!
Эта самоотверженная учебная структура предлагает следующие функции:
Вы можете найти пример кода для всех поддерживаемых моделей здесь. Мы предоставляем примеры Pytorch, Pytorch Lightning и Pytorch Lightning Distributed для всех моделей, чтобы начать ваш проект.
Модели :
| Модель | Год | Бумага | Док | Колаб (Pytorch) | Colab (Pytorch Lightning) |
|---|---|---|---|---|---|
| ЦЕЛЬ | 2024 | бумага | док | ||
| Барлоу -близнецы | 2021 | бумага | док | ||
| Биол | 2020 | бумага | док | ||
| DCL & DCLW | 2021 | бумага | док | ||
| Денсекл | 2021 | бумага | док | ||
| Дино | 2021 | бумага | док | ||
| MAE | 2021 | бумага | док | ||
| MSN | 2022 | бумага | док | ||
| Моко | 2019 | бумага | док | ||
| Nnclr | 2021 | бумага | док | ||
| PMSN | 2022 | бумага | док | ||
| Simclr | 2020 | бумага | док | ||
| Симмим | 2022 | бумага | док | ||
| Симсиам | 2021 | бумага | док | ||
| Облегающий | 2020 | бумага | док | ||
| Вик | 2021 | бумага | док |
Хотите перейти к учебным пособиям и слегка увидеть в действии?
Проекты сообщества и партнеров:
Слегка требует Python 3.7+ . Мы рекомендуем слегка установить в среде Linux или OSX . Python 3.13 еще не поддерживается, так как в самом Pytorch не хватает совместимости 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.
Или тренировать модель на 4 графических процессоров:
# 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 Clarkmarks
Примечание . Настройки оценки основаны на этих документах:
Смотрите сценарии сравнительного анализа для деталей.
| Модель | Магистраль | Размер партии | Эпохи | Линейный 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 | связь | связь |
| MAE | 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 | связь | связь |
| Облегающий | Res50 | 256 | 100 | 67.2 | 75,4 | 49,5 | связь | связь |
| Тико | Res50 | 256 | 100 | 49,7 | 72,7 | 26.6 | связь | связь |
| Вик | Res50 | 256 | 100 | 63,0 | 73,7 | 46.3 | связь | связь |
*Мы используем масштабирование скорости обучения квадратного корня вместо линейного масштабирования, поскольку оно дает лучшие результаты для меньших размеров партий. См. Приложение B.1 в статье SIMCLR.
ImageNet100 Clarkmards подробные результаты
ImageNette Clarkmards подробные результаты
CIFAR-10 BENGMARDS подробные результаты
Ниже вы можете увидеть схему обзора различных концепций в упаковке. Условия жирного шрифта более подробно объясняются в нашей документации.

Отправляйтесь в документацию и посмотрите, чего вы можете достичь с легким!
Чтобы установить зависимости Dev (например, для внесения вклад в рамки), вы можете использовать следующую команду:
pip3 install -e ".[dev]"
Для получения дополнительной информации о том, как внести свой вклад, посмотрите здесь.
Модульные тесты находятся в каталоге тестов, и мы рекомендуем запустить их с помощью Pytest. Доступны две тестовые конфигурации. По умолчанию будет запущено только подмножество:
make test-fast
Чтобы запустить все тесты (включая медленные), вы можете использовать следующую команду:
make test
Чтобы проверить конкретный файл или использование каталога:
pytest <path to file or directory>
Форматировать код с помощью черного и избыточного запуска:
make format
Самоотверженное обучение :
Почему я должен заботиться о самоотверженном обучении? Разве предварительно обученные модели из ImageNet намного лучше для переноса обучения?
Как я могу внести свой вклад?
Эта структура бесплатно?
Если эта структура бесплатна, как компания слегка зарабатывает деньги?
Слегка является побочным продуктом от Цюриха, который помогает компаниям создавать эффективные активные учебные трубопроводы, чтобы выбрать наиболее релевантные данные для своих моделей.
Вы можете узнать больше о компании и ее услугах, следуя приведенным ниже ссылкам:
Вернуться к вершине