Bereit zu verwenden, Code und Tutorial-Notizbücher, um Ihren Weg in die Klassifizierung von Image in wenigen Schäden zu steigern. Dieses Repository wird für Sie gemacht, wenn:
Verlieren Sie nicht in großen Repositorys mit Hunderten von Methoden und ohne Erklärung, wie Sie sie verwenden. Hier möchten wir, dass jede Codezeile von einem Tutorial abgedeckt wird.
Sie möchten ein paar Schüsse lernen und nicht wissen, wo Sie anfangen sollen? Beginnen Sie mit unseren Tutorials.
| Notizbuch | Beschreibung | Colab |
|---|---|---|
| Erste Schritte in wenige Schüsse Bildklassifizierung | Grundsätzlich nur wenige Schüsse Lernen 101, in weniger als 15 Minuten. | |
| Beispiel des episodischen Trainings | Verwenden Sie es als Ausgangspunkt, wenn Sie ein Skript für episodisches Training mit EasyFSL entwerfen möchten. | |
| Beispiel für klassisches Training | Verwenden Sie es als Ausgangspunkt, wenn Sie ein Skript für klassisches Training mit EasyFSL entwerfen möchten. | |
| Test mit vor Extrahieren Einbettungen testen | Die meisten wenigen Schüsse-Methoden verwenden ein gefrorenes Rückgrat zur Testzeit. Mit EasyFSL können Sie alle Einbettungen für Ihren Datensatz ein für alle Mal extrahieren und dann direkt bei Einbettungen inferenziert werden. |
Hochmoderne Lernmethoden mit wenigen Schichten:
Mit 11 integrierten Methoden ist EasyFSL die umfassendste Open-Source-Lernbibliothek!
Wir bieten auch eine Kurs für eine Fewotclassifier-Klasse an, um Ihre Implementierung eines Schuss-Klassifizierungsalgorithmus sowie häufig verwendete Architekturen zu finden.
Weitere Informationen zu den Methoden finden Sie im Abschnitt Benchmarks unten.
Tools für das Laden von Daten:
Das Laden der Daten in FSL unterscheidet sich etwas von der Standardklassifizierung, da wir Instanzen in Form weniger Schussklassifizierungsaufgaben probieren. Kein Schweiß! In EasyFSL haben Sie:
Skripte, um unsere Benchmarks zu reproduzieren:
scripts/predict_embeddings.py um alle Einbettungen aus einem Datensatz mit einem bestimmten Vorauszugsgrundgerecht zu extrahierenscripts/benchmark_methods.py um eine Methode in einem Testdatensatz mithilfe von Vor-Extrahierten-Einbettungen zu bewerten.Und auch: Einige Dienstprogramme, die ich in meiner Forschung oft verwendet habe, also teile ich mit Ihnen.
Es gibt genügend Datensätze, die im Wenig-Shot-Lernen verwendet werden, damit sich jeder in sich verliert. Sie sind alle hier, erklärt, herunterladbar und leicht zu bedienen, in EasyFSL.
Cu-Birds
Wir bieten ein Rezept make download-cub zum Herunterladen und Extrahieren des Datensatzes zusammen mit dem Standard (Zug / Val / Test), der entlang der Klassen geteilt ist. Sobald Sie den Datensatz heruntergeladen haben, können Sie die Datensatzobjekte in Ihrem Code mit diesem super komplizierten Prozess instanziieren:
from easyfsl . datasets import CUB
train_set = CUB ( split = "train" , training = True )
test_set = CUB ( split = "test" , training = False )Tieredimagenet
Um es zu verwenden, benötigen Sie den ILSVRC2015 -Datensatz. Wenn Sie den Datensatz heruntergeladen und extrahiert haben, stellen Sie sicher, dass die Lokalisierung auf der Festplatte mit den in den Spezifikationsdateien angegebenen Klassenpfaden übereinstimmt. Dann:
from easyfsl . datasets import TieredImageNet
train_set = TieredImageNet ( split = "train" , training = True )
test_set = TieredImageNet ( split = "test" , training = False )Miniimagenet
Wie TieredImagenet geben wir die Spezifikationsdateien an, benötigen jedoch den Datensatz von ILSVRC2015. Sobald Sie es haben:
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 ) Da Miniimagenet relativ klein ist, können Sie es auch in der Instanziierung direkt auf RAM laden, indem Sie dem Konstruktor load_on_ram=True hinzufügen. Es dauert ein paar Minuten, aber es kann Ihr Training erheblich schneller machen!
Dänische Pilze
Ich habe kürzlich angefangen, es als ein paar Schuss-Lernbenchmarks zu verwenden, und ich kann Ihnen sagen, dass es ein großartiges Spielfeld ist. Um es zu verwenden, laden Sie zuerst die Daten herunter:
# 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.csvUnd dann den Datensatz mit dem gleichen Prozess wie immer instanziieren:
from easyfsl . datasets import DanishFungi
dataset = DanishFungi ( root = "where/fungi/is" )Beachten Sie, dass ich keinen Zug- und Testsatz angegeben habe, da der CSV, den ich Ihnen gegeben habe, den gesamten Datensatz beschreibt. Ich empfehle, es zu verwenden, um Modelle mit Gewichten zu testen, die auf einem anderen Datensatz (wie ImageNet) ausgebildet sind. Wenn Sie jedoch einen Zug/Val/Test -Split entlang des Unterrichts vorschlagen möchten, können Sie einen Beitrag leisten!
Installieren Sie das Paket: pip install easyfsl oder geben Sie einfach das Repository auf.
Laden Sie Ihre Daten herunter.
Entwerfen Sie Ihre Schulungs- und Bewertungsskripte. Sie können unsere Beispiel -Notizbücher für episodisches Training oder klassisches Training verwenden.
Dieses Projekt ist sehr offen für Beiträge! Sie können auf verschiedene Weise helfen:
Wir haben EasyFSL verwendet, um ein Dutzend Methoden zu bewerten. Inferenzzeiten werden über 1000 Aufgaben unter Verwendung vorextrahierter Funktionen berechnet. Sie sind nur individuell. Beachten Sie, dass die Inferenzzeit für Feinabstimmungsmethoden stark von der Anzahl der Feinabstimmungsschritte abhängt.
Alle Methoden Hyperparameter sind in dieser JSON -Datei definiert. Sie wurden im Miniimagenet -Validierungssatz ausgewählt. Die Prozedur kann mit make hyperparameter-search reproduziert werden. Wir beschlossen, die Hyperparameter von Miniimagenet für alle Benchmarks zu verwenden, um die Anpassungsfähigkeit der verschiedenen Methoden hervorzuheben. Beachten Sie, dass alle Methoden die L2 -Normalisierung von Merkmalen verwenden, mit Ausnahme der Leistung, da sie der Leistung schadet.
Es gibt keine Ergebnisse für Mathing- und Beziehungsnetzwerke, da die geschulten Gewichte für ihre zusätzlichen Module nicht verfügbar sind.
Alle Methoden verwenden das gleiche Backbone: Ein benutzerdefiniertes ResNet12 mit den geschulten Parametern, die die Autoren von Feat bereitstellen (Download: Miniimagenet, Tieredimagenet).
Die besten induktiven und besten transduktiven Ergebnisse für jede Spalte sind fett angezeigt.
| Verfahren | IND / trans | Mini ImageNet 1-Shot | Mini ImageNet 5-Shot | gestufte ImagNet 1-Shot | gestufte ImagNet 5-Shot | Zeit |
|---|---|---|---|---|---|---|
| Protonett | Induktiv | 63.6 | 80.4 | 60.2 | 77,4 | 6s |
| SimpleShot | Induktiv | 63.6 | 80.5 | 60.2 | 77,4 | 6s |
| MatchingNet | Induktiv | - - | - - | - - | - - | - - |
| Relationnet | Induktiv | - - | - - | - - | - - | - - |
| Finetune | Induktiv | 63.3 | 80.5 | 59,8 | 77,5 | 1Mn33s |
| Feat | Induktiv | 64.7 | 80.1 | 61.3 | 76,2 | 3s |
| BD-CSPN | Transduktiv | 69,8 | 82.2 | 66,3 | 79.1 | 7s |
| Laplacianshot | Transduktiv | 69,8 | 82.3 | 66,2 | 79,2 | 9s |
| Pt-Map | Transduktiv | 76.1 | 84.2 | 71.7 | 80.7 | 39mn40s |
| Tim | Transduktiv | 74.3 | 84.2 | 70.7 | 80.7 | 3MN05s |
| Transductuctive Finetuning | Transduktiv | 63.0 | 80.6 | 59.1 | 77,5 | 30s |
Reproduzieren:
data/models/feat_resnet12_mini_imagenet.pth (bzw. tiered ).make extract-all-features-with-resnet12 .make benchmark-mini-imagenet (bzw. tiered ) aus.