ViT

O clássico Vision Transformer: um transformer puro aplicado a patches de imagem de tamanho fixo, com um class token aprendido e sem convoluções. O LibreYOLO traz quatro tamanhos pré-treinados com AugReg para classificação de imagens.

Tarefas
classify
Tamanhos
ti, s, b, l at 224 px
Instalação
pip install libreyolo
Nível de suporte
Somente inferência, desde a v. Somente predição, validação e exportação. Os recursos de treinamento não se aplicam.
Origem
ViT por Google Research, Apache-2.0. Artigo, código-fonte
Licenças
Código Apache-2.0, pesos Apache-2.0. Uso comercial

Instalação

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

bash
pip install libreyolo

Predição

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

Python
from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibreViTti-cls.pt")result = model(SAMPLE_IMAGE, save=True) probs = result.probsprint(probs.top1, probs.top1conf)print(probs.top5, probs.top5conf)
CLI
libreyolo predict model=LibreViTti-cls.pt source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg save=True

Um classificador retorna result.probs em vez de result.boxes: top1 e top5 dão os índices das classes, e top1conf e top5conf dão as confianças correspondentes. O pré-processamento redimensiona e faz um recorte central para uma entrada fixa de 224px, seguindo a receita de avaliação AugReg do timm: interpolação bicúbica com fração de recorte de 0.9. Veja predição para fontes, streaming e tratamento de resultados.

Variantes

Quatro tamanhos, de tiny a large, que compartilham um mesmo grafo fixo de 224px com patch-16 e diferem na largura do embedding e na profundidade do transformer. O LibreYOLO distribui esta família apenas para inferência: predição, validação top-1/top-5 no estilo ImageNet e exportação são suportadas, e a receita de fine-tuning do AugReg não está implementada.

Validação

val() roda sobre um split no formato ImageFolder (um diretório com as subpastas train/ e val/, uma pasta por classe) e retorna a acurácia top-1 e top-5.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreViTti-cls.pt") # data é um diretório raiz com os splits train/ e val/ em pastas por# classe (layout ImageFolder), não um YAML de dataset.metrics = model.val(data="imagenet-1k/") print(metrics["metrics/accuracy_top1"])print(metrics["metrics/accuracy_top5"])
CLI
libreyolo val model=LibreViTti-cls.pt data=imagenet-1k/

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: incompatívelclassify to CoreML: incompatívelclassify to Core AI: incompatível

Um artefato exportado é recarregado por LibreYOLO() pelo sufixo do arquivo, então um arquivo .onnx ou .engine se comporta como um checkpoint e retorna o mesmo Results. Exportação lista os argumentos que todo formato aceita e os extras que alguns deles adicionam.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreViTti-cls.pt")model.export(format="onnx")model.export(format="tensorrt", half=True)
CLI
libreyolo export model=LibreViTti-cls.pt format=onnxlibreyolo export model=LibreViTti-cls.pt format=tensorrt half=True
Usar o arquivo exportado
from libreyolo import LibreYOLO, SAMPLE_IMAGE # A factory decide o caminho pelo sufixo do arquivo, então um artefato# exportado carrega como qualquer checkpoint e retorna o mesmo Results.model = LibreYOLO("LibreViTti-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
LibreViTti-cls.pt224apache-2.0
LibreViTs-cls.pt224apache-2.0
LibreViTb-cls.pt224apache-2.0
LibreViTl-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
ViT, Google Research
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. LibreYOLO's runtime code for this family is a derived port of the Apache-2.0 timm Vision Transformer implementation (Ross Wightman, huggingface/pytorch-image-models), kept checkpoint-compatible with the shipped tensors. The four AugReg checkpoints themselves are timm's Apache-2.0 conversion of Google Research's own AugReg pretraining, so the code and the weights carry the same permissive terms end to end.

Citação

@article{dosovitskiy2020vit,
  title={An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale},
  author={Dosovitskiy, Alexey and Beyer, Lucas and Kolesnikov, Alexander and Weissenborn, Dirk and Zhai, Xiaohua and Unterthiner, Thomas and  Dehghani, Mostafa and Minderer, Matthias and Heigold, Georg and Gelly, Sylvain and Uszkoreit, Jakob and Houlsby, Neil},
  journal={ICLR},
  year={2021}
}

@article{steiner2021augreg,
  title={How to train your ViT? Data, Augmentation, and Regularization in Vision Transformers},
  author={Steiner, Andreas and Kolesnikov, Alexander and and Zhai, Xiaohua and Wightman, Ross and Uszkoreit, Jakob and Beyer, Lucas},
  journal={arXiv preprint arXiv:2106.10270},
  year={2021}
}

Copiado do bloco de citação dos autores em github.com/google-research/vision_transformer#bibtex.

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.