SSL เบา ๆ เป็นกรอบการมองเห็นคอมพิวเตอร์สำหรับการเรียนรู้ที่ดูแลตนเอง
สำหรับเวอร์ชันเชิงพาณิชย์ที่มีคุณสมบัติเพิ่มเติมรวมถึงการสนับสนุนนักเทียบท่าและแบบจำลองการเตรียมการสำหรับการฝัง, การจำแนก, การตรวจจับและการแบ่งส่วนที่มีคำสั่งเดียวโปรดติดต่อ [email protected]
นอกจากนี้เรายังได้สร้างแพลตฟอร์มทั้งหมดไว้ด้านบนด้วยคุณสมบัติเพิ่มเติมสำหรับการเรียนรู้ที่ใช้งานและการจัดการข้อมูล หากคุณสนใจโซลูชันคนงานเบา ๆ เพื่อประมวลผลตัวอย่างนับล้านและเรียกใช้อัลกอริทึมที่ทรงพลังบนข้อมูลของคุณลองดูเบา ๆ มีอิสระที่จะเริ่มต้น!
กรอบการเรียนรู้ที่ดูแลตนเองนี้มีคุณสมบัติดังต่อไปนี้:
คุณสามารถค้นหาโค้ดตัวอย่างสำหรับทุกรุ่นที่รองรับได้ที่นี่ เราให้บริการ Pytorch, Pytorch Lightning และ Pytorch Lightning Distributed ตัวอย่างสำหรับทุกรุ่นเพื่อเริ่มต้นโครงการของคุณ
รุ่น :
| แบบอย่าง | ปี | กระดาษ | เอกสาร | colab (pytorch) | Colab (Pytorch Lightning) |
|---|---|---|---|---|---|
| จุดมุ่งหมาย | 2024 | กระดาษ | เอกสาร | ||
| Barlow Twins | 2021 | กระดาษ | เอกสาร | ||
| Byol | 2020 | กระดาษ | เอกสาร | ||
| DCL & DCLW | 2021 | กระดาษ | เอกสาร | ||
| การตัดทอน | 2021 | กระดาษ | เอกสาร | ||
| Dino | 2021 | กระดาษ | เอกสาร | ||
| แม่ | 2021 | กระดาษ | เอกสาร | ||
| MSN | 2022 | กระดาษ | เอกสาร | ||
| คนขี้เกียจ | 2019 | กระดาษ | เอกสาร | ||
| nnclr | 2021 | กระดาษ | เอกสาร | ||
| PMSN | 2022 | กระดาษ | เอกสาร | ||
| simclr | 2020 | กระดาษ | เอกสาร | ||
| ซิมมี่ | 2022 | กระดาษ | เอกสาร | ||
| Simsiam | 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 )ดูเอกสารของเราสำหรับตัวอย่าง Lightning Pytorch เต็มรูปแบบ
หรือฝึกอบรมแบบจำลอง 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 ด้วยการรวบรวมแบบกระจายและ batchnorm แบบซิงโครไนซ์ ดูเอกสารของเราเกี่ยวกับการฝึกอบรมแบบกระจาย
โมเดลที่ใช้งานและประสิทธิภาพของพวกเขาในชุดข้อมูลต่าง ๆ Hyperparameters ไม่ได้รับการปรับเพื่อความแม่นยำสูงสุด สำหรับผลลัพธ์โดยละเอียดและข้อมูลเพิ่มเติมเกี่ยวกับเกณฑ์มาตรฐานคลิกที่นี่
ImageNet1K benchmarks
หมายเหตุ : การตั้งค่าการประเมินผลจะขึ้นอยู่กับเอกสารเหล่านี้:
ดูสคริปต์การเปรียบเทียบสำหรับรายละเอียด
| แบบอย่าง | กระดูกสันหลัง | ขนาดแบทช์ | ยุค | top1 เชิงเส้น 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 | การเชื่อมโยง | การเชื่อมโยง |
| Dino | 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 | การเชื่อมโยง | การเชื่อมโยง |
| การสวด | Res50 | 256 | 100 | 67.2 | 75.4 | 49.5 | การเชื่อมโยง | การเชื่อมโยง |
| tico | Res50 | 256 | 100 | 49.7 | 72.7 | 26.6 | การเชื่อมโยง | การเชื่อมโยง |
| เวิร์ก | Res50 | 256 | 100 | 63.0 | 73.7 | 46.3 | การเชื่อมโยง | การเชื่อมโยง |
*เราใช้การปรับสเกลอัตราการเรียนรู้ของสแควร์รูทแทนการปรับขนาดเชิงเส้นเนื่องจากให้ผลลัพธ์ที่ดีกว่าสำหรับขนาดแบทช์ขนาดเล็ก ดูภาคผนวก B.1 ในกระดาษ SIMCLR
ImageNet100 Benchmarks ผลลัพธ์โดยละเอียด
Imagenette Benchmarks ผลลัพธ์โดยละเอียด
มาตรฐาน CIFAR-10
ด้านล่างคุณสามารถดูภาพรวมแผนผังของแนวคิดที่แตกต่างกันในแพ็คเกจ ข้อกำหนดใน BOLD มีการอธิบายรายละเอียดเพิ่มเติมในเอกสารของเรา

มุ่งหน้าไปยังเอกสารและดูสิ่งที่คุณสามารถทำได้ด้วยเบา ๆ !
ในการติดตั้ง Dev Dependencies (ตัวอย่างเช่นเพื่อสนับสนุนเฟรมเวิร์ก) คุณสามารถใช้คำสั่งต่อไปนี้:
pip3 install -e ".[dev]"
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีการมีส่วนร่วมให้ดูที่นี่
การทดสอบหน่วยอยู่ในไดเรกทอรีการทดสอบและเราขอแนะนำให้เรียกใช้โดยใช้ pytest มีการกำหนดค่าการทดสอบสองแบบ โดยค่าเริ่มต้นจะมีเพียงชุดย่อยเท่านั้นที่จะเรียกใช้:
make test-fast
ในการเรียกใช้การทดสอบทั้งหมด (รวมถึงการทดสอบช้า) คุณสามารถใช้คำสั่งต่อไปนี้:
make test
เพื่อทดสอบไฟล์หรือไดเรกทอรีที่เฉพาะเจาะจง:
pytest <path to file or directory>
ในการจัดรูปแบบรหัสด้วย Black และ Isort Run:
make format
การเรียนรู้ที่เป็นผู้ดูแลตนเอง :
ทำไมฉันต้องสนใจเกี่ยวกับการเรียนรู้ที่ดูแลตนเอง? โมเดลที่ผ่านการฝึกอบรมมาก่อนจาก Imagenet ดีกว่าสำหรับการถ่ายโอนการเรียนรู้หรือไม่?
ฉันจะมีส่วนร่วมได้อย่างไร?
เฟรมเวิร์กนี้ฟรีหรือไม่?
หากเฟรมเวิร์กนี้ฟรี บริษัท ที่อยู่เบื้องหลังการทำเงินเบา ๆ เป็นอย่างไร?
เบา ๆ เป็นสปินออฟจาก ETH Zurich ที่ช่วยให้ บริษัท ต่างๆสร้างท่อการเรียนรู้ที่ใช้งานได้อย่างมีประสิทธิภาพเพื่อเลือกข้อมูลที่เกี่ยวข้องมากที่สุดสำหรับแบบจำลองของพวกเขา
คุณสามารถหาข้อมูลเพิ่มเติมเกี่ยวกับ บริษัท และบริการได้โดยไปที่ลิงก์ด้านล่าง:
กลับไปด้านบน