Платформа обнаружения объектов Darknet и YOLO
Darknet — это платформа нейронных сетей с открытым исходным кодом, написанная на C, C++ и CUDA.
YOLO (You Only Look Once) — это современная система обнаружения объектов в режиме реального времени, работающая в рамках Darknet.
Узнайте, как Hank.ai расширяет возможности сообщества Darknet/YOLO!
Анонсируем Darknet V3 «Джаз»
Посетите сайт Darknet/YOLO.
Изучите FAQ по Darknet/YOLO
Присоединяйтесь к Discord-серверу Darknet/YOLO
Статьи
1. Бумага YOLOv7: Ссылка на бумагу
2. Paper Scaled-YOLOv4: ссылка на Paper
3. Бумага YOLOv4: Ссылка на бумагу
4. Бумага YOLOv3: Ссылка на бумагу
Общая информация
Платформа Darknet/YOLO неизменно превосходит другие платформы и версии YOLO как по скорости, так и по точности.
Этот фреймворк полностью бесплатен и имеет открытый исходный код. Вы можете легко интегрировать Darknet/YOLO в существующие проекты и продукты, в том числе коммерческие, без каких-либо лицензионных сборов.
Darknet V3 («Джаз»), выпущенный в октябре 2024 года, демонстрирует выдающуюся производительность, воспроизводя видео набора данных LEGO со скоростью до 1000 кадров в секунду на графическом процессоре NVIDIA RTX 3090. Это означает, что Darknet/YOLO обрабатывает каждый видеокадр, включая изменение размера и обработку, менее чем за 1 миллисекунду.
Присоединяйтесь к серверу Discord Darknet/YOLO для поддержки и обсуждения: https://discord.gg/zSq8rtW
Версия Darknet/YOLO для ЦП эффективно работает на различных устройствах, включая Raspberry Pi, облачные и колаб-серверы, настольные компьютеры, ноутбуки и высокопроизводительные учебные устройства. Однако версия Darknet/YOLO с графическим процессором требует графического процессора NVIDIA с поддержкой CUDA.
Darknet/YOLO совместим с операционными системами Linux, Windows и Mac. Подробные инструкции приведены в инструкциях по сборке ниже.
Даркнет-версия
Оригинальный инструмент Darknet, разработанный Джозефом Редмоном в период с 2013 по 2017 год, не имел номера версии. Мы называем эту версию 0.x.
В последующем популярном репозитории Darknet, который вел Алексей Бочковский в 2017–2021 годах, также отсутствовал номер версии. Мы рассматриваем эту версию 1.x.
Репозиторий Darknet, спонсируемый Hank.ai и поддерживаемый Стефаном Шареттом, начиная с 2023 года, впервые представил команду версии. С 2023 до конца 2024 года возвращалась версия 2.x «ДУБ».
Команда разработчиков сосредоточилась на минимизации нарушений существующей функциональности, одновременно знакомясь с кодовой базой.
Ключевые изменения, реализованные за этот период, включают:
1. Унифицированный процесс сборки: переписаны этапы сборки, чтобы упростить процесс с использованием CMake как для Windows, так и для Linux.
2. Преобразование C++. Кодовая база была преобразована для использования компилятора C++.
3. Улучшение диаграммы. В ходе обучения была улучшена визуализация файлаchart.png.
4. Исправления ошибок и оптимизации. Были реализованы многочисленные исправления ошибок и оптимизации, связанные с производительностью, в первую очередь направленные на сокращение времени обучения.
Последняя ветвь этой кодовой базы — версия 2.1, расположенная в ветке v2.
Следующий этап разработки начался в середине 2024 года и завершился выпуском версии 3.x «JAZZ» в октябре 2024 года. Теперь команда version возвращает версию 3.x.
Вы всегда можете вернуться к предыдущей ветке v2, если вам нужно выполнить определенные команды из этой версии. Сообщите команде разработчиков, если вы обнаружите какие-либо отсутствующие команды, и они рассмотрят возможность их добавления.
Значительные изменения, внесенные в версию 3.х «ДЖАЗ»:
1. Удаление команд. Многие устаревшие и неподдерживаемые команды были удалены.
2. Оптимизация производительности. Многочисленные оптимизации производительности были применены как для обучения, так и для вывода.
3. Модификация API. Устаревший API C претерпел изменения. Приложения, использующие оригинальный API Darknet, могут потребовать незначительных изменений. https://darknetcv.ai/api/api.html
4. Новый API C/C++: Darknet V3 представляет новый API C и C++. https://darknetcv.ai/api/api.html
5. Расширенный пример кода. Новые приложения и примеры кода доступны в src-examples. https://darknetcv.ai/api/files.html
MSCOCO Предварительно обученные веса
Несколько популярных версий YOLO для удобства были предварительно обучены на наборе данных MSCOCO. Этот набор данных включает 80 классов, которые перечислены в текстовом файле cfg/coco.names.
Помимо MSCOCO, для тестирования Darknet/YOLO доступны различные более простые наборы данных и предварительно обученные веса, такие как LEGO Gears и Rolodex. Дополнительную информацию см. в FAQ по Darknet/YOLO.
Предварительно обученные веса MSCOCO можно загрузить из различных источников, включая этот репозиторий:
YOLOv2 (ноябрь 2016 г.)
yolov2-tiny.weights
yolov2-full.weights
YOLOv3 (май 2018 г.)
yolov3-tiny.weights
yolov3-full.weights
YOLOv4 (май 2020 г.)
yolov4-tiny.weights
yolov4-full.weights
YOLOv7 (август 2022 г.)
yolov7-tiny.weights
yolov7-full.weights
Предварительно обученные веса MSCOCO предоставляются только в демонстрационных целях. Соответствующие файлы .cfg и .names для MSCOCO находятся в каталоге cfg.
Вот несколько примеров команд:
`бить
wget --no-clobber https://github.com/hank-ai/darknet/releases/download/v2.0/yolov4-tiny.weights darknet02displayannotatedimages coco.names yolov4-tiny.cfg yolov4-tiny.weights image1.jpg
darknet03display_videos coco.names yolov4-tiny.cfg yolov4-tiny.weights video1.avi
DarkHelp coco.names yolov4-tiny.cfg yolov4-tiny.weights image1.jpg
DarkHelp coco.names yolov4-tiny.cfg yolov4-tiny.weights video1.avi
`
Пользователям предлагается обучать свои собственные сети. MSCOCO в первую очередь служит инструментом проверки правильности работы.
Здание
Различные методы сборки, использовавшиеся до 2023 года, были объединены в единое решение. Для Darknet требуется C++17 или более новая версия OpenCV, а для создания необходимых файлов проекта используется CMake.
Для создания Darknet/YOLO не требуется знание C++. Это аналогично вождению автомобиля, не будучи механиком.
Гугл Колаб
Инструкции Google Colab повторяют инструкции для Linux. Доступно несколько блокнотов Jupyter для демонстрации конкретных задач, таких как обучение новой сети.
Изучите блокноты в подкаталоге colab или следуйте инструкциям Linux ниже.
Метод CMake в Linux
Учебное пособие по сборке Darknet для Linux
1. Предварительные требования: убедитесь, что у вас установлены следующие пакеты:
`бить
sudo apt-get install build-essential git libopencv-dev cmake
`
2. Клонировать Darknet: клонируйте репозиторий Darknet:
`бить
mkdir ~/srccd ~/src
клон git https://github.com/hank-ai/darknet
компакт-диск даркнет
`
3. Создайте каталог сборки. Создайте каталог сборки:
`бить
сборка mkdir
сборка компакт-диска
`
4. Настройка с помощью CMake. Запустите CMake, чтобы настроить сборку:
`бить
cmake -DCMAKEBUILDTYPE=Выпустить ..
`
5. Сборка. Сборка проекта:
`бить
сделать -j4
`
6. Пакет: создайте пакет Debian:
`бить
сделать пакет
`
7. Установка. Установите пакет:
`бить
sudo dpkg -i darknet-ВЕРСИЯ.deb
`
Дополнительно: CUDA/cuDNN для ускорения графического процессора.
1. Установите CUDA. Если у вас современный графический процессор NVIDIA, вы можете установить CUDA для ускорения графического процессора. Загрузите и установите CUDA с https://developer.nvidia.com/cuda-downloads.
2. Установите cuDNN: загрузите и установите cuDNN с https://developer.nvidia.com/rdp/cudnn-download или https://docs.nvidia.com/deeplearning/cudnn/install-guide/index.html#cudnn- обзор менеджера-установки-пакетов.
3. Проверьте установку CUDA. Убедитесь, что вы можете запустить nvcc и nvidia-smi после установки CUDA. Возможно, вам придется настроить переменную PATH.
4. Конфигурация CMake (если CUDA установлен после CMake): если вы устанавливаете CUDA или CUDA+cuDNN после настройки CMake, вам необходимо удалить файл CMakeCache.txt в каталоге сборки Darknet, чтобы заставить CMake повторно найти необходимые файлы. Затем перезапустите CMake и пересоберите Darknet.
Опытные пользователи
Пакет RPM. Чтобы создать установочный файл RPM вместо файла DEB, измените следующие строки в CM_package.cmake:
`cmake
# SET (CPACK_GENERATOR "DEB")
НАБОР (CPACK_GENERATOR «ОБ/МИН»)
`
Такие дистрибутивы, как Centos и OpenSUSE. Для таких дистрибутивов, как Centos и OpenSUSE, измените строки в CM_package.cmake на:
`cmake
# SET (CPACK_GENERATOR "DEB")
НАБОР (CPACK_GENERATOR «ОБ/МИН»)
`
Установочный пакет: Чтобы установить пакет после сборки, используйте менеджер пакетов вашего дистрибутива. Например, в системах на базе Debian, таких как Ubuntu, используйте sudo dpkg -i darknet-2.0.1-Linux.deb.
Установлены ключевые файлы:
/usr/bin/darknet: основной исполняемый файл Darknet. Подтвердите установку, запустив версию darknet в CLI.
/usr/include/darknet.h: API Darknet для разработчиков C, C++ и Python.
/usr/include/darknet_version.h: содержит информацию о версии для разработчиков.
/usr/lib/libdarknet.so: библиотека для компоновки разработчиков C, C++ и Python.
/opt/darknet/cfg/...: хранит все шаблоны .cfg.
Метод Windows CMake
Учебное пособие по сборке для Windows (при условии установки новой Windows 11 22H2)
1. Предварительные условия для установки: Установите необходимые компоненты с помощью winget:
`бить
winget установить Git.Git
winget установить Kitware.CMake
winget установить nsis.nsis
winget install Microsoft.VisualStudio.2022.Community
`
2. Установите поддержку Visual Studio C++. Измените установку Visual Studio, включив в нее поддержку C++:
* Откройте меню «Пуск» Windows и запустите «Установщик Visual Studio».
* Нажмите «Изменить».
* Выберите «Разработка настольных компьютеров с помощью C++».
* Нажмите «Изменить» в правом нижнем углу, а затем «Да».
3. Командная строка разработчика: запустите «Командную строку разработчика для VS 2022» из меню «Пуск» Windows. Не используйте PowerShell для этих действий!
4. Установите Microsoft VCPKG: Установите VCPKG для сборки OpenCV:
`бить
CDC:
mkdir c:src
компакт-диск c: источник
клон git https://github.com/microsoft/vcpkg
компакт-диск vcpkg
bootstrap-vcpkg.bat
.vcpkg.exe интегрировать установку
.vcpkg.exe интегрирует PowerShell
.vcpkg.exe install opencv[contrib,dnn,freetype,jpeg,openmp,png,webp,world]:x64-windows
`
* Будьте терпеливы, этот шаг может занять значительное время, поскольку потребуется загрузить и собрать множество компонентов.
5. Необязательно: CUDA/cuDNN для ускорения графического процессора. Выполните те же действия, которые описаны в разделе Linux.
6. Клонировать Darknet: клонируйте репозиторий Darknet:
`бить
компакт-диск c: источник
клон git https://github.com/hank-ai/darknet.git
компакт-диск даркнет
сборка mkdir
сборка компакт-диска
`
7. Настройка с помощью CMake. Настройте сборку с помощью CMake:
`бить
cmake -DCMAKEBUILDTYPE=Выпуск -DCMAKETOOLCHAINFILE=C:/src/vcpkg/scripts/buildsystems/vcpkg.cmake ..
`
8. Сборка с помощью msbuild. Создайте проект с помощью msbuild:
`бить
msbuild.exe /property:Platform=x64;Configuration=Release /target:Build -maxCpuCount -verbosity:normal -detailedSummary darknet.sln
msbuild.exe /property:Platform=x64;Configuration=Release PACKAGE.vcxproj
`
Устранение неполадок: отсутствуют библиотеки DLL CUDA/cuDNN.
Если вы столкнулись с ошибками, связанными с отсутствием библиотек DLL CUDA или cuDNN (например, cublas64_12.dll), вручную скопируйте файлы .dll CUDA в тот же выходной каталог, что и darknet.exe. Например:
`бить
скопировать «C:Program FilesNVIDIA GPU Computing ToolkitCUDAv12.2bin*.dll» src-cliRelease
`
* Не забудьте настроить команду в зависимости от вашей версии CUDA.
Повторно запустите команду msbuild.exe после копирования библиотек DLL.
Опытные пользователи
Решение Visual Studio: CMake создает файл решения Visual Studio (Darknet.sln). Разработчики программного обеспечения, которые предпочитают использовать графический интерфейс Visual Studio, могут загружать проект Darknet в Visual Studio вместо использования командной строки.
Проверка и установка
Проверка: выполните следующую команду, чтобы проверить правильность сборки Darknet:
`бить
Версия C:srcDarknetbuildsrc-cliReleasedarknet.exe
`
Установка: запустите мастер установки NSIS, созданный на последнем этапе, чтобы правильно установить Darknet, библиотеки, включаемые файлы и необходимые библиотеки DLL. Найдите файл darknet-VERSION.exe в каталоге сборки. Например: darknet-2.0.31-win64.exe.
Установлены ключевые файлы:
C:Program FilesDarknetbin/darknet.exe: приложение Darknet CLI.
C:Program FilesDarknet/bin: содержит другие примеры приложений.
C:Program FilesDarknet: включает необходимые сторонние файлы .dll (OpenCV), файлы Darknet .dll, .lib и .h, а также файлы шаблонов .cfg.
Использование даркнета
интерфейс командной строки
Следующий список не является исчерпывающим из всех команд, поддерживаемых Darknet.
В дополнение к CLI Darknet рассмотрите CLI проекта DarkHelp, который предлагает альтернативный CLI с несколькими расширенными функциями, недоступными напрямую в Darknet. Вы можете использовать оба интерфейса командной строки одновременно.
Основные предпосылки:
Для большинства команд вам понадобится файл .weights вместе с соответствующими файлами .names и .cfg.
Обучите свою собственную сеть (настоятельно рекомендуется!) или загрузите предварительно обученную сеть из Интернета.
Примеры предварительно обученных наборов данных:
LEGO Gears: обнаружение объектов на изображениях.
Rolodex: обнаружение текста на изображениях.
MSCOCO: стандартное обнаружение объектов класса 80.
Примеры команд:
1. Получите помощь:
`бить
помощь в даркнете
`
2. Проверьте версию:
`бить
даркнет-версия
`
3. Прогнозирование изображения:
В2:
`бить
Тест детектора даркнета cars.data cars.cfg cars_best.weights image1.jpg
`
В3:
`бить
darknet02displayannotatedimages cars.cfg image1.jpg
`
Темная помощь:
`бить
DarkHelp cars.cfg cars.cfg cars_best.weights image1.jpg
`
4. Выходные координаты:
В2:
`бить
Тест детектора даркнета животные.данные животные.cfg животныеbest.weights -extoutput собака.jpg
`
В3:
`бить
darknet01inference_images животные собака.jpg
`
Темная помощь:
`бить
DarkHelp --json животные.cfg животные.названия животных_лучшие.веса собаки.jpg
`
5. Обработка видео:
В2:
`бить
Демонстрация детектора даркнета животные.данные животные.cfg животныеbest.weights -extoutput test.mp4
`
В3:
`бить
darknet03display_videos животные.cfg test.mp4
`
Темная помощь:
`бить
DarkHelp животные.cfg животные.имена животных_лучшие.веса test.mp4
`
6. Обработка веб-камеры:
В2:
`бить
Демонстрация детектора даркнета животные.данные животные.cfg животные_лучшие.веса -c 0
`
В3:
`бить
darknet08display_webcam животные
`
7. Видеовыход:
В2:
`бить
Демонстрация детектора даркнета животные.данные животные.cfg животныеbest.weights test.mp4 -outfilename res.avi
`
В3:
`бить
darknet05processvideosmultithreaded животные.cfg животные.имена животных_лучшие.тест веса.mp4
`
Темная помощь:
`бить
DarkHelp животные.cfg животные.имена животных_лучшие.веса test.mp4
`
8. Вывод JSON:
В2:
`бить
Демонстрация детектора даркнета животные.данные животные.cfg животныеbest.weights test50.mp4 -jsonport 8070 -mjpegport 8090 -extoutput
`
В3:
`бить
darknet06imagestojson животные image1.jpg
`
Темная помощь:
`бить
DarkHelp --json животные.названия животных.cfg животные_лучшие.веса image1.jpg
`
9. Конкретный графический процессор:
В2:
`бить
Демонстрация детектора даркнета животные.данные животные.cfg животные_лучшие.веса -i 1 test.mp4
`
10. Оценка точности:
Карта:
`бить
Карта детектора даркнета вождение.данные вождение.cfg вождение_best.weights ...
`
mAP@IoU=75:
`бить
Карта детектора даркнета животные.данные животные.cfg животныеbest.weights -iouthresh 0.75
`
11. Расчет анкера:
DarkMark: используйте DarkMark для перерасчета привязок для достижения оптимальной производительности.
Даркнет (старый метод):
`бить
детектор даркнета кальканчоры животные.данные -numof_clusters 6 -ширина 320 -высота 256
`
12. Обучение новой сети:
DarkMark (рекомендуется): используйте DarkMark для аннотаций и обучения.
Ручная настройка:
1. Создание каталога: Создайте папку для своего проекта (например, ~/nn/animals/).
2. Файл конфигурации: скопируйте файл конфигурации Darknet в качестве шаблона (например, cfg/yolov4-tiny.cfg).
3. Файл .names: создайте текстовый файл .names со списком ваших классов (например, ~/nn/animals/animals.names).
4. Файл .data: создайте текстовый файл .data в той же папке, что и файл конфигурации (например, ~/nn/animals/animals.data).
5. Папка набора данных: создайте папку для изображений и аннотаций (например, ~/nn/animals/dataset).
6. Аннотации .txt: создавайте файлы .txt для каждого изображения, содержащие координаты аннотаций. Используйте DarkMark или другие инструменты аннотаций.
7. Файлы train/valid: создайте файлы Animalstrain.txt и Animalvalid.txt, в которых будут перечислены ваши тренировочные и проверочные изображения.
8. Измените файл .cfg. Настройте файл конфигурации на основе вашего набора данных.
* Установите пакет = 64.
* Отрегулируйте подразделения на основе памяти вашего графического процессора.
Установите max_batches на 2000 классов.
* Установите шаги на 80% и 90% от max_batches.
* Отрегулируйте ширину и высоту в зависимости от размеров сети.
* Установите для классов=... количество классов в вашем файле .names.
Настройте фильтры =... в разделах [convolutional] перед каждым разделом [yolo] на (numberofclasses + 5) 3.
9. Тренировка: Начните тренировку:
`бить
компакт-диск ~/nn/животные/
Детектор даркнета -map -dont_show train животные.данные животные.cfg
`
* Лучшие веса будут сохранены как животные_best.weights.
* Просмотрите файлchart.png, чтобы отслеживать ход тренировки.
Другие инструменты и ссылки
Ключевые ресурсы:
DarkMark: для управления проектами Darknet/YOLO, аннотирования изображений, проверки аннотаций и создания обучающих файлов.
DarkHelp: надежная альтернатива Darknet CLI с такими функциями, как мозаика изображений, отслеживание объектов в видео и надежный C++ API, подходящий для коммерческих приложений.
Часто задаваемые вопросы по Darknet/YOLO: найдите ответы на распространенные вопросы и решения.
Канал Стефана на YouTube: просмотрите обучающие видеоролики и примеры.
Сервер Discord Darknet/YOLO: общайтесь с другими пользователями Darknet/YOLO для получения поддержки и обсуждений.
Дорожная карта
Последнее обновление 30 октября 2024 г.:
Выполненные задачи:
1. Заменен qsort() на std::sort() в соответствующих разделах обучения.
2. Удалены check_mistakes, getchar() и system().
3. Преобразовал Darknet для использования компилятора C++ (g++ в Linux, VisualStudio в Windows).
4. Исправлена сборка Windows.
5. Исправлена поддержка Python.
6. Встроена библиотека даркнета.
7. Снова включены метки на предсказаниях (код "Алфавит").
8. Повторно включен код CUDA/GPU.
9. Снова включил CUDNN.
10. Снова включил половину CUDNN.
11. Удалена жестко запрограммированная архитектура CUDA.
12. Улучшена информация о версии CUDA.
13. Снова включил AVX.
14. Удалены старые решения и Makefile.
15. OpenCV сделан необязательным.
16. Убрана зависимость от старой библиотеки pthread.
17. Удалены приставки.
18. Переписал CMakeLists.txt, чтобы использовать новое обнаружение CUDA.
19. Удален старый «алфавитный» код и удалены изображения в данных/метках.
20. Включена сборка из исходного кода.
21. Улучшен вывод номера версии.
22. Оптимизация производительности, связанная с обучением (в процессе).
23. Оптимизация производительности, связанная с выводами (в процессе).
24. Реализована передача по ссылке, где это применимо.
25. Очищены файлы .hpp.
26. Переписал darknet.h.
27. Устранено приведение cv::Mat к void*, используя его как правильный объект C++.
28. Улучшена согласованность использования внутренней структуры изображения.
29. Исправлена сборка для устройств Jetson на базе ARM.
30. Исправлен Python API в V3.
Краткосрочные цели:
1. Замените printf() на std::cout (в процессе).
2. Изучите поддержку старых камер Zed.
3. Улучшить и стандартизировать анализ командной строки (в процессе).
Среднесрочные цели:
1. Удалите весь код char* и замените его на std::string.
2. Устранить предупреждения компилятора (в процессе).
3. Улучшите использование cv::Mat вместо пользовательской структуры изображения в C (в разработке).
4. Замените старую функциональность списка на std::vector или std::list.
5. Исправлена поддержка одноканальных изображений в оттенках серого.
6. Добавить поддержку N-канальных изображений, где N > 3 (например, изображения с дополнительной глубиной или тепловыми каналами).
7. Текущая очистка кода (в процессе).
Долгосрочные цели:
1. Устраните проблемы CUDA/CUDNN на всех графических процессорах.
2. Переписывание кода CUDA+cuDNN.
3. Изучите поддержку графических процессоров сторонних производителей.
4. Реализуйте вращающиеся ограничивающие рамки или поддержку «угла».
5. Поддержка ключевых точек/скелетонов.
6. Поддержка тепловых карт (в разработке).
7. Сегментация.