1
0
mirror of https://github.com/immich-app/immich.git synced 2024-11-24 08:52:28 +02:00
immich/machine-learning
Mert 68f52818ae
feat(server): separate face clustering job (#5598)
* separate facial clustering job

* update api

* fixed some tests

* invert clustering

* hdbscan

* update api

* remove commented code

* wip dbscan

* cleanup

removed cluster endpoint

remove commented code

* fixes

updated tests

minor fixes and formatting

fixed queuing

refinements

* scale search range based on library size

* defer non-core faces

* optimizations

removed unused query option

* assign faces individually for correctness

fixed unit tests

remove unused method

* don't select face embedding

update sql

linting

fixed ml typing

* updated job mock

* paginate people query

* select face embeddings because typeorm

* fix setting face detection concurrency

* update sql

formatting

linting

* simplify logic

remove unused imports

* more specific delete signature

* more accurate typing for face stubs

* add migration

formatting

* chore: better typing

* don't select embedding by default

remove unused import

* updated sql

* use normal try/catch

* stricter concurrency typing and enforcement

* update api

* update job concurrency panel to show disabled queues

formatting

* check jobId in queueAll

fix tests

* remove outdated comment

* better facial recognition icon

* wording

wording

formatting

* fixed tests

* fix

* formatting & sql

* try to fix sql check

* more detailed description

* update sql

* formatting

* wording

* update `minFaces` description

---------

Co-authored-by: Jason Rasmussen <jrasm91@gmail.com>
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
2024-01-18 00:08:48 -05:00
..
ann chore(deps): update machine-learning (#6302) 2024-01-13 05:00:09 +00:00
app feat(server): separate face clustering job (#5598) 2024-01-18 00:08:48 -05:00
export chore(deps): update mambaorg/micromamba:bookworm-slim docker digest to 377aafa (#6434) 2024-01-16 16:39:31 -05:00
.dockerignore feat: facial recognition (#2180) 2023-05-17 12:07:17 -05:00
.gitignore feat: facial recognition (#2180) 2023-05-17 12:07:17 -05:00
Dockerfile chore(deps): update machine-learning (#6302) 2024-01-13 05:00:09 +00:00
locustfile.py feat(server,ml): remove image tagging (#5903) 2023-12-20 20:47:56 -05:00
log_conf.json feat(server,ml): remove image tagging (#5903) 2023-12-20 20:47:56 -05:00
poetry.lock feat(server): separate face clustering job (#5598) 2024-01-18 00:08:48 -05:00
pyproject.toml chore(deps): update machine-learning (#6302) 2024-01-13 05:00:09 +00:00
README_es_ES.md Add Spanish translations of Readme (#3511) 2023-08-02 06:51:08 -05:00
README_fr_FR.md Add french documentation (#4010) 2023-09-08 13:48:39 +07:00
README.md feat(server,ml): remove image tagging (#5903) 2023-12-20 20:47:56 -05:00
responses.json fix(ml): load models in separate threads (#4034) 2023-09-09 16:02:44 +07:00
start.sh chore(ml): improve shutdown (#5689) 2023-12-14 13:51:24 -06:00

Immich Machine Learning

  • CLIP embeddings
  • Facial recognition

Setup

This project uses Poetry, so be sure to install it first. Running poetry install --no-root --with dev will install everything you need in an isolated virtual environment.

To add or remove dependencies, you can use the commands poetry add $PACKAGE_NAME and poetry remove $PACKAGE_NAME, respectively. Be sure to commit the poetry.lock and pyproject.toml files to reflect any changes in dependencies.

Load Testing

To measure inference throughput and latency, you can use Locust using the provided locustfile.py. Locust works by querying the model endpoints and aggregating their statistics, meaning the app must be deployed. You can change the models or adjust options like score thresholds through the Locust UI.

To get started, you can simply run locust --web-host 127.0.0.1 and open localhost:8089 in a browser to access the UI. See the Locust documentation for more info on running Locust.

Note that in Locust's jargon, concurrency is measured in users, and each user runs one task at a time. To achieve a particular per-endpoint concurrency, multiply that number by the number of endpoints to be queried. For example, if there are 3 endpoints and you want each of them to receive 8 requests at a time, you should set the number of users to 24.