EfficientNetV2
EfficientNetV2 es un clasificador de imágenes cuya profundidad, anchura y elección de bloques por etapa se encontraron mediante búsqueda de arquitecturas neuronales, optimizando a la vez la precisión y la velocidad de entrenamiento en lugar de solo la precisión. LibreYOLO lo soporta para una tarea: clasificación.
- Tareas
- classify
- Tamaños
- b0, b1, b2, b3 at 224 to 300 px
- Instalación
pip install libreyolo- Nivel de compatibilidad
- Compatible, desde v. Modelos entrenables de apoyo: se mantienen operativos en CI y reciben funciones cuando surge la oportunidad.
- Licencias
- Código Apache-2.0, pesos Apache-2.0. Uso comercial
Instalación
EfficientNetV2 no necesita ningún extra opcional. Todo lo que importa está en la instalación base.
pip install libreyoloPredicción
Los pesos se descargan de Hugging Face en el primer uso y se guardan en la caché local.
from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibreEfficientNetV2b0-cls.pt")result = model(SAMPLE_IMAGE, save=True) print(result.probs.top1, result.probs.top1conf)print(result.probs.top5)libreyolo predict model=LibreEfficientNetV2b0-cls.pt source=cat.jpg save=TrueEl objeto Results devuelto es el mismo que devuelven todas las familias, así
que cambiar a otro modelo es un cambio de una línea. Un clasificador no lleva
cajas ni máscaras: result.probs contiene la predicción de la imagen completa,
con top1, top5, top1conf y top5conf. conf, iou y max_det se
aceptan por paridad de API, pero no tienen efecto, porque no hay nada que
umbralizar ni suprimir en un único vector de probabilidades. Consulta
predicción para fuentes, streaming y manejo de resultados.
Variantes
Cuatro tamaños, de b0 a b3, cada uno evaluado con su propia resolución y su
propio ratio de recorte en lugar de compartir un único tamaño de entrada en
toda la familia. Elegir un tamaño es un intercambio directo entre número de
parámetros y precisión. La tarea es fija: todos los tamaños cubren solo
clasificación. El nombre del archivo de pesos termina en -cls.pt en todos los
tamaños, y ese sufijo es lo que lee la factoría para enrutar a esta familia; no
hace falta ningún argumento task=.
Entrenamiento
El fine-tuning parte del backbone de ImageNet publicado y reconstruye
automáticamente la capa final del clasificador para que coincida con el número
de clases del dataset objetivo. imgsz toma por defecto la resolución de
evaluación propia de cada tamaño, salvo que lo fijes explícitamente.
from libreyolo import LibreYOLO model = LibreYOLO("LibreEfficientNetV2b0-cls.pt")model.train(data="imagenette160", epochs=5)libreyolo train model=LibreEfficientNetV2b0-cls.pt data=imagenette160 epochs=5libreyolo train model=LibreEfficientNetV2b0-cls.pt data=imagenette160 \ epochs=50 device=0,1 batch=-1Si no tocas nada, el trainer ejecuta 100 épocas con lr0=1e-3 y AdamW, un
batch de 64 y parada temprana tras 50 épocas sin mejora. data acepta la raíz
de un dataset (train/ y val/, una carpeta por clase), un nombre corto
conocido como imagenette160, o una URL a un .zip. Aquí no se soporta
lora=True; pasarlo lanza un error, porque LoRA en LibreYOLO actúa sobre
componentes de tipo transformer con capas nn.Linear, y los bloques MBConv de
esta familia no tienen ninguna.
Consulta entrenamiento para datasets, aumento de datos (data augmentation), multi-GPU y loggers.
Validación
val() devuelve un diccionario de claves metrics/. En clasificación son la
precisión top-1 y top-5 sobre el split de validación.
from libreyolo import LibreYOLO model = LibreYOLO("LibreEfficientNetV2b0-cls.pt")metrics = model.val(data="imagenette160") print(metrics["metrics/accuracy_top1"])print(metrics["metrics/accuracy_top5"])libreyolo val model=LibreEfficientNetV2b0-cls.pt data=imagenette160Exportación
| Tarea | ONNX | TorchScript | ExecuTorch | TensorRT | OpenVINO | Paddle | MNN | RKNN | ncnn | TFLite | CoreML | Core AI |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| classify | classify to ONNX: compatible | classify to TorchScript: compatible | classify to ExecuTorch: compatible | classify to TensorRT: compatible | classify to OpenVINO: compatible | classify to Paddle: no compatible | classify to MNN: no compatible | classify to RKNN: no compatible | classify to ncnn: compatible | classify to TFLite: compatible | classify to CoreML: no compatible | classify to Core AI: compatible |
Un artefacto exportado se vuelve a cargar con LibreYOLO() según su extensión
de archivo, así que un archivo .onnx o .engine se comporta como un
checkpoint y devuelve el mismo Results. Exportación lista los
argumentos que acepta cada formato y los extras que añaden algunos de ellos.
from libreyolo import LibreYOLO model = LibreYOLO("LibreEfficientNetV2b0-cls.pt")model.export(format="onnx")model.export(format="tensorrt", half=True)libreyolo export model=LibreEfficientNetV2b0-cls.pt format=onnxlibreyolo export model=LibreEfficientNetV2b0-cls.pt format=tensorrt half=Truefrom libreyolo import LibreYOLO, SAMPLE_IMAGE # La factoría enruta según la extensión del archivo, así que un artefacto# exportado se carga como cualquier checkpoint y devuelve el mismo objeto Results.model = LibreYOLO("LibreEfficientNetV2b0-cls.onnx")result = model(SAMPLE_IMAGE) print(result.probs.top1)Checkpoints
Todos los archivos de pesos publicados de esta familia.
| Archivo | Entrada (px) | Licencia de los pesos |
|---|---|---|
| classify | ||
| LibreEfficientNetV2b0-cls.pt | 224 | apache-2.0 |
| LibreEfficientNetV2b1-cls.pt | 240 | apache-2.0 |
| LibreEfficientNetV2b2-cls.pt | 260 | apache-2.0 |
| LibreEfficientNetV2b3-cls.pt | 300 | apache-2.0 |
Todos los archivos anteriores existen hoy en la organización de LibreYOLO y se descargan la primera vez que se usan.
Licencia
Comprueba la licencia en el repositorio de Hugging Face de los pesos concretos que descargues. Cada checkpoint de la organización de LibreYOLO incluye una, y no siempre es la misma en toda una familia. Ese repositorio es la fuente autorizada; el resumen siguiente describe qué se aplicaba cuando se verificó esta página por última vez.
Esta es una descripción de las licencias implicadas, no asesoramiento legal. Si la respuesta es importante a nivel comercial, lee las licencias y busca tu propio asesoramiento.
- Trabajo original
- EfficientNetV2, Google
- Licencia del proyecto original
- Apache-2.0
- Fuente del proyecto original
- github.com/huggingface/pytorch-image-models
- Código de LibreYOLO
- MIT
- Pesos
- Apache-2.0, republicados en huggingface.co/LibreYOLO
- Interpretación
- Apache-2.0 is a permissive license, so these weights can be used in commercial and closed-source products. It asks you to keep its license text and attribution notices with any copy of the weights you redistribute, and it grants a patent license. It places no obligation on your own application code, and weights you train yourself on your own data are yours. The architecture is Google's design, whose reference implementation at google/automl is also Apache-2.0; LibreYOLO's implementation follows the block definitions, TensorFlow "SAME" padding and naming in timm, whose tf_efficientnetv2_b{0,1,2,3} ImageNet-1k weights (ported by Ross Wightman, no ImageNet-21k or extra data) are licensed Apache-2.0 and are what LibreYOLO ships.