Código listos para usar y cuadernos tutoriales para aumentar su camino a la clasificación de imágenes de pocos disparos. Este repositorio está hecho para usted si:
No se pierda en grandes repositorios con cientos de métodos y sin explicación sobre cómo usarlos. Aquí, queremos que cada línea de código sea cubierta por un tutorial.
¿Quieres aprender un aprendizaje de pocos disparos y no sabes por dónde empezar? Comience con nuestros tutoriales.
| Computadora portátil | Descripción | Colab |
|---|---|---|
| Los primeros pasos en la clasificación de imágenes de pocos disparos | Básicamente, Aprendizaje de pocos disparos 101, en menos de 15 minutos. | |
| Ejemplo de entrenamiento episódico | Úselo como punto de partida si desea diseñar un script para capacitación episódica usando EasyFSL. | |
| Ejemplo de entrenamiento clásico | Úselo como punto de partida si desea diseñar un script para capacitación clásica usando EasyFSL. | |
| Prueba con incrustaciones preextracidas | La mayoría de los métodos de pocos disparos usan una columna vertebral congelada en el tiempo de prueba. Con EasyFSL, puede extraer todos los incrustaciones para su conjunto de datos de una vez por todas, y luego realizar una inferencia directamente en los incrustaciones. |
Métodos de aprendizaje de pocos disparos de última generación:
¡Con 11 métodos incorporados, EasyFSL es la biblioteca de aprendizaje de pocos disparos de código abierto más completa!
También proporcionamos una clase de Clasificador de pocas veces para que avance rápido su implementación de cualquier algoritmo de clasificación de pocos disparos, así como arquitecturas de uso común.
Consulte la sección de puntos de referencia a continuación para obtener más detalles sobre los métodos.
Herramientas para la carga de datos:
La carga de datos en FSL es un poco diferente de la clasificación estándar porque mostramos lotes de instancias en forma de tareas de clasificación de pocos disparos. ¡No preocuparse! En EasyFSL tienes:
Scripts para reproducir nuestros puntos de referencia:
scripts/predict_embeddings.py para extraer todos los incrustaciones de un conjunto de datos con una columna vertebral previa al entrenamiento dadascripts/benchmark_methods.py para evaluar un método en un conjunto de datos de prueba utilizando incrustaciones preextracidas.Y también: algunas utilidades que sentí que usé a menudo en mi investigación, así que estoy compartiendo contigo.
Hay suficientes conjuntos de datos utilizados en el aprendizaje de pocos disparos para que cualquiera se pierda en ellos. Todos están aquí, explicados, descargables y fáciles de usar, en EasyFSL.
Cu-birds
Proporcionamos una receta de make download-cub para descargar y extraer el conjunto de datos, junto con las clases estándar (trenes / val / prueba). Una vez que haya descargado el conjunto de datos, puede instanciar los objetos del conjunto de datos en su código con este proceso súper complicado:
from easyfsl . datasets import CUB
train_set = CUB ( split = "train" , training = True )
test_set = CUB ( split = "test" , training = False )Tieredimagenet
Para usarlo, necesita el conjunto de datos ILSVRC2015. Una vez que haya descargado y extraído el conjunto de datos, asegúrese de que su localización en el disco sea consistente con las rutas de clase especificadas en los archivos de especificación. Entonces:
from easyfsl . datasets import TieredImageNet
train_set = TieredImageNet ( split = "train" , training = True )
test_set = TieredImageNet ( split = "test" , training = False )miniimagenet
Igual que Tieredimagenet, proporcionamos los archivos de especificación, pero necesita el conjunto de datos ILSVRC2015. Una vez que lo tengas:
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 ) Dado que MiniImagenet es relativamente pequeño, también puede cargarlo en RAM directamente en instanciación simplemente agregando load_on_ram=True al constructor. ¡Toma unos minutos pero puede hacer que su entrenamiento sea significativamente más rápido!
Hongos daneses
Recientemente comencé a usarlo como algunos puntos de referencia de aprendizaje de pocos disparos, y puedo decirte que es un gran campo de juego. Para usarlo, primero descargue los datos:
# 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.csvY luego instanciar el conjunto de datos con el mismo proceso que siempre:
from easyfsl . datasets import DanishFungi
dataset = DanishFungi ( root = "where/fungi/is" )Tenga en cuenta que no especificé un tren y un conjunto de pruebas porque el CSV que le di describe todo el conjunto de datos. Recomiendo usarlo para probar modelos con pesas entrenadas en otro conjunto de datos (como ImageNet). Pero si desea proponer una división de tren/val/prueba en las clases, ¡puede contribuir!
Instale el paquete: pip install easyfsl o simplemente bifurca el repositorio.
Descargue sus datos.
Diseñe sus scripts de capacitación y evaluación. Puede usar nuestros cuadernos de ejemplo para capacitación episódica o capacitación clásica.
¡Este proyecto está muy abierto a contribuciones! Puedes ayudar de varias maneras:
Utilizamos EasyFSL para comparar una docena de métodos. Los tiempos de inferencia se calculan en 1000 tareas utilizando características preextracidas. Solo son indicativos. Tenga en cuenta que el tiempo de inferencia para los métodos de ajuste fino depende en gran medida del número de pasos ajustados.
Todos los métodos Los hiperparámetros se definen en este archivo JSON. Fueron seleccionados en el conjunto de validación de Miniimagenet. El procedimiento se puede reproducir con make hyperparameter-search . Decidimos usar los hiperparámetros de Miniimagenet para todos los puntos de referencia para resaltar la adaptabilidad de los diferentes métodos. Tenga en cuenta que todos los métodos usan la normalización de las características L2, excepto la hazaña, ya que perjudica su rendimiento.
No hay resultados para las redes de matemáticas y relaciones, ya que los pesos capacitados para sus módulos adicionales no están disponibles.
Todos los métodos usan la misma columna vertebral: un resnet12 personalizado utilizando los parámetros capacitados proporcionados por los autores de la hazaña (Descargar: MiniImagenet, Tieredimagenet).
Los mejores resultados inductivos y mejores transductivos para cada columna se muestran en negrita.
| Método | Ind / trans | mini imagenet 1-shot | mini imagenet 5-shot | Imagenet escalonado 1-shot | Imagenet escalonado 5-shot | Tiempo |
|---|---|---|---|---|---|---|
| Protonet | Inductivo | 63.6 | 80.4 | 60.2 | 77.4 | 6s |
| Sencillo | Inductivo | 63.6 | 80.5 | 60.2 | 77.4 | 6s |
| Matchingnet | Inductivo | - | - | - | - | - |
| Relationnet | Inductivo | - | - | - | - | - |
| Afinar | Inductivo | 63.3 | 80.5 | 59.8 | 77.5 | 1mn33s |
| LOGRO | Inductivo | 64.7 | 80.1 | 61.3 | 76.2 | 3S |
| BD-CSPN | Transductor | 69.8 | 82.2 | 66.3 | 79.1 | 7s |
| LaplaciAnshot | Transductor | 69.8 | 82.3 | 66.2 | 79.2 | 9s |
| Mapa de PT | Transductor | 76.1 | 84.2 | 71.7 | 80.7 | 39mn40s |
| Tim | Transductor | 74.3 | 84.2 | 70.7 | 80.7 | 3MN05S |
| Finetunción transductora | Transductor | 63.0 | 80.6 | 59.1 | 77.5 | 30 años |
Reproducir:
data/models/feat_resnet12_mini_imagenet.pth (resp. tiered ).make extract-all-features-with-resnet12 .make benchmark-mini-imagenet (resp. tiered ).