DINO-DETR
O DINO-DETR, publicado pela IDEA Research com o nome DINO, combina treinamento com denoising contrastivo e seleção mista de queries sobre a atenção esparsa do Deformable DETR. O LibreYOLO inclui três tamanhos para detecção, somente inferência.
- Tarefas
- detection
- Tamanhos
- r50, r50s5, swinl at 800 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
- DINO-DETR por IDEA Research, Apache-2.0. Artigo, código-fonte
- Licenças
- Código Apache-2.0, pesos Apache-2.0. Uso comercial
Instalação
O DINO-DETR não precisa de nenhum extra opcional. Tudo o que ele importa está na instalação base, usando o mesmo núcleo de atenção deformável multiescala em PyTorch puro da família Deformable DETR do LibreYOLO.
pip install libreyoloInstalar libreyolo[hub-kernels] é opcional. Uma vez presente o pacote
kernels, o LibreYOLO busca um kernel compilado de atenção deformável
multiescala no Hugging Face Hub em runtime e o usa no lugar do núcleo em
PyTorch puro; LIBREYOLO_HUB_KERNELS=0 desliga isso de novo.
Prediçã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("LibreDINODETRr50.pt")result = model(SAMPLE_IMAGE, save=True) for box in result.boxes: print(box.cls, box.conf, box.xyxy)libreyolo predict model=LibreDINODETRr50.pt source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg save=TrueO objeto Results devolvido é o mesmo que toda família devolve, então trocar
por outro detector é uma mudança de uma linha. conf e max_det filtram a
seleção de queries; iou é aceito por paridade de API mas não tem efeito,
porque o decoder é um preditor de conjuntos sem etapa de NMS. Veja
predição para fontes, streaming e tratamento de resultados.
O DINO-DETR é somente inferência no LibreYOLO. O upstream treina com denoising
contrastivo e matching húngaro; essa receita não está implementada aqui, então
train() levanta NotImplementedError.
Variantes
Três checkpoints, todos na mesma resolução de entrada. r50 e r50s5
compartilham um backbone ResNet-50 e diferem em quantas escalas de mapas de
características alimentam o decoder, quatro contra cinco. swinl troca o
backbone por Swin-L e também amostra cinco escalas.
Validação
val() devolve um dicionário de chaves metrics/ cobrindo precisão, recall,
mAP 50 e mAP 50-95, medidas contra qualquer dataset no formato em que você
treinou.
from libreyolo import LibreYOLO model = LibreYOLO("LibreDINODETRr50.pt") # val() devolve um dict simples, não um objetometrics = model.val(data="my-dataset.yaml") print(metrics["metrics/mAP50-95"])print(metrics["metrics/mAP50"])print(metrics["metrics/precision"], metrics["metrics/recall"])libreyolo val model=LibreDINODETRr50.pt data=my-dataset.yamlExportação
| Tarefa | ONNX | TorchScript | ExecuTorch | TensorRT | OpenVINO | Paddle | MNN | RKNN | ncnn | TFLite | CoreML | Core AI |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Detection | Detection to ONNX: compatível | Detection to TorchScript: compatível | Detection to ExecuTorch: compatível | Detection to TensorRT: compatível | Detection to OpenVINO: compatível | Detection to Paddle: incompatível | Detection to MNN: incompatível | Detection to RKNN: incompatível | Detection to ncnn: incompatível | Detection to TFLite: incompatível | Detection to CoreML: incompatível | Detection to Core AI: incompatível |
Um artefato exportado é carregado de volta por LibreYOLO() pelo sufixo 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.
from libreyolo import LibreYOLO model = LibreYOLO("LibreDINODETRr50.pt")model.export(format="onnx", imgsz=800)model.export(format="tensorrt", imgsz=800, half=True)libreyolo export model=LibreDINODETRr50.pt format=onnx imgsz=800libreyolo export model=LibreDINODETRr50.pt format=tensorrt imgsz=800 half=Truefrom libreyolo import LibreYOLO, SAMPLE_IMAGE # A factory roteia pelo sufixo do arquivo, então um artefato exportado# carrega como qualquer checkpoint e devolve o mesmo objeto Results.model = LibreYOLO("LibreDINODETRr50.onnx")result = model(SAMPLE_IMAGE) print(result.boxes.xyxy)Checkpoints
Todos os arquivos de pesos publicados desta família.
| Arquivo | Entrada (px) | Licença dos pesos |
|---|---|---|
| Detection | ||
| LibreDINODETRr50.pt | 800 | apache-2.0 |
| LibreDINODETRr50s5.pt | 800 | apache-2.0 |
| LibreDINODETRswinl.pt | 800 | 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
- DINO-DETR, IDEA Research
- Licença original
- Apache-2.0
- Código-fonte original
- github.com/IDEA-Research/DINO
- 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 three checkpoints come from the authors' Google Drive release rather than a Hugging Face model card, and the upstream repository does not attach a license to the checkpoint files individually, so the redistribution basis is the repository-level Apache-2.0 declaration rather than a checkpoint-specific grant.
Os três checkpoints oficiais vêm da pasta de publicação no Google Drive dos autores, não de uma model card do Hugging Face. O repositório upstream declara Apache-2.0 no nível do repositório, mas não anexa um arquivo de licença nem metadados de licença aos checkpoints em si, então a base para a redistribuição é essa declaração no nível do repositório e não uma concessão específica dos checkpoints. Todos os mirrors do LibreYOLO incluem o texto literal da licença Apache-2.0 do upstream junto com um aviso explicando isso.
Citação
@misc{zhang2022dino,
title={DINO: DETR with Improved DeNoising Anchor Boxes for End-to-End Object Detection},
author={Hao Zhang and Feng Li and Shilong Liu and Lei Zhang and Hang Su and Jun Zhu and Lionel M. Ni and Heung-Yeung Shum},
year={2022},
eprint={2203.03605},
archivePrefix={arXiv},
primaryClass={cs.CV}
}
@inproceedings{li2022dn,
title={Dn-detr: Accelerate detr training by introducing query denoising},
author={Li, Feng and Zhang, Hao and Liu, Shilong and Guo, Jian and Ni, Lionel M and Zhang, Lei},
booktitle={Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition},
pages={13619--13627},
year={2022}
}
@inproceedings{
liu2022dabdetr,
title={{DAB}-{DETR}: Dynamic Anchor Boxes are Better Queries for {DETR}},
author={Shilong Liu and Feng Li and Hao Zhang and Xiao Yang and Xianbiao Qi and Hang Su and Jun Zhu and Lei Zhang},
booktitle={International Conference on Learning Representations},
year={2022},
url={https://openreview.net/forum?id=oMI9PjOb9Jl}
}Copiado do bloco de citação dos autores em github.com/IDEA-Research/DINO#bibtex.