DINO-DETR
DINO-DETR, опубликованный IDEA Research под названием DINO, сочетает контрастивное обучение с шумоподавлением и смешанный отбор запросов поверх разреженного внимания из Deformable DETR. LibreYOLO поставляет три размера для детекции, только для инференса.
- Задачи
- detection
- Размеры
- r50, r50s5, swinl at 800 px
- Установка
pip install libreyolo- Уровень поддержки
- Только инференс, начиная с v. Только предсказание, валидация и экспорт. Функции обучения неприменимы.
- Исходный проект
- DINO-DETR от IDEA Research, Apache-2.0. Статья, исходный код
- Лицензии
- Код: Apache-2.0, веса: Apache-2.0. Коммерческое использование
Установка
DINO-DETR не требует опциональных extra. Всё, что он импортирует, входит в базовую установку, а в основе лежит то же многомасштабное деформируемое внимание на чистом PyTorch, что и в семействе Deformable DETR из LibreYOLO.
pip install libreyoloУстановка libreyolo[hub-kernels] опциональна. Как только пакет kernels
доступен, LibreYOLO во время работы скачивает с Hugging Face Hub
скомпилированное ядро многомасштабного деформируемого внимания и использует его
вместо реализации на чистом PyTorch; LIBREYOLO_HUB_KERNELS=0 выключает это
обратно.
Предсказание
Веса скачиваются с Hugging Face при первом запуске и кэшируются локально.
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=TrueВозвращаемый объект Results — тот же, что возвращает любое семейство, поэтому
замена одного детектора на другой сводится к одной строке. conf и max_det
фильтруют отбор запросов; iou принимается ради совместимости API, но ни на что
не влияет, потому что декодер предсказывает набор целиком и шага NMS в нём нет.
Про источники, стриминг и обработку результатов см.
предсказание.
В LibreYOLO DINO-DETR доступен только для инференса. Оригинальная реализация
обучается с контрастивным шумоподавлением и венгерским сопоставлением; этот
рецепт здесь не реализован, поэтому train() выбрасывает NotImplementedError.
Варианты
Три чекпойнта, все с одинаковым разрешением на входе. r50 и r50s5
используют общий бэкбон ResNet-50 и различаются тем, сколько масштабов карт
признаков подаётся в декодер: четыре против пяти. swinl меняет бэкбон на
Swin-L и тоже делает выборку по пяти масштабам.
Валидация
val() возвращает словарь с ключами metrics/, куда входят точность, полнота,
mAP 50 и mAP 50-95, измеренные на любом датасете в том формате, в котором вы
обучали.
from libreyolo import LibreYOLO model = LibreYOLO("LibreDINODETRr50.pt") # val() возвращает обычный dict, а не объектmetrics = 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.yamlЭкспорт
| Задача | ONNX | TorchScript | ExecuTorch | TensorRT | OpenVINO | Paddle | MNN | RKNN | ncnn | TFLite | CoreML | Core AI |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Detection | Detection to ONNX: поддерживается | Detection to TorchScript: поддерживается | Detection to ExecuTorch: поддерживается | Detection to TensorRT: поддерживается | Detection to OpenVINO: поддерживается | Detection to Paddle: не поддерживается | Detection to MNN: не поддерживается | Detection to RKNN: не поддерживается | Detection to ncnn: не поддерживается | Detection to TFLite: не поддерживается | Detection to CoreML: не поддерживается | Detection to Core AI: не поддерживается |
Экспортированный артефакт загружается обратно через LibreYOLO() по расширению
файла, поэтому файл .onnx или .engine ведёт себя как чекпойнт и возвращает
тот же Results. Экспорт перечисляет аргументы, которые
принимает каждый формат.
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 # Фабрика выбирает загрузчик по расширению файла, поэтому# экспортированный артефакт загружается как любой чекпойнт и# возвращает тот же объект Results.model = LibreYOLO("LibreDINODETRr50.onnx")result = model(SAMPLE_IMAGE) print(result.boxes.xyxy)Чекпойнты
Все опубликованные файлы весов этого семейства.
| Файл | Вход (пикс.) | Лицензия весов |
|---|---|---|
| Detection | ||
| LibreDINODETRr50.pt | 800 | apache-2.0 |
| LibreDINODETRr50s5.pt | 800 | apache-2.0 |
| LibreDINODETRswinl.pt | 800 | apache-2.0 |
Все перечисленные выше файлы уже доступны в организации LibreYOLO и скачиваются при первом использовании.
Лицензирование
Проверяйте лицензию в репозитории конкретных весов на Hugging Face. Она указана для каждого чекпойнта в организации LibreYOLO и может различаться даже внутри одного семейства. Этот репозиторий считается авторитетным источником, а сводка ниже описывает условия на момент последней проверки страницы.
Это описание соответствующих лицензий, а не юридическая консультация. Если ответ важен для коммерческого использования, прочитайте лицензии самостоятельно и проконсультируйтесь с юристом.
- Оригинальная работа
- DINO-DETR, IDEA Research
- Лицензия исходного проекта
- Apache-2.0
- Исходный код проекта
- github.com/IDEA-Research/DINO
- Код LibreYOLO
- MIT
- Веса
- Apache-2.0, повторно опубликованы на huggingface.co/LibreYOLO
- Толкование
- 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.
Три официальных чекпойнта взяты из папки релиза в Google Drive от авторов, а не из карточки модели на Hugging Face. Оригинальный репозиторий объявляет Apache-2.0 на уровне репозитория, но не прикладывает к самим чекпойнтам ни файла лицензии, ни метаданных о ней, поэтому основанием для распространения служит именно это объявление на уровне репозитория, а не отдельное разрешение для конкретного чекпойнта. Каждое зеркало LibreYOLO поставляется с дословным текстом лицензии Apache-2.0 из оригинала и с примечанием, которое это объясняет.
Цитирование
@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}
}Скопировано из блока цитирования авторов на странице github.com/IDEA-Research/DINO#bibtex.