ConvNeXt

ConvNeXt é um classificador de imagens construído inteiramente com convoluções padrão, modernizado bloco a bloco a partir de uma ResNet rumo às decisões de projeto de um vision transformer. O LibreYOLO o suporta para uma tarefa: classificação.

Tarefas
classify
Tamanhos
t, s, b at 224 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
ConvNeXt por Meta AI (FAIR), Apache-2.0. Artigo, código-fonte
Licenças
Código MIT, pesos Apache-2.0. Uso comercial

Instalação

O ConvNeXt não precisa de nenhum extra opcional. Tudo o que ele importa está na instalação base.

bash
pip install libreyolo

O fine-tuning com adaptadores via lora=True é a exceção, e precisa do extra lora.

bash
pip install "libreyolo[lora]"

Predição

Os pesos são baixados do Hugging Face no primeiro uso e ficam em cache local.

Python
from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibreConvNeXtt-cls.pt")result = model(SAMPLE_IMAGE, save=True) print(result.probs.top1, result.probs.top1conf)print(result.probs.top5)
CLI
libreyolo predict model=LibreConvNeXtt-cls.pt source=cat.jpg save=True

O 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

Três tamanhos, tiny/small/base, todos treinados e avaliados da mesma forma, então escolher um é 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.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreConvNeXtt-cls.pt")model.train(data="imagenette160", epochs=5)
CLI
libreyolo train model=LibreConvNeXtt-cls.pt data=imagenette160 epochs=5
LoRA
from libreyolo import LibreYOLO model = LibreYOLO("LibreConvNeXtt-cls.pt")model.train(data="imagenette160", epochs=5, lora=True)
Multi-GPU
libreyolo train model=LibreConvNeXtt-cls.pt data=imagenette160 \  epochs=50 device=0,1 batch=-1

Sem 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. Os blocos do ConvNeXt carregam os MLPs nn.Linear de que o LoRA precisa, então lora=True é suportado aqui, e injeta adaptadores nos MLPs dos blocos em vez de fazer fine-tuning do backbone completo.

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.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreConvNeXtt-cls.pt")metrics = model.val(data="imagenette160") print(metrics["metrics/accuracy_top1"])print(metrics["metrics/accuracy_top5"])
CLI
libreyolo val model=LibreConvNeXtt-cls.pt data=imagenette160

Exportação

TarefaONNXTorchScriptExecuTorchTensorRTOpenVINOPaddleMNNRKNNncnnTFLiteCoreMLCore AI
classifyclassify to ONNX: compatívelclassify to TorchScript: compatívelclassify to ExecuTorch: compatívelclassify to TensorRT: compatívelclassify to OpenVINO: compatívelclassify to Paddle: incompatívelclassify to MNN: incompatívelclassify to RKNN: incompatívelclassify to ncnn: compatívelclassify to TFLite: compatívelclassify to CoreML: incompatívelclassify 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.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreConvNeXtt-cls.pt")model.export(format="onnx")model.export(format="tensorrt", half=True)
CLI
libreyolo export model=LibreConvNeXtt-cls.pt format=onnxlibreyolo export model=LibreConvNeXtt-cls.pt format=tensorrt half=True
Usar o arquivo exportado
from 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("LibreConvNeXtt-cls.onnx")result = model(SAMPLE_IMAGE) print(result.probs.top1)

Checkpoints

Todos os arquivos de pesos publicados desta família.

ArquivoEntrada (px)Licença dos pesos
classify
LibreConvNeXtt-cls.pt224apache-2.0
LibreConvNeXts-cls.pt224apache-2.0
LibreConvNeXtb-cls.pt224apache-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
ConvNeXt, Meta AI (FAIR)
Licença original
Apache-2.0
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 Meta AI's original design, released under MIT at facebookresearch/ConvNeXt; the block definitions, layer-scale parameter and module naming that LibreYOLO's implementation follows come from timm, whose convnext_{tiny,small,base}.fb_in1k ImageNet-1k weights are licensed Apache-2.0 and are what LibreYOLO ships. Only ConvNeXt V1 is shipped here: ConvNeXt-V2's small pretrained checkpoints are CC-BY-NC 4.0 and are deliberately excluded as not redistributable in a commercial library.

Apenas o ConvNeXt V1 é distribuído nesta família. Os checkpoints pré-treinados pequenos do ConvNeXt-V2 são CC-BY-NC 4.0 e ficam deliberadamente de fora, já que pesos não comerciais não podem ser redistribuídos dentro de uma biblioteca MIT/comercial.

Citação

@Article{liu2022convnet,
  author  = {Zhuang Liu and Hanzi Mao and Chao-Yuan Wu and Christoph Feichtenhofer and Trevor Darrell and Saining Xie},
  title   = {A ConvNet for the 2020s},
  journal = {Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR)},
  year    = {2022},
}

Copiado do bloco de citação dos autores em github.com/facebookresearch/ConvNeXt#citation.

Verificado com o LibreYOLO v1.5.0. As tabelas de suporte, os checkpoints e os números de benchmark desta página são gerados a partir da biblioteca lançada e dos pesos publicados, não escritos à mão.