lightly-train 0.2.1__tar.gz → 0.2.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- lightly_train-0.2.2/.github/workflows/build_docker_image.yml +80 -0
- lightly_train-0.2.2/.github/workflows/release_dockerhub.yml +61 -0
- {lightly_train-0.2.1 → lightly_train-0.2.2}/.github/workflows/release_pypi.yml +5 -7
- lightly_train-0.2.2/.github/workflows/test.yml +58 -0
- lightly_train-0.2.2/.github/workflows/test_code_format.yml +65 -0
- lightly_train-0.2.2/.github/workflows/test_docker.yml +56 -0
- lightly_train-0.2.2/.github/workflows/test_minimal_deps.yml +61 -0
- lightly_train-0.2.2/.github/workflows/weekly_dependency_tests.yml +56 -0
- lightly_train-0.2.1/README.md → lightly_train-0.2.2/DOCS.md +1 -6
- {lightly_train-0.2.1 → lightly_train-0.2.2}/Makefile +25 -9
- lightly_train-0.2.2/PKG-INFO +75 -0
- lightly_train-0.2.2/README.md +44 -0
- lightly_train-0.2.2/dev_tools/licenseheader.tmpl +5 -0
- {lightly_train-0.2.1 → lightly_train-0.2.2}/docker/Makefile +23 -1
- {lightly_train-0.2.1 → lightly_train-0.2.2}/pyproject.toml +7 -1
- {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/__init__.py +8 -1
- lightly_train-0.2.2/src/lightly_train/_callbacks/__init__.py +7 -0
- {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_callbacks/checkpoint.py +7 -0
- {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_checkpoint.py +7 -0
- {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_cli.py +10 -0
- lightly_train-0.2.2/src/lightly_train/_commands/__init__.py +7 -0
- {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_commands/_warnings.py +9 -1
- {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_commands/common_helpers.py +7 -0
- {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_commands/embed.py +7 -0
- {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_commands/export.py +7 -0
- {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_commands/extract_video_frames.py +7 -0
- {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_commands/train.py +14 -1
- {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_commands/train_helpers.py +7 -0
- lightly_train-0.2.2/src/lightly_train/_configs/__init__.py +7 -0
- lightly_train-0.2.2/src/lightly_train/_configs/config.py +12 -0
- {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_configs/omegaconf_utils.py +7 -0
- {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_configs/validate.py +7 -0
- lightly_train-0.2.2/src/lightly_train/_constants.py +10 -0
- lightly_train-0.2.2/src/lightly_train/_embedding/__init__.py +7 -0
- lightly_train-0.2.2/src/lightly_train/_embedding/embedding_format.py +14 -0
- {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_embedding/embedding_predictor.py +7 -0
- {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_embedding/embedding_transform.py +7 -0
- lightly_train-0.2.2/src/lightly_train/_embedding/writers/__init__.py +7 -0
- {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_embedding/writers/csv_writer.py +7 -0
- {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_embedding/writers/embedding_writer.py +7 -0
- {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_embedding/writers/torch_writer.py +7 -0
- {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_embedding/writers/writer_helpers.py +7 -0
- lightly_train-0.2.2/src/lightly_train/_loggers/__init__.py +7 -0
- {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_loggers/jsonl.py +7 -0
- {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_loggers/tensorboard.py +7 -0
- lightly_train-0.2.2/src/lightly_train/_methods/__init__.py +7 -0
- {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_methods/densecl.py +7 -0
- {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_methods/densecldino.py +7 -0
- {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_methods/dino.py +7 -0
- {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_methods/method.py +7 -0
- {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_methods/method_args.py +7 -0
- {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_methods/method_helpers.py +7 -0
- {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_methods/simclr.py +7 -0
- lightly_train-0.2.2/src/lightly_train/_models/__init__.py +7 -0
- lightly_train-0.2.2/src/lightly_train/_models/custom/__init__.py +7 -0
- {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_models/custom/custom.py +7 -0
- {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_models/custom/custom_package.py +12 -1
- lightly_train-0.2.2/src/lightly_train/_models/embedding/__init__.py +7 -0
- {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_models/embedding/base.py +7 -0
- {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_models/embedding_model.py +7 -0
- {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_models/feature_extractor.py +7 -0
- {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_models/package.py +11 -1
- {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_models/package_helpers.py +10 -2
- lightly_train-0.2.2/src/lightly_train/_models/super_gradients/__init__.py +7 -0
- {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_models/super_gradients/customizable_detector.py +7 -0
- {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_models/super_gradients/super_gradients.py +7 -0
- {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_models/super_gradients/super_gradients_package.py +16 -3
- lightly_train-0.2.2/src/lightly_train/_models/timm/__init__.py +7 -0
- {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_models/timm/timm.py +7 -0
- {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_models/timm/timm_package.py +15 -2
- lightly_train-0.2.2/src/lightly_train/_models/torchvision/__init__.py +7 -0
- {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_models/torchvision/convnext.py +7 -0
- {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_models/torchvision/resnet.py +7 -0
- {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_models/torchvision/torchvision.py +7 -0
- {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_models/torchvision/torchvision_package.py +15 -2
- lightly_train-0.2.2/src/lightly_train/_optim/__init__.py +7 -0
- {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_optim/adamw_args.py +7 -0
- {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_optim/optimizer.py +7 -0
- {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_optim/optimizer_args.py +7 -0
- lightly_train-0.2.2/src/lightly_train/_optim/optimizer_type.py +12 -0
- {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_optim/trainable_modules.py +7 -0
- {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_scaling.py +7 -0
- {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_transforms.py +7 -0
- {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/errors.py +7 -0
- {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/types.py +7 -0
- lightly_train-0.2.2/src/lightly_train.egg-info/PKG-INFO +75 -0
- {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train.egg-info/SOURCES.txt +9 -0
- {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train.egg-info/requires.txt +2 -1
- lightly_train-0.2.2/tests/__init__.py +7 -0
- lightly_train-0.2.2/tests/_commands/__init__.py +7 -0
- {lightly_train-0.2.1 → lightly_train-0.2.2}/tests/_commands/test_common_helpers.py +9 -1
- {lightly_train-0.2.1 → lightly_train-0.2.2}/tests/_commands/test_embed.py +10 -2
- {lightly_train-0.2.1 → lightly_train-0.2.2}/tests/_commands/test_export.py +10 -2
- {lightly_train-0.2.1 → lightly_train-0.2.2}/tests/_commands/test_extract_video_frames.py +8 -0
- {lightly_train-0.2.1 → lightly_train-0.2.2}/tests/_commands/test_train.py +11 -2
- {lightly_train-0.2.1 → lightly_train-0.2.2}/tests/_commands/test_train_helpers.py +23 -6
- lightly_train-0.2.2/tests/_configs/__init__.py +7 -0
- {lightly_train-0.2.1 → lightly_train-0.2.2}/tests/_configs/test_validate.py +10 -1
- lightly_train-0.2.2/tests/_embedding/__init__.py +7 -0
- lightly_train-0.2.2/tests/_embedding/writers/__init__.py +7 -0
- {lightly_train-0.2.1 → lightly_train-0.2.2}/tests/_embedding/writers/test_csv_writer.py +8 -0
- {lightly_train-0.2.1 → lightly_train-0.2.2}/tests/_embedding/writers/test_torch_writer.py +8 -0
- {lightly_train-0.2.1 → lightly_train-0.2.2}/tests/_embedding/writers/test_writer_helpers.py +8 -0
- lightly_train-0.2.2/tests/_methods/__init__.py +7 -0
- {lightly_train-0.2.1 → lightly_train-0.2.2}/tests/_methods/test_method_helpers.py +8 -0
- lightly_train-0.2.2/tests/_models/__init__.py +7 -0
- lightly_train-0.2.2/tests/_models/custom/__init__.py +7 -0
- {lightly_train-0.2.1 → lightly_train-0.2.2}/tests/_models/custom/test_custom.py +8 -0
- {lightly_train-0.2.1 → lightly_train-0.2.2}/tests/_models/custom/test_custom_package.py +9 -1
- {lightly_train-0.2.1 → lightly_train-0.2.2}/tests/_models/super_gradients/test_super_gradients_package.py +7 -0
- {lightly_train-0.2.1 → lightly_train-0.2.2}/tests/_models/test_package_helpers.py +9 -2
- lightly_train-0.2.2/tests/_models/timm/__init__.py +7 -0
- {lightly_train-0.2.1 → lightly_train-0.2.2}/tests/_models/timm/test_timm.py +7 -0
- {lightly_train-0.2.1 → lightly_train-0.2.2}/tests/_models/timm/test_timm_package.py +7 -0
- {lightly_train-0.2.1 → lightly_train-0.2.2}/tests/_models/torchvision/test_torchvision_package.py +8 -0
- lightly_train-0.2.2/tests/_optim/__init__.py +7 -0
- {lightly_train-0.2.1 → lightly_train-0.2.2}/tests/_optim/test_optimizer.py +9 -1
- {lightly_train-0.2.1 → lightly_train-0.2.2}/tests/helpers.py +11 -3
- {lightly_train-0.2.1 → lightly_train-0.2.2}/tests/test__checkpoint.py +7 -0
- {lightly_train-0.2.1 → lightly_train-0.2.2}/tests/test__cli.py +11 -3
- {lightly_train-0.2.1 → lightly_train-0.2.2}/tests/test__scaling.py +8 -0
- lightly_train-0.2.1/PKG-INFO +0 -165
- lightly_train-0.2.1/src/lightly_train/_callbacks/__init__.py +0 -0
- lightly_train-0.2.1/src/lightly_train/_commands/__init__.py +0 -0
- lightly_train-0.2.1/src/lightly_train/_configs/__init__.py +0 -0
- lightly_train-0.2.1/src/lightly_train/_configs/config.py +0 -5
- lightly_train-0.2.1/src/lightly_train/_constants.py +0 -3
- lightly_train-0.2.1/src/lightly_train/_embedding/__init__.py +0 -0
- lightly_train-0.2.1/src/lightly_train/_embedding/embedding_format.py +0 -7
- lightly_train-0.2.1/src/lightly_train/_embedding/writers/__init__.py +0 -0
- lightly_train-0.2.1/src/lightly_train/_loggers/__init__.py +0 -0
- lightly_train-0.2.1/src/lightly_train/_methods/__init__.py +0 -0
- lightly_train-0.2.1/src/lightly_train/_models/__init__.py +0 -0
- lightly_train-0.2.1/src/lightly_train/_models/custom/__init__.py +0 -0
- lightly_train-0.2.1/src/lightly_train/_models/embedding/__init__.py +0 -0
- lightly_train-0.2.1/src/lightly_train/_models/super_gradients/__init__.py +0 -0
- lightly_train-0.2.1/src/lightly_train/_models/timm/__init__.py +0 -0
- lightly_train-0.2.1/src/lightly_train/_models/torchvision/__init__.py +0 -0
- lightly_train-0.2.1/src/lightly_train/_optim/__init__.py +0 -0
- lightly_train-0.2.1/src/lightly_train/_optim/optimizer_type.py +0 -5
- lightly_train-0.2.1/src/lightly_train.egg-info/PKG-INFO +0 -165
- lightly_train-0.2.1/tests/__init__.py +0 -0
- lightly_train-0.2.1/tests/_commands/__init__.py +0 -0
- lightly_train-0.2.1/tests/_configs/__init__.py +0 -0
- lightly_train-0.2.1/tests/_embedding/__init__.py +0 -0
- lightly_train-0.2.1/tests/_embedding/writers/__init__.py +0 -0
- lightly_train-0.2.1/tests/_methods/__init__.py +0 -0
- lightly_train-0.2.1/tests/_models/__init__.py +0 -0
- lightly_train-0.2.1/tests/_models/custom/__init__.py +0 -0
- lightly_train-0.2.1/tests/_models/timm/__init__.py +0 -0
- lightly_train-0.2.1/tests/_optim/__init__.py +0 -0
- {lightly_train-0.2.1 → lightly_train-0.2.2}/.gitignore +0 -0
- {lightly_train-0.2.1 → lightly_train-0.2.2}/CONTRIBUTE.md +0 -0
- {lightly_train-0.2.1 → lightly_train-0.2.2}/LICENSE +0 -0
- {lightly_train-0.2.1 → lightly_train-0.2.2}/docker/Dockerfile-amd64-cuda +0 -0
- {lightly_train-0.2.1 → lightly_train-0.2.2}/docker/README.md +0 -0
- {lightly_train-0.2.1 → lightly_train-0.2.2}/setup.cfg +0 -0
- {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train.egg-info/dependency_links.txt +0 -0
- {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train.egg-info/entry_points.txt +0 -0
- {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train.egg-info/top_level.txt +0 -0
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
name: Docker image build and push to gcloud registry
|
|
2
|
+
|
|
3
|
+
# Pushes a release candidate build to lightly-main/train after a merge into main
|
|
4
|
+
|
|
5
|
+
on:
|
|
6
|
+
workflow_dispatch:
|
|
7
|
+
push:
|
|
8
|
+
branches:
|
|
9
|
+
- main
|
|
10
|
+
|
|
11
|
+
env:
|
|
12
|
+
BUILD_NUMBER: ${{ github.run_number }}
|
|
13
|
+
NAMESPACE: lightly-main
|
|
14
|
+
|
|
15
|
+
concurrency:
|
|
16
|
+
group: ${{ github.workflow }}-${{ github.ref }}
|
|
17
|
+
cancel-in-progress: true
|
|
18
|
+
|
|
19
|
+
jobs:
|
|
20
|
+
build-docker-image:
|
|
21
|
+
name: build docker image
|
|
22
|
+
runs-on: cpu
|
|
23
|
+
timeout-minutes: 60
|
|
24
|
+
outputs:
|
|
25
|
+
job_status: ${{ job.status }}
|
|
26
|
+
steps:
|
|
27
|
+
- name: checkout code
|
|
28
|
+
uses: actions/checkout@v4
|
|
29
|
+
- id: 'auth'
|
|
30
|
+
uses: 'google-github-actions/auth@v2'
|
|
31
|
+
with:
|
|
32
|
+
credentials_json: ${{ secrets.GCP_SERVICE_ACCOUNT_KEY }}
|
|
33
|
+
project_id: ${{ secrets.GCP_PROJECT_ID }}
|
|
34
|
+
- name: set up cloud sdk
|
|
35
|
+
uses: google-github-actions/setup-gcloud@v2
|
|
36
|
+
with:
|
|
37
|
+
version: "421.0.0" # fix version so that our runners don't download trash
|
|
38
|
+
project_id: ${{ secrets.GCP_PROJECT_ID }}
|
|
39
|
+
- name: build docker image and push to gcloud registry
|
|
40
|
+
run: |
|
|
41
|
+
cd ./docker && make main-deploy-amd64-cuda
|
|
42
|
+
|
|
43
|
+
slack-notification:
|
|
44
|
+
name: send slack notification
|
|
45
|
+
needs:
|
|
46
|
+
- build-docker-image
|
|
47
|
+
if: always()
|
|
48
|
+
runs-on: cpu
|
|
49
|
+
timeout-minutes: 5
|
|
50
|
+
steps:
|
|
51
|
+
- name: Slack Notification - Success
|
|
52
|
+
if: ${{ needs.build-docker-image.result == 'success' }}
|
|
53
|
+
uses: rtCamp/action-slack-notify@v2
|
|
54
|
+
env:
|
|
55
|
+
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_RELEASES }}
|
|
56
|
+
SLACK_ICON_EMOJI: ":train:"
|
|
57
|
+
SLACK_USERNAME: "Build of LightlyTrain Docker Image"
|
|
58
|
+
SLACK_COLOR: "good"
|
|
59
|
+
SLACK_MESSAGE: |
|
|
60
|
+
:tada: Build status: :github-check-mark:
|
|
61
|
+
LightlyTrain docker image built successfully from main branch and pushed to private GCR.
|
|
62
|
+
|
|
63
|
+
Pull it from the registry with:
|
|
64
|
+
```
|
|
65
|
+
docker pull eu.gcr.io/boris-250909/${{ env.NAMESPACE }}/train:${{ github.sha }}
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
See it in the registry at:
|
|
69
|
+
https://console.cloud.google.com/artifacts/docker/boris-250909/europe/eu.gcr.io/${{ env.NAMESPACE }}%2Ftrain
|
|
70
|
+
- name: Slack Notification - Failure
|
|
71
|
+
if: ${{ needs.build-docker-image.result != 'success' }}
|
|
72
|
+
uses: rtCamp/action-slack-notify@v2
|
|
73
|
+
env:
|
|
74
|
+
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_RELEASES }}
|
|
75
|
+
SLACK_ICON_EMOJI: ":x:"
|
|
76
|
+
SLACK_USERNAME: "Build of LightlyTrain Docker Image"
|
|
77
|
+
SLACK_COLOR: "danger"
|
|
78
|
+
SLACK_MESSAGE: |
|
|
79
|
+
:x: LightlyTrain docker image build failed.
|
|
80
|
+
Please check the logs and take necessary action.
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
name: Docker Hub Release
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
workflow_call:
|
|
5
|
+
workflow_dispatch:
|
|
6
|
+
|
|
7
|
+
jobs:
|
|
8
|
+
dockerhub-push:
|
|
9
|
+
name: Push the latest main image to DockerHub
|
|
10
|
+
runs-on: cpu
|
|
11
|
+
defaults:
|
|
12
|
+
run:
|
|
13
|
+
working-directory: ./docker
|
|
14
|
+
steps:
|
|
15
|
+
- name: checkout code
|
|
16
|
+
uses: actions/checkout@v4
|
|
17
|
+
with:
|
|
18
|
+
ref: main
|
|
19
|
+
- name: push to DockerHub
|
|
20
|
+
id: push-to-dockerhub
|
|
21
|
+
run: |
|
|
22
|
+
echo "push up to docker hub"
|
|
23
|
+
docker login -u borislightly -p ${{ secrets.DOCKERHUB_PASSWORD_BORISLIGHTLY }}
|
|
24
|
+
make release
|
|
25
|
+
slack-notification:
|
|
26
|
+
name: send slack notification
|
|
27
|
+
needs:
|
|
28
|
+
- dockerhub-push
|
|
29
|
+
if: always()
|
|
30
|
+
runs-on: cpu
|
|
31
|
+
timeout-minutes: 5
|
|
32
|
+
steps:
|
|
33
|
+
- name: Slack Notification - Success
|
|
34
|
+
if: ${{ needs.dockerhub-push.result == 'success' }}
|
|
35
|
+
uses: rtCamp/action-slack-notify@v2
|
|
36
|
+
env:
|
|
37
|
+
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_RELEASES }}
|
|
38
|
+
SLACK_ICON_EMOJI: ":train:"
|
|
39
|
+
SLACK_USERNAME: "Release of LightlyTrain Docker Image to DockerHub"
|
|
40
|
+
SLACK_COLOR: "good"
|
|
41
|
+
SLACK_MESSAGE: |
|
|
42
|
+
:tada: Release status: :github-check-mark:
|
|
43
|
+
LightlyTrain Docker Image pushed to DockerHub successfully.
|
|
44
|
+
|
|
45
|
+
Pull it from the registry with:
|
|
46
|
+
```
|
|
47
|
+
docker pull lighly/train:latest
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
See it in DockerHub at https://hub.docker.com/repository/docker/lightly/train/general
|
|
51
|
+
- name: Slack Notification - Failure
|
|
52
|
+
if: ${{ needs.dockerhub-push.result != 'success' }}
|
|
53
|
+
uses: rtCamp/action-slack-notify@v2
|
|
54
|
+
env:
|
|
55
|
+
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_RELEASES }}
|
|
56
|
+
SLACK_ICON_EMOJI: ":x:"
|
|
57
|
+
SLACK_USERNAME: "Release of LightlyTrain Docker Image to DockerHub"
|
|
58
|
+
SLACK_COLOR: "danger"
|
|
59
|
+
SLACK_MESSAGE: |
|
|
60
|
+
:x: Push of LightlyTrain Docker Image to DockerHub failed.
|
|
61
|
+
Please check the logs and take necessary action.
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
name: Build and release LightlyTrain package to PyPI
|
|
2
2
|
|
|
3
3
|
on:
|
|
4
|
-
push:
|
|
5
4
|
workflow_dispatch:
|
|
6
5
|
# TODO(Philipp, 03/23): Enable me after proper testing.
|
|
7
6
|
# release:
|
|
@@ -32,7 +31,7 @@ jobs:
|
|
|
32
31
|
echo "Version mismatch: Tag is $LATEST_TAG, but __version__ in __init__.py is $VERSION_FROM_INIT"
|
|
33
32
|
exit 1
|
|
34
33
|
fi
|
|
35
|
-
echo "
|
|
34
|
+
echo "__version__ from __init__.py $VERSION_FROM_INIT matches latest tag $LATEST_TAG"
|
|
36
35
|
- name: Set up Python 3.10
|
|
37
36
|
uses: actions/setup-python@v5
|
|
38
37
|
with:
|
|
@@ -41,14 +40,13 @@ jobs:
|
|
|
41
40
|
run: |
|
|
42
41
|
make install-uv reset-venv
|
|
43
42
|
source .venv/bin/activate
|
|
43
|
+
make install-dist
|
|
44
44
|
- name: Build and release
|
|
45
45
|
id: build_and_release
|
|
46
46
|
run: |
|
|
47
|
-
|
|
48
|
-
uv pip install twine
|
|
49
|
-
uv pip install build
|
|
47
|
+
source .venv/bin/activate
|
|
50
48
|
# NOTE: This uses the files checked out from the latest tag.
|
|
51
|
-
make
|
|
49
|
+
make dist
|
|
52
50
|
twine upload -u ${{ secrets.PYPI_USER_NAME }} -p ${{ secrets.PYPI_PASSWORD }} dist/*
|
|
53
51
|
- name: Convert success/failure strings to emojis
|
|
54
52
|
id: emoji_status
|
|
@@ -64,7 +62,7 @@ jobs:
|
|
|
64
62
|
if: always()
|
|
65
63
|
uses: rtCamp/action-slack-notify@v2
|
|
66
64
|
env:
|
|
67
|
-
SLACK_WEBHOOK: ${{ secrets.
|
|
65
|
+
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_RELEASES }}
|
|
68
66
|
SLACK_ICON_EMOJI: ":python:"
|
|
69
67
|
SLACK_USERNAME: Release of LightlyTrain Package ${{steps.checkout_latest_release_tag.outputs.tag_name}}
|
|
70
68
|
SLACK_COLOR: ${{ steps.build_and_release.outcome }}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
name: Unit Tests
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches:
|
|
6
|
+
- main
|
|
7
|
+
pull_request:
|
|
8
|
+
workflow_dispatch:
|
|
9
|
+
|
|
10
|
+
concurrency:
|
|
11
|
+
group: ${{ github.workflow }}-${{ github.ref }}
|
|
12
|
+
cancel-in-progress: true
|
|
13
|
+
|
|
14
|
+
jobs:
|
|
15
|
+
detect-code-changes:
|
|
16
|
+
name: Detect Code Changes
|
|
17
|
+
runs-on: cpu
|
|
18
|
+
outputs:
|
|
19
|
+
run-tests: ${{ steps.filter.outputs.run-tests }}
|
|
20
|
+
steps:
|
|
21
|
+
- uses: actions/checkout@v4
|
|
22
|
+
- uses: dorny/paths-filter@v3
|
|
23
|
+
id: filter
|
|
24
|
+
with:
|
|
25
|
+
list-files: shell
|
|
26
|
+
filters: |
|
|
27
|
+
run-tests:
|
|
28
|
+
- '!docs/**'
|
|
29
|
+
- '!docker/**'
|
|
30
|
+
- '!.github/**'
|
|
31
|
+
- '.github/workflows/test.yml'
|
|
32
|
+
test:
|
|
33
|
+
name: Test
|
|
34
|
+
needs: detect-code-changes
|
|
35
|
+
if: needs.detect-code-changes.outputs.run-tests == 'true'
|
|
36
|
+
runs-on: cpu
|
|
37
|
+
strategy:
|
|
38
|
+
matrix:
|
|
39
|
+
python: ["3.8", "3.11"]
|
|
40
|
+
steps:
|
|
41
|
+
- name: Checkout Code
|
|
42
|
+
uses: actions/checkout@v4
|
|
43
|
+
- name: Set Up Python
|
|
44
|
+
uses: actions/setup-python@v5
|
|
45
|
+
with:
|
|
46
|
+
python-version: ${{ matrix.python }}
|
|
47
|
+
- name: Set Up Environment
|
|
48
|
+
run: |
|
|
49
|
+
make install-uv reset-venv
|
|
50
|
+
source .venv/bin/activate
|
|
51
|
+
make install-pinned-${{ matrix.python }}
|
|
52
|
+
make install-ffmpeg-ubuntu
|
|
53
|
+
- name: Run Pytest
|
|
54
|
+
env:
|
|
55
|
+
CUDA_VISIBLE_DEVICES: ""
|
|
56
|
+
run: |
|
|
57
|
+
source .venv/bin/activate
|
|
58
|
+
make test-ci
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
name: Code Format Check
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches:
|
|
6
|
+
- main
|
|
7
|
+
pull_request:
|
|
8
|
+
workflow_dispatch:
|
|
9
|
+
|
|
10
|
+
concurrency:
|
|
11
|
+
group: ${{ github.workflow }}-${{ github.ref }}
|
|
12
|
+
cancel-in-progress: true
|
|
13
|
+
|
|
14
|
+
jobs:
|
|
15
|
+
detect-code-changes:
|
|
16
|
+
name: Detect Code Changes
|
|
17
|
+
runs-on: cpu
|
|
18
|
+
outputs:
|
|
19
|
+
run-tests: ${{ steps.filter.outputs.run-tests }}
|
|
20
|
+
steps:
|
|
21
|
+
- uses: actions/checkout@v4
|
|
22
|
+
- uses: dorny/paths-filter@v3
|
|
23
|
+
id: filter
|
|
24
|
+
with:
|
|
25
|
+
list-files: shell
|
|
26
|
+
filters: |
|
|
27
|
+
run-tests:
|
|
28
|
+
- '!docs/**'
|
|
29
|
+
- '!docker/**'
|
|
30
|
+
- '!.github/**'
|
|
31
|
+
- '.github/workflows/test_code_format.yml'
|
|
32
|
+
test:
|
|
33
|
+
name: Check
|
|
34
|
+
runs-on: cpu
|
|
35
|
+
strategy:
|
|
36
|
+
matrix:
|
|
37
|
+
python: ["3.8"]
|
|
38
|
+
steps:
|
|
39
|
+
- name: Checkout Code
|
|
40
|
+
uses: actions/checkout@v4
|
|
41
|
+
- name: Set Up Python
|
|
42
|
+
uses: actions/setup-python@v5
|
|
43
|
+
with:
|
|
44
|
+
python-version: ${{ matrix.python }}
|
|
45
|
+
- name: Set Up Environment
|
|
46
|
+
run: |
|
|
47
|
+
make install-uv reset-venv
|
|
48
|
+
source .venv/bin/activate
|
|
49
|
+
make install-pinned-${{ matrix.python }}
|
|
50
|
+
make install-ffmpeg-ubuntu
|
|
51
|
+
- name: Run Format Check
|
|
52
|
+
run: |
|
|
53
|
+
source .venv/bin/activate
|
|
54
|
+
make format-check
|
|
55
|
+
- name: Run Type Check
|
|
56
|
+
run: |
|
|
57
|
+
source .venv/bin/activate
|
|
58
|
+
make type-check
|
|
59
|
+
- name: Run Header check
|
|
60
|
+
run: |
|
|
61
|
+
source .venv/bin/activate
|
|
62
|
+
make add-header
|
|
63
|
+
git diff --name-only .
|
|
64
|
+
git diff --quiet --name-only . || exit -1
|
|
65
|
+
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
name: Docker Tests
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches:
|
|
6
|
+
- main
|
|
7
|
+
pull_request:
|
|
8
|
+
workflow_dispatch:
|
|
9
|
+
|
|
10
|
+
concurrency:
|
|
11
|
+
group: ${{ github.workflow }}-${{ github.ref }}
|
|
12
|
+
cancel-in-progress: true
|
|
13
|
+
|
|
14
|
+
jobs:
|
|
15
|
+
detect-code-changes:
|
|
16
|
+
name: Detect Code Changes
|
|
17
|
+
runs-on: cpu
|
|
18
|
+
outputs:
|
|
19
|
+
run-tests: ${{ steps.filter.outputs.run-tests }}
|
|
20
|
+
steps:
|
|
21
|
+
- uses: actions/checkout@v4
|
|
22
|
+
- uses: dorny/paths-filter@v3
|
|
23
|
+
id: filter
|
|
24
|
+
with:
|
|
25
|
+
list-files: shell
|
|
26
|
+
filters: |
|
|
27
|
+
run-tests:
|
|
28
|
+
- '!docs/**'
|
|
29
|
+
- '!.github/**'
|
|
30
|
+
- '.github/workflows/test_docker.yml'
|
|
31
|
+
test:
|
|
32
|
+
name: Test
|
|
33
|
+
needs: detect-code-changes
|
|
34
|
+
if: needs.detect-code-changes.outputs.run-tests == 'true'
|
|
35
|
+
runs-on: cpu
|
|
36
|
+
strategy:
|
|
37
|
+
matrix:
|
|
38
|
+
python: ["3.11"]
|
|
39
|
+
steps:
|
|
40
|
+
- name: Checkout Code
|
|
41
|
+
uses: actions/checkout@v4
|
|
42
|
+
- name: Set Up Environment
|
|
43
|
+
run: |
|
|
44
|
+
make install-uv reset-venv
|
|
45
|
+
source .venv/bin/activate
|
|
46
|
+
# Store new PATH in GITHUB_ENV to keep environment enabled for subsequent steps.
|
|
47
|
+
echo "PATH=$PATH" >> $GITHUB_ENV
|
|
48
|
+
make install-pinned-${{ matrix.python }}
|
|
49
|
+
- name: Build Docker Image
|
|
50
|
+
working-directory: docker
|
|
51
|
+
run: |
|
|
52
|
+
make build-docker-amd64-cuda
|
|
53
|
+
- name: Run Docker Tests
|
|
54
|
+
working-directory: docker
|
|
55
|
+
run: |
|
|
56
|
+
make test
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
name: Minimal Dependency Tests
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches:
|
|
6
|
+
- main
|
|
7
|
+
pull_request:
|
|
8
|
+
workflow_dispatch:
|
|
9
|
+
|
|
10
|
+
concurrency:
|
|
11
|
+
group: ${{ github.workflow }}-${{ github.ref }}
|
|
12
|
+
cancel-in-progress: true
|
|
13
|
+
|
|
14
|
+
jobs:
|
|
15
|
+
detect-code-changes:
|
|
16
|
+
name: Detect Code Changes
|
|
17
|
+
runs-on: cpu
|
|
18
|
+
outputs:
|
|
19
|
+
run-tests: ${{ steps.filter.outputs.run-tests }}
|
|
20
|
+
steps:
|
|
21
|
+
- uses: actions/checkout@v4
|
|
22
|
+
- uses: dorny/paths-filter@v3
|
|
23
|
+
id: filter
|
|
24
|
+
with:
|
|
25
|
+
list-files: shell
|
|
26
|
+
filters: |
|
|
27
|
+
run-tests:
|
|
28
|
+
- '!docs/**'
|
|
29
|
+
- '!docker/**'
|
|
30
|
+
- '!.github/**'
|
|
31
|
+
- '.github/workflows/test_minimal_deps.yml'
|
|
32
|
+
test:
|
|
33
|
+
name: Test
|
|
34
|
+
needs: detect-code-changes
|
|
35
|
+
if: needs.detect-code-changes.outputs.run-tests == 'true'
|
|
36
|
+
runs-on: cpu
|
|
37
|
+
strategy:
|
|
38
|
+
matrix:
|
|
39
|
+
python: ["3.8"]
|
|
40
|
+
dependencies: ["minimal", "minimal-extras"]
|
|
41
|
+
steps:
|
|
42
|
+
- name: Checkout Code
|
|
43
|
+
uses: actions/checkout@v4
|
|
44
|
+
- name: Set Up Python
|
|
45
|
+
uses: actions/setup-python@v5
|
|
46
|
+
with:
|
|
47
|
+
python-version: ${{ matrix.python }}
|
|
48
|
+
- name: Set Up Environment
|
|
49
|
+
run: |
|
|
50
|
+
make install-uv reset-venv
|
|
51
|
+
source .venv/bin/activate
|
|
52
|
+
make install-${{ matrix.dependencies }}
|
|
53
|
+
if [[ ${{ matrix.dependencies }} == "minimal-extras" ]]; then
|
|
54
|
+
make install-ffmpeg-ubuntu
|
|
55
|
+
fi
|
|
56
|
+
- name: Run Pytest
|
|
57
|
+
env:
|
|
58
|
+
CUDA_VISIBLE_DEVICES: ""
|
|
59
|
+
run: |
|
|
60
|
+
source .venv/bin/activate
|
|
61
|
+
make test-ci
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
name: Weekly Dependency Test
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
workflow_dispatch:
|
|
5
|
+
schedule:
|
|
6
|
+
- cron: '0 22 * * THU' # each Thursday night, at 22:00 UTC
|
|
7
|
+
|
|
8
|
+
concurrency:
|
|
9
|
+
group: ${{ github.workflow }}-${{ github.ref }}
|
|
10
|
+
cancel-in-progress: true
|
|
11
|
+
|
|
12
|
+
jobs:
|
|
13
|
+
detect-code-changes:
|
|
14
|
+
name: Detect Code Changes
|
|
15
|
+
runs-on: cpu
|
|
16
|
+
outputs:
|
|
17
|
+
run-tests: ${{ steps.filter.outputs.run-tests }}
|
|
18
|
+
steps:
|
|
19
|
+
- uses: actions/checkout@v4
|
|
20
|
+
- uses: dorny/paths-filter@v3
|
|
21
|
+
id: filter
|
|
22
|
+
with:
|
|
23
|
+
list-files: shell
|
|
24
|
+
filters: |
|
|
25
|
+
run-tests:
|
|
26
|
+
- '!docs/**'
|
|
27
|
+
- '!docker/**'
|
|
28
|
+
- '!.github/**'
|
|
29
|
+
- '.github/workflows/weekly_dependency_tests.yml'
|
|
30
|
+
test:
|
|
31
|
+
name: Test
|
|
32
|
+
needs: detect-code-changes
|
|
33
|
+
if: needs.detect-code-changes.outputs.run-tests == 'true'
|
|
34
|
+
runs-on: cpu
|
|
35
|
+
strategy:
|
|
36
|
+
matrix:
|
|
37
|
+
python: ["3.8", "3.11"]
|
|
38
|
+
steps:
|
|
39
|
+
- name: Checkout Code
|
|
40
|
+
uses: actions/checkout@v4
|
|
41
|
+
- name: Set up Python
|
|
42
|
+
uses: actions/setup-python@v5
|
|
43
|
+
with:
|
|
44
|
+
python-version: ${{ matrix.python }}
|
|
45
|
+
- name: Setup Environment
|
|
46
|
+
run: |
|
|
47
|
+
make install-uv reset-venv
|
|
48
|
+
source .venv/bin/activate
|
|
49
|
+
make install-latest
|
|
50
|
+
make install-ffmpeg-ubuntu
|
|
51
|
+
- name: Run Pytest
|
|
52
|
+
env:
|
|
53
|
+
CUDA_VISIBLE_DEVICES: ""
|
|
54
|
+
run: |
|
|
55
|
+
source .venv/bin/activate
|
|
56
|
+
make test-ci
|
|
@@ -1,20 +1,24 @@
|
|
|
1
|
-
|
|
1
|
+
### Cleaning
|
|
2
|
+
|
|
2
3
|
.PHONY: clean
|
|
3
4
|
clean: clean-build clean-pyc clean-out
|
|
4
5
|
|
|
5
|
-
|
|
6
|
+
# remove build artifacts
|
|
7
|
+
.PHONY: clean-build
|
|
6
8
|
clean-build:
|
|
7
9
|
rm -fr build/
|
|
8
10
|
rm -fr dist/
|
|
9
11
|
rm -fr .eggs/
|
|
10
12
|
find . -name '*.egg-info' -exec rm -fr {} +
|
|
11
|
-
find . -name '*.egg' -exec rm -
|
|
13
|
+
find . -name '*.egg' -exec rm -fr {} +
|
|
12
14
|
|
|
13
|
-
|
|
15
|
+
# remove python file artifacts
|
|
16
|
+
.PHONY: clean-pyc
|
|
14
17
|
clean-pyc:
|
|
15
18
|
find . -name '__pycache__' -exec rm -fr {} +
|
|
16
19
|
|
|
17
|
-
|
|
20
|
+
# remove hydra outputs
|
|
21
|
+
.PHONY: clean-out
|
|
18
22
|
clean-out:
|
|
19
23
|
rm -fr outputs/
|
|
20
24
|
rm -fr lightly_outputs/
|
|
@@ -22,6 +26,7 @@ clean-out:
|
|
|
22
26
|
rm -fr lightly_epoch_*.ckpt
|
|
23
27
|
rm -fr last.ckpt
|
|
24
28
|
|
|
29
|
+
### Formatting and type-checking
|
|
25
30
|
|
|
26
31
|
# run format and type checks and tests
|
|
27
32
|
.PHONY: all-checks
|
|
@@ -50,6 +55,13 @@ format-check:
|
|
|
50
55
|
type-check:
|
|
51
56
|
mypy src tests
|
|
52
57
|
|
|
58
|
+
# adding the license header to all files
|
|
59
|
+
.PHONY: add-header
|
|
60
|
+
add-header:
|
|
61
|
+
licenseheaders -t dev_tools/licenseheader.tmpl -d src
|
|
62
|
+
licenseheaders -t dev_tools/licenseheader.tmpl -d tests
|
|
63
|
+
|
|
64
|
+
|
|
53
65
|
|
|
54
66
|
### Testing
|
|
55
67
|
|
|
@@ -98,7 +110,7 @@ DOCKER_EXTRAS = --extra tensorboard --extra timm
|
|
|
98
110
|
|
|
99
111
|
# Date until which dependencies installed with --exclude-newer must have been released.
|
|
100
112
|
# Dependencies released after this date are ignored.
|
|
101
|
-
EXCLUDE_NEWER_DATE="2024-08-
|
|
113
|
+
EXCLUDE_NEWER_DATE="2024-08-28"
|
|
102
114
|
|
|
103
115
|
# Install ffmpeg on Ubuntu.
|
|
104
116
|
. PHONY: install-ffmpeg-ubuntu
|
|
@@ -174,9 +186,13 @@ install-docker-dependencies:
|
|
|
174
186
|
install-docker:
|
|
175
187
|
uv pip install -v --no-deps .
|
|
176
188
|
|
|
189
|
+
# Install dependencies for building and publishing the package.
|
|
190
|
+
.PHONY: install-dist
|
|
191
|
+
install-dist:
|
|
192
|
+
uv pip install --exclude-newer ${EXCLUDE_NEWER_DATE} wheel twine build
|
|
177
193
|
|
|
178
|
-
|
|
179
|
-
|
|
194
|
+
### Building source and wheel package for publishing to pypi
|
|
195
|
+
.PHONY: dist
|
|
196
|
+
dist: clean
|
|
180
197
|
python -m build
|
|
181
198
|
ls -l dist
|
|
182
|
-
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
Metadata-Version: 2.1
|
|
2
|
+
Name: lightly_train
|
|
3
|
+
Version: 0.2.2
|
|
4
|
+
Summary: Train models with self-supervised learning in a single command
|
|
5
|
+
Author: Lightly Team
|
|
6
|
+
License: AGPL-3.0
|
|
7
|
+
Keywords: machine-learning,computer-vision,deep-learning,self-supervised-learning,contrastive-learning,pytorch,python,pretrained-models,embeddings
|
|
8
|
+
Requires-Python: >=3.8
|
|
9
|
+
Description-Content-Type: text/markdown
|
|
10
|
+
License-File: LICENSE
|
|
11
|
+
Requires-Dist: lightly>=1.5.12
|
|
12
|
+
Requires-Dist: omegaconf>=2.3
|
|
13
|
+
Requires-Dist: psutil>=5.0
|
|
14
|
+
Requires-Dist: pytorch_lightning>=2.1
|
|
15
|
+
Requires-Dist: torch>=2.0.0
|
|
16
|
+
Requires-Dist: torchvision>=0.15.1
|
|
17
|
+
Requires-Dist: tqdm>=4.0.0
|
|
18
|
+
Provides-Extra: dev
|
|
19
|
+
Requires-Dist: pytest>=8.0.0; extra == "dev"
|
|
20
|
+
Requires-Dist: pytest-mock>=3.14.0; extra == "dev"
|
|
21
|
+
Requires-Dist: ruff>=0.4.0; extra == "dev"
|
|
22
|
+
Requires-Dist: mypy>=1.10.0; extra == "dev"
|
|
23
|
+
Requires-Dist: types-tqdm>=4.0.0; extra == "dev"
|
|
24
|
+
Requires-Dist: licenseheaders>=0.8.8; extra == "dev"
|
|
25
|
+
Provides-Extra: super-gradients
|
|
26
|
+
Requires-Dist: super-gradients>=3.7; extra == "super-gradients"
|
|
27
|
+
Provides-Extra: tensorboard
|
|
28
|
+
Requires-Dist: tensorboard>=2.10.0; extra == "tensorboard"
|
|
29
|
+
Provides-Extra: timm
|
|
30
|
+
Requires-Dist: timm>=1.0.3; extra == "timm"
|
|
31
|
+
|
|
32
|
+
# LightlyTrain
|
|
33
|
+
|
|
34
|
+
*Train models with self-supervised learning in a single command*
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
## Why LightlyTrain
|
|
38
|
+
|
|
39
|
+
LightlyTrain uses self-supervised learning (SSL) to train models on large datasets
|
|
40
|
+
without the need for labels. It provides simple Python, Command Line, and Docker
|
|
41
|
+
interfaces to train models with popular SSL methods such as SimCLR or DINO. The trained
|
|
42
|
+
models are ideal starting points for fine-tuning on downstream tasks such as image
|
|
43
|
+
classification, object detection, and segmentation or for generating image embeddings.
|
|
44
|
+
Models trained with LightlyTrain result in improved performance, faster convergence, and
|
|
45
|
+
better generalization compared to models trained without SSL. Image embeddings created
|
|
46
|
+
with LightlyTrain capture more relevant information than their supervised counterparts
|
|
47
|
+
and seamlessly extend to new classes due to the unsupervised nature of SSL.
|
|
48
|
+
|
|
49
|
+
Lightly is the expert in SSL for computer vision and developed LightlyTrain to simplify
|
|
50
|
+
model training for any task and dataset.
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
## Features
|
|
54
|
+
|
|
55
|
+
* Train models on any image data without labels
|
|
56
|
+
* Train models from popular libraries such as [torchvision](https://github.com/pytorch/vision), [TIMM](https://github.com/huggingface/pytorch-image-models), and [SuperGradients](https://github.com/Deci-AI/super-gradients)
|
|
57
|
+
* Train custom models
|
|
58
|
+
* No SSL expertise required
|
|
59
|
+
* Automatic SSL method selection (soon!)
|
|
60
|
+
* Python, Command Line, and Docker support
|
|
61
|
+
* Multi-GPU and multi-node (soon!) support
|
|
62
|
+
* Export models for fine-tuning or inference
|
|
63
|
+
* Generate and export image embeddings
|
|
64
|
+
* Monitor training progress with TensorBoard, Weights & Biases, Neptune, etc. (soon!)
|
|
65
|
+
|
|
66
|
+
## License
|
|
67
|
+
|
|
68
|
+
LightlyTrain is available under an AGPL-3.0 and a commercial license. Please contact us
|
|
69
|
+
at info@lightly.ai for more information.
|
|
70
|
+
|
|
71
|
+
## Contact
|
|
72
|
+
|
|
73
|
+
* [**Email**](info@lightly.ai)
|
|
74
|
+
* [**Website**](https://www.lightly.ai/lightlytrain)
|
|
75
|
+
* [**Discord**](https://discord.gg/xvNJW94)
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# LightlyTrain
|
|
2
|
+
|
|
3
|
+
*Train models with self-supervised learning in a single command*
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
## Why LightlyTrain
|
|
7
|
+
|
|
8
|
+
LightlyTrain uses self-supervised learning (SSL) to train models on large datasets
|
|
9
|
+
without the need for labels. It provides simple Python, Command Line, and Docker
|
|
10
|
+
interfaces to train models with popular SSL methods such as SimCLR or DINO. The trained
|
|
11
|
+
models are ideal starting points for fine-tuning on downstream tasks such as image
|
|
12
|
+
classification, object detection, and segmentation or for generating image embeddings.
|
|
13
|
+
Models trained with LightlyTrain result in improved performance, faster convergence, and
|
|
14
|
+
better generalization compared to models trained without SSL. Image embeddings created
|
|
15
|
+
with LightlyTrain capture more relevant information than their supervised counterparts
|
|
16
|
+
and seamlessly extend to new classes due to the unsupervised nature of SSL.
|
|
17
|
+
|
|
18
|
+
Lightly is the expert in SSL for computer vision and developed LightlyTrain to simplify
|
|
19
|
+
model training for any task and dataset.
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
## Features
|
|
23
|
+
|
|
24
|
+
* Train models on any image data without labels
|
|
25
|
+
* Train models from popular libraries such as [torchvision](https://github.com/pytorch/vision), [TIMM](https://github.com/huggingface/pytorch-image-models), and [SuperGradients](https://github.com/Deci-AI/super-gradients)
|
|
26
|
+
* Train custom models
|
|
27
|
+
* No SSL expertise required
|
|
28
|
+
* Automatic SSL method selection (soon!)
|
|
29
|
+
* Python, Command Line, and Docker support
|
|
30
|
+
* Multi-GPU and multi-node (soon!) support
|
|
31
|
+
* Export models for fine-tuning or inference
|
|
32
|
+
* Generate and export image embeddings
|
|
33
|
+
* Monitor training progress with TensorBoard, Weights & Biases, Neptune, etc. (soon!)
|
|
34
|
+
|
|
35
|
+
## License
|
|
36
|
+
|
|
37
|
+
LightlyTrain is available under an AGPL-3.0 and a commercial license. Please contact us
|
|
38
|
+
at info@lightly.ai for more information.
|
|
39
|
+
|
|
40
|
+
## Contact
|
|
41
|
+
|
|
42
|
+
* [**Email**](info@lightly.ai)
|
|
43
|
+
* [**Website**](https://www.lightly.ai/lightlytrain)
|
|
44
|
+
* [**Discord**](https://discord.gg/xvNJW94)
|