Code prêt à l'emploi et cahiers de didacticiel pour stimuler votre chemin dans la classification d'images à quelques coups. Ce référentiel est fait pour vous si:
Ne vous perdez pas dans de grands référentiels avec des centaines de méthodes et aucune explication sur la façon de les utiliser. Ici, nous voulons que chaque ligne de code soit couverte par un tutoriel.
Vous voulez apprendre l'apprentissage à quelques coups et vous ne savez pas par où commencer? Commencez avec nos tutoriels.
| Carnet de notes | Description | Colab |
|---|---|---|
| Premiers pas dans la classification de l'image à quelques coups | Fondamentalement, un apprentissage à quelques coups 101, en moins de 15 minutes. | |
| Exemple de formation épisodique | Utilisez-le comme point de départ si vous souhaitez concevoir un script pour une formation épisodique à l'aide de EasyFSL. | |
| Exemple de formation classique | Utilisez-le comme point de départ si vous souhaitez concevoir un script pour une formation classique à l'aide de EasyFSL. | |
| Tester avec des intérêts pré-extractés | La plupart des méthodes à quelques coups utilisent une colonne vertébrale congelée au moment du test. Avec EasyFSL, vous pouvez extraire toutes les incorporations pour votre ensemble de données une fois pour toutes, puis effectuer une inférence directement sur les incorporations. |
Méthodes d'apprentissage à quelques coups de pointe:
Avec 11 méthodes intégrées, EasyFSL est la bibliothèque d'apprentissage à quelques coups open source la plus complète!
Nous fournissons également quelques classes de CLassificateur pour Quicktart votre implémentation de tout algorithme de classification de shot, ainsi que des architectures couramment utilisées.
Voir la section Benchmarks ci-dessous pour plus de détails sur les méthodes.
Outils pour le chargement des données:
Le chargement des données dans FSL est un peu différent de la classification standard car nous échantillons des lots d'instances sous la forme de tâches de classification à quelques coups. Pas de sueur! Dans Easyfsl, vous avez:
Scripts pour reproduire nos références:
scripts/predict_embeddings.py pour extraire toutes les incorporations d'un ensemble de données avec une colonne vertébrale pré-formée donnéescripts/benchmark_methods.py pour évaluer une méthode sur un ensemble de données de test à l'aide d'incorporation pré-extraite.Et aussi: certains services publics que je sentais que j'utilisais souvent dans mes recherches, donc je partage avec vous.
Il y a suffisamment d'ensembles de données utilisés dans l'apprentissage à quelques coups pour que quiconque s'y perde. Ils sont tous ici, explités, téléchargeables et faciles à utiliser, dans EasyFSL.
Coussin-glaces
Nous fournissons une recette make download-cub pour télécharger et extraire l'ensemble de données, ainsi que le standard (Train / Val / Test) le long des classes. Une fois que vous avez téléchargé l'ensemble de données, vous pouvez instancier les objets de jeu de données dans votre code avec ce processus super compliqué:
from easyfsl . datasets import CUB
train_set = CUB ( split = "train" , training = True )
test_set = CUB ( split = "test" , training = False )TIEREDIMagenenet
Pour l'utiliser, vous avez besoin de l'ensemble de données ILSVRC2015. Une fois que vous avez téléchargé et extrait l'ensemble de données, assurez-vous que sa localisation sur le disque est cohérente avec les chemins de classe spécifiés dans les fichiers de spécification. Alors:
from easyfsl . datasets import TieredImageNet
train_set = TieredImageNet ( split = "train" , training = True )
test_set = TieredImageNet ( split = "test" , training = False )minimagenet
Identique à TiedeMagenet, nous fournissons les fichiers de spécification, mais vous avez besoin de l'ensemble de données ILSVRC2015. Une fois que vous l'avez:
from easyfsl . datasets import MiniImageNet
train_set = MiniImageNet ( root = "where/imagenet/is" , split = "train" , training = True )
test_set = MiniImageNet ( root = "where/imagenet/is" , split = "test" , training = False ) Étant donné que MiniImagenet est relativement petit, vous pouvez également le charger sur RAM directement à l'instanciation simplement en ajoutant load_on_ram=True AU CONTRÔTEUR. Cela prend quelques minutes, mais cela peut rendre votre formation beaucoup plus rapidement!
Champignons danois
J'ai récemment commencé à l'utiliser comme référence d'apprentissage à petit coup, et je peux vous dire que c'est un excellent terrain de jeu. Pour l'utiliser, téléchargez d'abord les données:
# Download the original dataset (/! 110GB)
wget http://ptak.felk.cvut.cz/plants/DanishFungiDataset/DF20-train_val.tar.gz
# Or alternatively the images reduced to 300px (6.5Gb)
wget http://ptak.felk.cvut.cz/plants/DanishFungiDataset/DF20-300px.tar.gz
# And finally download the metadata (83Mb) to data/fungi/
wget https://public-sicara.s3.eu-central-1.amazonaws.com/easy-fsl/DF20_metadata.csv -O data/fungi/DF20_metadata.csvPuis instancier l'ensemble de données avec le même processus que toujours:
from easyfsl . datasets import DanishFungi
dataset = DanishFungi ( root = "where/fungi/is" )Notez que je n'ai pas spécifié de train et de test car le CSV que je vous ai donné décrit l'ensemble de données. Je recommande de l'utiliser pour tester des modèles avec des poids formés sur un autre ensemble de données (comme ImageNet). Mais si vous souhaitez proposer un train / Val / Test Split le long des cours, vous êtes invités à contribuer!
Installez le package: pip install easyfsl ou simplement débarquer le référentiel.
Téléchargez vos données.
Concevez vos scripts de formation et d'évaluation. Vous pouvez utiliser nos exemples de cahiers pour une formation épisodique ou une formation classique.
Ce projet est très ouvert aux contributions! Vous pouvez aider de diverses manières:
Nous avons utilisé EasyFSL pour comparer une douzaine de méthodes. Les temps d'inférence sont calculés sur 1000 tâches à l'aide de fonctionnalités pré-extraites. Ils sont seulement indicatifs. Notez que le temps d'inférence pour les méthodes de réglage fin dépend fortement du nombre d'étapes de réglage fin.
Toutes les méthodes hyperparamètres sont définies dans ce fichier JSON. Ils ont été sélectionnés sur un ensemble de validation MiniImageNet. La procédure peut être reproduite avec make hyperparameter-search . Nous avons décidé d'utiliser des hyperparamètres de MiniImageNet pour toutes les repères afin de mettre en évidence l'adaptabilité des différentes méthodes. Notez que toutes les méthodes utilisent la normalisation L2 des fonctionnalités, à l'exception de l'exploit car il nuit à ses performances.
Il n'y a aucun résultat pour les réseaux de mathématiques et de relation car les poids formés pour leurs modules supplémentaires ne sont pas disponibles.
Toutes les méthodes utilisent la même épine dorsale: une Resnet12 personnalisée en utilisant les paramètres formés fournis par les auteurs de FEAT (Télécharger: MiniImagenet, TiereDiMagenet).
Les meilleurs résultats inductifs et meilleurs transducteurs pour chaque colonne sont présentés en gras.
| Méthode | Ind / trans | Mini Imagenet 1 tir | Mini Imagenet 5 tirs | Imagenet à plusieurs niveaux 1 tir | Imagenet à plusieurs niveaux 5 tirs | Temps |
|---|---|---|---|---|---|---|
| Protonet | Inductif | 63.6 | 80.4 | 60.2 | 77.4 | 6s |
| Simpleshot | Inductif | 63.6 | 80.5 | 60.2 | 77.4 | 6s |
| MatchingNet | Inductif | - | - | - | - | - |
| Relationnet | Inductif | - | - | - | - | - |
| Affiner | Inductif | 63.3 | 80.5 | 59.8 | 77.5 | 1mn33s |
| EXPLOIT | Inductif | 64.7 | 80.1 | 61.3 | 76.2 | 3s |
| BD-CSPN | Transductif | 69.8 | 82.2 | 66.3 | 79.1 | 7s |
| Laplacianshot | Transductif | 69.8 | 82.3 | 66.2 | 79.2 | 9s |
| Map | Transductif | 76.1 | 84.2 | 71.7 | 80.7 | 39mn40 |
| Tim | Transductif | 74.3 | 84.2 | 70.7 | 80.7 | 3mn05 |
| Finetune transductive | Transductif | 63.0 | 80.6 | 59.1 | 77.5 | 30s |
À reproduire:
data/models/feat_resnet12_mini_imagenet.pth (Resp. tiered ).make extract-all-features-with-resnet12 .make benchmark-mini-imagenet ( tiered ).