EfficientNetV2
EfficientNetV2 é um classificador de imagens cuja profundidade, largura e escolha de blocos por estágio foram encontradas por neural architecture search, otimizando ao mesmo tempo a acurácia e a velocidade de treinamento, em vez de só a acurácia. O LibreYOLO o suporta para uma tarefa: classificação.
- Tarefas
- classify
- Tamanhos
- b0, b1, b2, b3 at 224 to 300 px
- Instalação
pip install libreyolo- Nível de suporte
- Compatível, desde a v. Modelos treináveis complementares: mantidos verdes na CI, com recursos incorporados quando há oportunidade.
- Origem
- EfficientNetV2 por Google, Apache-2.0. Artigo, código-fonte
- Licenças
- Código Apache-2.0, pesos Apache-2.0. Uso comercial
Instalação
O EfficientNetV2 não precisa de nenhum extra opcional. Tudo o que ele importa está na instalação base.
pip install libreyoloPredição
Os pesos são baixados do Hugging Face no primeiro uso e ficam em cache 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=TrueO objeto Results devolvido é o mesmo que todas as famílias devolvem, então
trocar por outro modelo é uma mudança de uma linha. Um classificador não carrega
boxes nem máscaras: result.probs guarda a predição da imagem inteira, com
top1, top5, top1conf e top5conf. conf, iou e max_det são aceitos
por paridade de API, mas não têm efeito, já que não há nada para limiarizar ou
suprimir em um único vetor de probabilidades. Veja predição
para fontes, streaming e tratamento de resultados.
Variantes
Quatro tamanhos, de b0 a b3, cada um avaliado na sua própria resolução e
proporção de crop, em vez de compartilharem um único tamanho de entrada em toda
a família. Escolher um tamanho é uma troca direta entre número de parâmetros e
acurácia. A tarefa é fixa: todos os tamanhos cobrem apenas classificação. O nome
do arquivo de pesos termina em -cls.pt em todos os tamanhos, e é esse sufixo
que a factory lê para rotear para esta família; nenhum argumento task= é
necessário.
Treinamento
O fine-tuning parte do backbone de ImageNet publicado e reconstrói
automaticamente a camada final do classificador para o número de classes do
dataset alvo. imgsz assume por padrão a resolução de avaliação do próprio
tamanho, a menos que seja definido explicitamente.
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=-1Sem mexer em nada, o trainer roda 100 épocas com lr0=1e-3 e AdamW, um batch de
64 e early stopping após 50 épocas sem melhora. data aceita a raiz de um
dataset (train/ e val/, uma pasta por classe), um nome curto conhecido como
imagenette160, ou uma URL de .zip. lora=True não é suportado aqui; passar
esse argumento levanta um erro, já que o LoRA no LibreYOLO mira componentes de
transformer com camadas nn.Linear, e os blocos MBConv desta família não têm
nenhuma.
Veja treinamento para datasets, data augmentation, multi-GPU e loggers.
Validação
val() devolve um dicionário de chaves metrics/. Para classificação, são a
acurácia top-1 e top-5 sobre o split de validação.
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=imagenette160Exportação
| Tarefa | ONNX | TorchScript | ExecuTorch | TensorRT | OpenVINO | Paddle | MNN | RKNN | ncnn | TFLite | CoreML | Core AI |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| classify | classify to ONNX: compatível | classify to TorchScript: compatível | classify to ExecuTorch: compatível | classify to TensorRT: compatível | classify to OpenVINO: compatível | classify to Paddle: incompatível | classify to MNN: incompatível | classify to RKNN: incompatível | classify to ncnn: compatível | classify to TFLite: compatível | classify to CoreML: incompatível | classify to Core AI: compatível |
Um artefato exportado é carregado de volta pelo LibreYOLO() a partir da
extensão do arquivo, então um arquivo .onnx ou .engine se comporta como um
checkpoint e devolve o mesmo Results. Exportação lista os
argumentos que todo formato aceita e os extras que alguns deles acrescentam.
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 # A factory decide pela extensão do arquivo, então um artefato exportado# carrega como qualquer checkpoint e devolve o mesmo objeto Results.model = LibreYOLO("LibreEfficientNetV2b0-cls.onnx")result = model(SAMPLE_IMAGE) print(result.probs.top1)Checkpoints
Todos os arquivos de pesos publicados desta família.
| Arquivo | Entrada (px) | Licença dos 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 os arquivos acima existem hoje na organização LibreYOLO e são baixados no primeiro uso.
Licenciamento
Confira a licença no repositório do Hugging Face correspondente aos pesos que você baixar. Cada checkpoint na organização LibreYOLO tem uma licença, e ela nem sempre é a mesma em toda a família. Esse repositório é a fonte oficial. O resumo abaixo descreve o que se aplicava na última verificação desta página.
Esta é uma descrição das licenças envolvidas, não uma orientação jurídica. Se a resposta tiver importância comercial, leia as licenças e procure sua própria assessoria.
- Trabalho original
- EfficientNetV2, Google
- Licença original
- Apache-2.0
- Código-fonte original
- github.com/huggingface/pytorch-image-models
- Código do LibreYOLO
- MIT
- Pesos
- Apache-2.0, republicado em huggingface.co/LibreYOLO
- Interpretação
- 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.