GeDML is an easy-to-use generalized deep metric learning library, which contains state-of-the-art deep metric learning algorithms and auxiliary modules to build end-to-end compute vision systems
Project description
News
- [2022-3-22]: **
v0.2.2has been released:- Fix some bugs.
- [2021-11-3]: **
v0.2.0has been released:- New features:
- Change the format of
linkconfiguration.
- Change the format of
- New features:
- [2021-10-27]: **
v0.1.4has been released:- New features:
- Add contrastive representation learning methods (MoCo-V2).
- New features:
- [2021-10-24]: **
v0.1.2has been released:- New features:
- Add distributed (DDP) support.
- New features:
- [2021-10-7]: **
v0.1.1has been released:- New features:
- Change the Cars196 loading method.
- New features:
- [2021-9-15]: **
v0.1.0has been released:- New features:
- output_wrapper and pipeline setting are decomposed for convenience.
- Pipeline will be stored in the experiment folder using a directed graph.
- New features:
- [2021-9-13]: **
v0.0.1has been released:- New features:
config.yamlwill be created to store the configuration in the experiment folder.**
- New features:
- [2021-9-6]:
v0.0.0has been released.
Introduction
GeDML is an easy-to-use generalized deep metric learning library, which contains:
- State-of-the-art DML algorithms: We contrain 18+ losses functions and 6+ sampling strategies, and divide these algorithms into three categories (i.e., collectors, selectors, and losses).
- Bridge bewteen DML and SSL: We attempt to bridge the gap between deep metric learning and self-supervised learning through specially designed modules, such as
collectors. - Auxiliary modules to assist in building: We also encapsulates the upper interface for users to start programs quickly and separates the codes and configs for managing hyper-parameters conveniently.
Installation
Pip
pip install gedml
Quickstart
Demo 1: deep metric learning
CUDA_VISIBLE_DEVICES=0 python demo.py \
--data_path <path_to_data> \
--save_path <path_to_save> \
--eval_exclude f1_score NMI AMI \
--device 0 --batch_size 128 --test_batch_size 128 \
--setting proxy_anchor --splits_to_eval test --embeddings_dim 128 \
--lr_trunk 0.0001 --lr_embedder 0.0001 --lr_collector 0.01 \
--dataset cub200 --delete_old \
Demo 2: contrastive representation learning
CUDA_VISIBLE_DEVICES=0 python demo.py \
--data_path <path_to_data> \
--save_path <path_to_save> \
--eval_exclude f1_score NMI AMI \
--device 0 --batch_size 128 --test_batch_size 128 \
--setting mocov2 --splits_to_eval test --embeddings_dim 128 \
--lr_trunk 0.015 --lr_embedder 0.015 \
--dataset imagenet --delete_old \
If you want to use our code to conduct DML or CRL experiments, please refer to the up-to-date and most detailed configurations below: :point_down:
- If you use the command line, you can run
sample_run.shto try this project. - If you debug with VS Code, you can refer to
launch.jsonto set.vscode.
API
Initialization
Use ParserWithConvert to get parameters
>>> from gedml.launcher.misc import ParserWithConvert
>>> csv_path = ...
>>> parser = ParserWithConvert(csv_path=csv_path, name="...")
>>> opt, convert_dict = parser.render()
Use ConfigHandler to create all objects.
>>> from gedml.launcher.creators import ConfigHandler
>>> link_path = ...
>>> assert_path = ...
>>> param_path = ...
>>> config_handler = ConfigHandler(
convert_dict=convert_dict,
link_path=link_path,
assert_path=assert_path,
params_path=param_path,
is_confirm_first=True
)
>>> config_handler.get_params_dict()
>>> objects_dict = config_handler.create_all()
Start
Use manager to automatically call trainer and tester.
>>> from gedml.launcher.misc import utils
>>> manager = utils.get_default(objects_dict, "managers")
>>> manager.run()
Or directly use trainer and tester.
>>> from gedml.launcher.misc import utils
>>> trainer = utils.get_default(objects_dict, "trainers")
>>> tester = utils.get_default(objects_dict, "testers")
>>> recorder = utils.get_default(objects_dict, "recorders")
# start to train
>>> utils.func_params_mediator(
[objects_dict],
trainer.__call__
)
# start to test
>>> metrics = utils.func_params_mediator(
[
{"recorders": recorder},
objects_dict,
],
tester.__call__
)
Document
For more information, please refer to: :point_right: Docs :book:
Some specific guidances:
Configs
We will continually update the optimal parameters of different configs in TsinghuaCloud
Framework
This project is modular in design. The pipeline diagram is as follows:
Code structure
Method
Collectors
| method | description |
|---|---|
| BaseCollector | Base class |
| DefaultCollector | Do nothing |
| ProxyCollector | Maintain a set of proxies |
| MoCoCollector | paper: Momentum Contrast for Unsupervised Visual Representation Learning |
| SimSiamCollector | paper: Exploring Simple Siamese Representation Learning |
| HDMLCollector | paper: Hardness-Aware Deep Metric Learning |
| DAMLCollector | paper: Deep Adversarial Metric Learning |
| DVMLCollector | paper: Deep Variational Metric Learning |
Losses
classifier-based
| method | description |
|---|---|
| CrossEntropyLoss | Cross entropy loss for unsupervised methods |
| LargeMarginSoftmaxLoss | paper: Large-Margin Softmax Loss for Convolutional Neural Networks |
| ArcFaceLoss | paper: ArcFace: Additive Angular Margin Loss for Deep Face Recognition |
| CosFaceLoss | paper: CosFace: Large Margin Cosine Loss for Deep Face Recognition |
pair-based
| method | description |
|---|---|
| ContrastiveLoss | paper: Learning a Similarity Metric Discriminatively, with Application to Face Verification |
| MarginLoss | paper: Sampling Matters in Deep Embedding Learning |
| TripletLoss | paper: Learning local feature descriptors with triplets and shallow convolutional neural networks |
| AngularLoss | paper: Deep Metric Learning with Angular Loss |
| CircleLoss | paper: Circle Loss: A Unified Perspective of Pair Similarity Optimization |
| FastAPLoss | paper: Deep Metric Learning to Rank |
| LiftedStructureLoss | paper: Deep Metric Learning via Lifted Structured Feature Embedding |
| MultiSimilarityLoss | paper: Multi-Similarity Loss With General Pair Weighting for Deep Metric Learning |
| NPairLoss | paper: Improved Deep Metric Learning with Multi-class N-pair Loss Objective |
| SignalToNoiseRatioLoss | paper: Signal-To-Noise Ratio: A Robust Distance Metric for Deep Metric Learning |
| PosPairLoss | paper: Exploring Simple Siamese Representation Learning |
proxy-based
| method | description |
|---|---|
| ProxyLoss | paper: No Fuss Distance Metric Learning Using Proxies |
| ProxyAnchorLoss | paper: Proxy Anchor Loss for Deep Metric Learning |
| SoftTripleLoss | paper: SoftTriple Loss: Deep Metric Learning Without Triplet Sampling |
Selectors
| method | description |
|---|---|
| BaseSelector | Base class |
| DefaultSelector | Do nothing |
| DenseTripletSelector | Select all triples |
| DensePairSelector | Select all pairs |
Code Reference
- KevinMusgrave / pytorch-metric-learning
- KevinMusgrave / powerful-benchmarker
- Confusezius / Deep-Metric-Learning-Baselines
- facebookresearch / moco
- PatrickHua / SimSiam
- ujjwaltiwari / Deep_Variational_Metric_Learning
- idstcv / SoftTriple
- wzzheng / HDML
- google-research / simclr
- kunhe / FastAP-metric-learning
- wy1iu / LargeMargin_Softmax_Loss
- tjddus9597 / Proxy-Anchor-CVPR2020
- facebookresearch / deit
TODO:
- assert parameters.
- write github action to automate unit-test, package publish and docs building.
- add cross-validation splits protocol.
- distributed tester for matrix-form input.
- add metrics module.
- how to improve the running efficiency.
IMPORTANT TODO:
- re-define pipeline setting!!!
- simplify distribution setting!!
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file gedml-0.2.2.tar.gz.
File metadata
- Download URL: gedml-0.2.2.tar.gz
- Upload date:
- Size: 69.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/34.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.9 tqdm/4.63.0 importlib-metadata/4.11.3 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a1a768a688347822fab8df37b4d8412eb9203ac4a770a195bfe6a2a16ab6a591
|
|
| MD5 |
ce0cad40d5db55ea9f557ac614b66c78
|
|
| BLAKE2b-256 |
003ba81cbb3c78f3a6744c67f530f7442697bb4ca059b20c56a0cb5000f40e07
|
File details
Details for the file gedml-0.2.2-py3-none-any.whl.
File metadata
- Download URL: gedml-0.2.2-py3-none-any.whl
- Upload date:
- Size: 117.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/34.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.9 tqdm/4.63.0 importlib-metadata/4.11.3 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9ba8f5bbf532c2eeffd18af74849809f5afca686529f3d70b04a0691d8a9468e
|
|
| MD5 |
871808a9652b748ba5fa1bcac03b154c
|
|
| BLAKE2b-256 |
5f3a0b44984854149da5834d9c58b0b5f5585dfb26dec76f0975277fdd7819da
|