Это официальный репозиторий с реализацией PyTorch LW-DETR: замена трансформатора YOLO для обнаружения в реальном времени.
☀️ Если вы найдете эту работу полезной для вашего исследования, пожалуйста, пометьте наш репозиторий и процитируйте нашу статью! ☀️
Выпустите серию моделей обнаружения в реальном времени в LW-DETR, включая LW-DETR-tiny, LW-DETR-small, LW-DETR-medium, LW-DETR-large и LW-DETR-xlarge, под названием
Выпустите серию предварительно обученных моделей в LW-DETR. Пожалуйста, обратитесь к «Обнимающему лицу» для загрузки.
[2024/7/15] Мы представляем OVLW-DETR, эффективный детектор открытого словаря с выдающимися характеристиками и низкой задержкой, построенный на основе LW-DETR. Он превосходит существующие детекторы открытого словаря в реальном времени по стандартному тесту Zero-Shot LVIS. Исходный код и предварительно обученная модель скоро появятся, следите за обновлениями!
1. Введение
2. Установка
3. Подготовка
4. Поезд
5. Оценка
6. Развертывание
7. Основные результаты.
8. Ссылки
9. Цитирование
LW-DETR — это легкий трансформатор обнаружения, который превосходит YOLO при обнаружении объектов в реальном времени. Архитектура представляет собой простой стек из кодера ViT, проектора и мелкого декодера DETR. LW-DETR использует новейшие передовые методы, такие как эффективные методы обучения, например, улучшенные потери и предварительное обучение, а также чередующееся окно и глобальное внимание для уменьшения сложности кодера ViT. LW-DETR улучшает кодировщик ViT путем агрегирования многоуровневых карт объектов, а также промежуточных и конечных карт объектов в кодере ViT, формируя более богатые карты объектов, а также представляет организацию карт объектов с большим количеством окон для повышения эффективности вычислений чередующегося внимания. LW-DETR обеспечивает более высокую производительность, чем существующие детекторы реального времени, например YOLO и его варианты, на COCO и других наборах эталонных данных.
Код разработан и проверен под python=3.8.19, pytorch=1.13.0, cuda=11.6,TensorRT-8.6.1.6
. Также могут быть доступны более высокие версии.
Создайте свою собственную среду Python с помощью Anaconda.
conda create -n lwdetr python=3.8.19 Конда активирует lwdetr
Клонируйте этот репозиторий.
git-клон https://github.com/Atten4Vis/LW-DETR.gitcd LW-DETR
Установите PyTorch и torchvision.
Следуйте инструкциям на https://pytorch.org/get-started/locally/.
# пример: conda install pytorch==1.13.0 torchvision==0.14.0 pytorch-cuda=11.6 -c pytorch -c nvidia
Установите необходимые пакеты.
Для обучения и оценки:
pip install -r требования.txt
Для развертывания:
Пожалуйста, обратитесь к NVIDIA за инструкциями по установке TensorRT.
pip install -r Deploy/requirements.txt
Компиляция операторов CUDA
модели компакт-дисков/операции python setup.py build install# unit test (все проверки должны быть верными)python test.pycd ../..
Для набора данных MS COCO загрузите и извлеките изображения train и val COCO 2017 с аннотациями с сайта http://cocodataset.org. Мы ожидаем, что структура каталогов будет следующей:
COCODIR/ ├── train2017/ ├── val2017/ └── annotations/ ├── instances_train2017.json └── instances_val2017.json
Для набора данных Objects365 для предварительного обучения загрузите изображения Objects365 с аннотациями с https://www.objects365.org/overview.html.
Все контрольные точки можно найти в Hugging Face.
Предварительное обучение на Objects365.
Предварительно обучил ВИТ.
Мы предварительно обучаем ViT на наборе данных Objects365, используя метод MIM, CAE v2, на основе предварительно обученных моделей. Пожалуйста, перейдите по следующей ссылке, чтобы загрузить предварительно обученные модели и поместить их в pretrain_weights/
.
Модель | Комментарий |
---|---|
caev2_tiny_300e_objects365 | предварительно обученная модель ViT на объектах 365 для LW-DETR-tiny/small с использованием CAE v2 |
caev2_tiny_300e_objects365 | предварительно обученная модель ViT на объектах 365 для LW-DETR-средний/большой с использованием CAE v2 |
caev2_tiny_300e_objects365 | предварительно обученная модель ViT на объектах 365 для LW-DETR-xlarge с использованием CAE v2 |
Предварительно обученный LW-DETR.
Мы переобучаем кодировщик и обучаем проектор и декодер на Objects365 в режиме супервизии. Пожалуйста, перейдите по следующей ссылке, чтобы загрузить предварительно обученные модели и поместить их в pretrain_weights/
.
Модель | Комментарий |
---|---|
LWDETR_tiny_30e_objects365 | предварительно обученная LW-DETR-крошечная модель на объектах 365 |
LWDETR_small_30e_objects365 | предварительно обученная LW-DETR-маленькая модель на объектах 365 |
LWDETR_medium_30e_objects365 | предварительно обученная модель среды LW-DETR на объектах 365 |
LWDETR_large_30e_objects365 | предварительно обученная LW-DETR-большая модель на объектах 365 |
LWDETR_xlarge_30e_objects365 | предварительно обученная модель LW-DETR-xlarge на объектах365 |
Точная настройка COCO. Мы настраиваем предварительно обученную модель на COCO. Если вы хотите повторно реализовать наш репозиторий, пропустите этот шаг. Если вы хотите напрямую оценить наши обученные модели, перейдите по следующей ссылке, чтобы загрузить точно настроенные модели и поместить их в output/
.
Модель | Комментарий |
---|---|
LWDETR_tiny_60e_coco | доработанная модель LW-DETR-мини на COCO |
LWDETR_small_60e_coco | доработанная LW-DETR-маленькая модель на COCO |
LWDETR_medium_60e_coco | доработанная модель LW-DETR-medium на COCO |
LWDETR_large_60e_coco | доработанная LW-DETR-большая модель на COCO |
LWDETR_xlarge_60e_coco | доработанная модель LW-DETR-xlarge на COCO |
Вы можете напрямую запустить файл scripts/lwdetr_
для процесса обучения на наборе данных кокоса.
sh скрипты/lwdetr_tiny_coco_train.sh /путь/к/вашему/COCODIR
sh скрипты/lwdetr_small_coco_train.sh /путь/к/вашему/COCODIR
sh скрипты/lwdetr_medium_coco_train.sh /путь/к/вашему/COCODIR
sh скрипты/lwdetr_large_coco_train.sh /путь/к/вашему/COCODIR
sh скрипты/lwdetr_xlarge_coco_train.sh /путь/к/вашему/COCODIR
Вы можете напрямую запустить файл scripts/lwdetr_
для процесса оценки набора данных кокоса. См. раздел 3. Подготовка к загрузке серии моделей LW-DETR.
sh скрипты/lwdetr_tiny_coco_eval.sh /путь/к/вашему/COCODIR/путь/к/вашей/контрольной точке
sh скрипты/lwdetr_small_coco_eval.sh /путь/к/вашему/COCODIR/путь/к/вашей/контрольной точке
sh скрипты/lwdetr_medium_coco_eval.sh /путь/к/вашему/COCODIR/путь/к/вашей/контрольной точке
sh скрипты/lwdetr_large_coco_eval.sh /путь/к/вашему/COCODIR/путь/к/вашей/контрольной точке
sh скрипты/lwdetr_xlarge_coco_eval.sh /путь/к/вашему/COCODIR/путь/к/вашей/контрольной точке
Вы можете запустить файл scripts/lwdetr_
чтобы экспортировать модели для разработки. Перед выполнением убедитесь, что переменные среды TensorRT и cuDNN установлены правильно.
# экспортировать сценарии модели ONNX/lwdetr_tiny_coco_export.sh /path/to/your/COCODIR /path/to/your/checkpoint# преобразовать модель из ONNX в движок TensorRT как сценарии wellsh/lwdetr_tiny_coco_export.sh /path/to/your/COCODIR /path /к/вашем/контрольно-пропускному пункту --trt
# экспортировать сценарии модели ONNX/lwdetr_small_coco_export.sh /path/to/your/COCODIR /path/to/your/checkpoint# преобразовать модель из ONNX в движок TensorRT как сценарии wellsh/lwdetr_small_coco_export.sh /path/to/your/COCODIR /path /к/вашем/контрольно-пропускному пункту --trt
# экспортировать сценарии модели ONNX/lwdetr_medium_coco_export.sh /path/to/your/COCODIR /path/to/your/checkpoint# преобразовать модель из ONNX в движок TensorRT как сценарии wellsh/lwdetr_medium_coco_export.sh /path/to/your/COCODIR /path /к/вашем/контрольно-пропускному пункту --trt
# экспортировать сценарии модели ONNX/lwdetr_large_coco_export.sh /path/to/your/COCODIR /path/to/your/checkpoint# преобразовать модель из ONNX в движок TensorRT как сценарии wellsh/lwdetr_large_coco_export.sh /path/to/your/COCODIR /path /к/вашем/контрольно-пропускному пункту --trt
# экспортировать сценарии модели ONNX/lwdetr_xlarge_coco_export.sh /path/to/your/COCODIR /path/to/your/checkpoint# преобразовать модель из ONNX в движок TensorRT как сценарии wellsh/lwdetr_xlarge_coco_export.sh /path/to/your/COCODIR /path /к/вашем/контрольно-пропускному пункту --trt
Вы можете использовать инструмент deploy/benchmark.py
для запуска тестов задержки вывода.
# оценить и сравнить задержку в модели onnxpython Deploy/benchmark.py --path=/path/to/your/onnxmodel --coco_path=/path/to/your/COCODIR --run_benchmark # оценить и сравнить задержку на движке TensorRTpython Deploy/benchmark.py --path=/path/to/your/trtengine --coco_path=/path/to/your/COCODIR --run_benchmark
Основные результаты по набору данных кокоса. Мы сообщаем о mAP, как указано в исходной статье, а также о mAP, полученном в результате повторной реализации.
Метод | предварительная подготовка | Парамс (М) | Флопы (G) | Задержка модели (мс) | Общая задержка (мс) | карта | Скачать |
---|---|---|---|---|---|---|---|
LW-DETR-tiny | ✔ | 12.1 | 11.2 | 2.0 | 2.0 | 42,6 (42,9) | Связь |
LW-DETR-small | ✔ | 14,6 | 16,6 | 2,9 | 2,9 | 48,0 (48,1) | Связь |
LW-DETR-medium | ✔ | 28,2 | 42,8 | 5,6 | 5,6 | 52,5 (52,6) | Связь |
LW-DETR-large | ✔ | 46,8 | 71,6 | 8,8 | 8,8 | 56,1 (56,1) | Связь |
LW-DETR-xlarge | ✔ | 118,0 | 174,2 | 19.1 | 19.1 | 58,3 (58,3) | Связь |
Наш проект реализуется на основе следующего публичного документа с кодом:
Группа ДЭТР
ВиТДет
Деформируемый ДЭТР
Условный DETR
YOLOv8
ВыровнятьDETR
САЕ v2
САЕ
Если вы найдете этот код полезным в своих исследованиях, пожалуйста, рассмотрите возможность цитирования нашей статьи:
@article{chen2024lw,title={LW-DETR: замена трансформатора YOLO для обнаружения в реальном времени},author={Чен, Цян и Су, Сянбо и Чжан, Синьюй и Ван, Цзянь и Чен, Цзяхуэй и Шэнь, Юньпэн и Хан, Чучу и Чен, Цзилян и Сюй, Вэйсян и Ли, Фаньронг и другие},journal={препринт arXiv arXiv:2406.03459},year={2024}}