Платформа обнаружения объектов Darknet и YOLO
Логотипы !darknet и hank.ai
Darknet — это платформа нейронных сетей с открытым исходным кодом, написанная на C, C++ и CUDA. Он обеспечивает мощную основу для разработки и развертывания моделей обнаружения объектов.
YOLO (You Only Look Once) — это современная система обнаружения объектов в реальном времени, построенная на базе Darknet. Он отличается скоростью и точностью, что делает его популярным выбором для различных приложений.
Хотите узнать больше о том, как Hank.ai вносит свой вклад в сообщество Darknet/YOLO?
Посетите официальный сайт Darknet/YOLO:
Погрузитесь в подробный FAQ по Darknet/YOLO:
Присоединяйтесь к оживленному сообществу Darknet/YOLO Discord:
Статьи
YOLOv7: Ссылка на статью
Scaled-YOLOv4: Ссылка на статью
YOLOv4: Ссылка на статью
YOLOv3: Ссылка на статью
Общая информация
Платформа Darknet/YOLO продолжает оставаться лидером в области обнаружения объектов, постоянно предлагая преимущества в скорости и точности по сравнению с другими платформами и версиями YOLO.
Ключевые особенности:
1. Открытый исходный код и бесплатно. Эта платформа полностью бесплатна и имеет открытый исходный код, что позволяет вам легко включать ее в свои проекты без каких-либо лицензионных ограничений.
2. Высокая производительность: Darknet V3 («Джаз»), выпущенный в октябре 2024 года, обеспечивает впечатляющую производительность, достигая 1000 кадров в секунду для набора данных LEGO с использованием графического процессора NVIDIA RTX 3090.
3. Универсальное развертывание: Darknet/YOLO совместим с различными устройствами, от Raspberry Pi и облачных серверов до настольных компьютеров и высокопроизводительных учебных устройств.
4. Межплатформенная поддержка: известно, что он безупречно работает в операционных системах Linux, Windows и Mac.
Нужна помощь или хотите обсудить Darknet/YOLO? Присоединяйтесь к активному сообществу Discord:
Даркнет-версия
Эволюцию Даркнета можно проследить по его версиям:
1. Версия 0.x (2013–2017 гг.). Исходный инструмент Darknet, разработанный Джозефом Редмоном, не имел официального номера версии.
2. Версия 1.x (2017–2021 гг.): Эту версию поддерживал Алексей Бочковский, и у нее также не было номера версии.
3. Версия 2.x «OAK» (2023 г.): в репозитории Darknet, спонсируемом Hank.ai и поддерживаемом Стефаном Шареттом, появилась команда версий. Эта версия принесла значительные улучшения, в том числе:
* Унифицированные этапы сборки с использованием CMake для Windows и Linux.
* Преобразование в компилятор C++.
* Улучшена визуализация файлаchart.png во время тренировки.
* Исправлены ошибки и оптимизирована производительность для повышения эффективности обучения.
4. Версия 2.1: последняя ветка кодовой базы v2.
5. Версия 3.x «JAZZ» (октябрь 2024 г.). В этом последнем выпуске представлены:
* Оптимизация производительности как для обучения, так и для вывода.
* Модифицированный устаревший API C, требующий незначительной адаптации для приложений, использующих исходный API Darknet.
* Новый API Darknet V3 C и C++.
* Новые приложения и примеры кода в каталоге src-examples.
Для совместимости со старыми версиями по-прежнему доступна ветка v2. Если вам нужно использовать определенные команды из предыдущих версий, сообщите нам, и мы рассмотрим возможность их обратного добавления.
MSCOCO Предварительно обученные веса
Несколько популярных версий YOLO предварительно обучены на наборе данных MSCOCO, что предлагает удобную отправную точку для экспериментов с платформой. MSCOCO содержит 80 классов, перечисленных в файле cfg/coco.names.
Доступны предварительно подготовленные веса:
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 в основном используется для проверки правильности работы вашей установки.
Примеры команд с использованием предварительно обученных весов:
`бить
Отображать аннотированные изображения
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
DarkHelp coco.names yolov4-tiny.cfg yolov4-tiny.weights image1.jpg
DarkHelp coco.names yolov4-tiny.cfg yolov4-tiny.weights video1.avi
`
Здание
Darknet использует CMake для оптимизации процесса сборки как для Windows, так и для Linux. Для этого требуется C++17 или более новый компилятор, а также OpenCV.
Инструкции по сборке теперь унифицированы, заменяя старые и более сложные методы.
Примечание. Если у вас возникли проблемы со старыми руководствами или этапами сборки, которые не соответствуют этому руководству, обратитесь к последним инструкциям, представленным здесь.
Разработчикам программного обеспечения рекомендуется посетить https://darknetcv.ai/, чтобы получить представление о внутренней работе структуры Darknet/YOLO.
Гугл Колаб
Инструкции Google Colab отражают инструкции Linux.
Изучите блокноты в подкаталоге colab или следуйте инструкциям Linux ниже.
Метод CMake в Linux
1. Установите необходимые пакеты:
`ударить
sudo apt-get install build-essential git libopencv-dev cmake
`
2. Клонируйте репозиторий Darknet:
`бить
мкдир ~/src
компакт-диск ~/источник
клон git https://github.com/hank-ai/darknet
компакт-диск даркнет
сборка mkdir
сборка компакт-диска
`
3. Настройте CMake:
`бить
cmake -DCMAKEBUILDTYPE=Выпустить ..
`
4. Создайте даркнет:
`бить
сделать -j4
`
5. Пакет Даркнет:
`ударить
упаковка
sudo dpkg -i darknet-ВЕРСИЯ.deb
`
Необязательно: CUDA или CUDA+cuDNN для ускорения графического процессора.
Посетите https://developer.nvidia.com/cuda-downloads, чтобы загрузить и установить CUDA.
Посетите https://developer.nvidia.com/rdp/cudnn-download или https://docs.nvidia.com/deeplearning/cudnn/install-guide/index.html#cudnn-package-manager-installation-overview, чтобы загрузить. и установите cuDNN.
После установки CUDA убедитесь, что nvcc и nvidia-smi доступны. Возможно, вам придется настроить переменную PATH.
Если вы установите CUDA или CUDA+cuDNN позже или обновите программное обеспечение NVIDIA:
Удалите файл CMakeCache.txt в каталоге сборки Darknet, чтобы заставить CMake повторно найти зависимости.
Восстановить Даркнет.
Чтобы обновить CMake в Ubuntu:
`ударить
sudo apt-get очистить cmake
sudo snap установить cmake --classic
`
Продвинутые пользователи:
Чтобы создать установочный файл RPM вместо файла DEB, измените CPACKGENERATOR в CMpackage.cmake на «RPM».
Для Centos и OpenSUSE измените CPACK_GENERATOR на «RPM».
После сборки установочного пакета используйте соответствующий менеджер пакетов для его установки.
Проверка:
Запустите версию darknet из командной строки, чтобы подтвердить установку.
Метод Windows CMake
1. Установите необходимое программное обеспечение:
`бить
winget установить Git.Git
winget установить Kitware.CMake
winget установить nsis.nsis
winget install Microsoft.VisualStudio.2022.Community
`
2. Измените установку Visual Studio:
* Откройте «Установщик Visual Studio».
* Нажмите «Изменить».
* Выберите «Разработка настольных компьютеров с помощью C++».
* Нажмите «Изменить», а затем «Да».
3. Откройте командную строку разработчика для VS 2022:
* Не используйте PowerShell.
4. Установите Microsoft VCPKG:
`бить
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 или CUDA+cuDNN для ускорения графического процессора.
* Установите CUDA, следуя инструкциям на странице https://developer.nvidia.com/cuda-downloads.
* Установите cuDNN, следуя инструкциям по адресу https://developer.nvidia.com/rdp/cudnn-download или https://docs.nvidia.com/deeplearning/cudnn/install-guide/index.html#download-windows.
После установки убедитесь, что nvcc.exe и nvidia-smi.exe доступны. Возможно, вам придется изменить переменную PATH.
Если вы установите CUDA или CUDA+cuDNN позже или обновите программное обеспечение NVIDIA:
* Убедитесь, что CUDA установлен после Visual Studio.
* Переустановите CUDA, если Visual Studio обновлена.
6. Клонируйте Даркнет и создайте его:
`ударить
компакт-диск c: источник
клон git https://github.com/hank-ai/darknet.git
компакт-диск даркнет
сборка mkdir
сборка компакт-диска
cmake -DCMAKEBUILDTYPE=Выпуск -DCMAKETOOLCHAINFILE=C:/src/vcpkg/scripts/buildsystems/vcpkg.cmake ..
msbuild.exe /property:Platform=x64;Configuration=Release /target:Build -maxCpuCount -verbosity:normal -detailedSummary darknet.sln
msbuild.exe /property:Platform=x64;Configuration=Release PACKAGE.vcxproj
`
7. Скопируйте библиотеки DLL CUDA (при необходимости):
* Если вы получаете ошибки об отсутствии библиотек DLL CUDA или cuDNN, вручную скопируйте их в выходной каталог Darknet. Например:
`ударить
скопировать «C:Program FilesNVIDIA GPU Computing ToolkitCUDAv12.2bin*.dll» src-cliRelease
`
8. Повторно запустите команду msbuild.exe, чтобы сгенерировать установочный пакет NSIS:
`бить
msbuild.exe /property:Platform=x64;Configuration=Release PACKAGE.vcxproj
`
Продвинутые пользователи:
Вы можете использовать файл решения Darknet.sln, созданный CMake, в графическом интерфейсе Visual Studio вместо инструментов командной строки.
Проверка:
Запустите версию C:srcDarknetbuildsrc-cliReleasedarknet.exe, чтобы подтвердить установку.
Чтобы установить Darknet, запустите мастер установки NSIS:
Найдите файл darknet-VERSION.exe в каталоге сборки.
Запустите мастер установки, чтобы установить приложение CLI, библиотеки, включаемые файлы и необходимые библиотеки DLL.
Использование даркнета
интерфейс командной строки
Примечание. Следующие команды не являются исчерпывающими.
В дополнение к интерфейсу командной строки Darknet рассмотрите возможность использования интерфейса командной строки проекта DarkHelp, который предлагает альтернативные функциональные возможности и расширенные возможности.
Большинству команд требуется файл .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. Запуск на конкретном графическом процессоре:
`ударить
Демонстрация детектора даркнета животные.данные животные.cfg животные_лучшие.веса -i 1 test.mp4
`
10. Проверка точности нейронной сети:
`ударить
Карта детектора даркнета вождение.данные вождение.cfg вождение_best.weights ...
`
11. Расчет mAP@IoU=75:
`ударить
Карта детектора даркнета животные.данные животные.cfg животныеbest.weights -iouthresh 0.75
`
12. Пересчет якорей:
`ударить
детектор даркнета кальканчоры животные.данные -numof_clusters 6 -ширина 320 -высота 256
`
13. Обучение новой сети:
`ударить
Детектор даркнета -map -dont_show train животные.данные животные.cfg
`
Обучение
Для упрощения аннотирования и обучения используйте DarkMark. Это рекомендуемый подход для создания новых нейронных сетей.
Настройка обучения вручную (если хотите):
1. Создайте папку проекта:
* Например, ~/nn/animals/ для обнаружения животных.
2. Скопируйте файл конфигурации Darknet в качестве шаблона:
* Например, cfg/yolov4-tiny.cfg.
3. Создайте текстовый файл Animal.names:
* Перечислите каждый класс, по одной записи в строке, без пустых строк и комментариев. Пример:
`
собака
кот
птица
лошадь
`
4. Создайте текстовый файл Animals.data:
`
занятия = 4
поезд = /home/имя пользователя/nn/animals/animals_train.txt
действительный = /home/имя пользователя/nn/animals/animals_valid.txt
имена = /home/имя_пользователя/nn/animals/animals.names
резервная копия = /home/имя пользователя/nn/animals
`
5. Создайте папку для изображений и аннотаций (например, ~/nn/animals/dataset).
* Аннотируйте изображения с помощью DarkMark или аналогичного программного обеспечения. Формат аннотаций YOLO описан в FAQ по Darknet/YOLO.
6. Создайте файлы Animalstrain.txt и Animalvalid.txt:
* Перечислите все изображения, использованные для обучения и проверки, по одному изображению в строке.
7. Измените файл .cfg:
* Установите пакет = 64.
* Настройте подразделения в зависимости от размеров вашей сети и памяти графического процессора. Начните с подразделений = 1.
* Установите max_batches в 2000 раз больше количества классов (например, 8000 для 4 классов).
* Установите шаги на 80% и 90% от max_batches.
* Отрегулируйте ширину и высоту в соответствии с желаемыми размерами сети.
* Измените классы, чтобы отразить количество классов в вашем файле .names.
Обновить фильтры в разделах [convolutional] перед каждым разделом [yolo]: (numberofclasses + 5) 3.
8. Начать обучение:
`ударить
компакт-диск ~/nn/животные/
детектор даркнета -map -dont_show train животные.данные животные.cfg
`
Более подробную информацию о обучении и расширенных параметрах можно найти в FAQ по Darknet/YOLO.
Другие инструменты и ссылки
DarkMark: управляйте проектами Darknet/YOLO, комментируйте изображения, проверяйте аннотации и создавайте обучающие файлы.
DarkHelp: предоставляет альтернативный интерфейс командной строки для Darknet, позволяющий размещать изображения, отслеживать объекты и надежный API C++ для коммерческих приложений.
Часто задаваемые вопросы по Darknet/YOLO: обширный ресурс для ответов на ваши вопросы.
Канал Стефана на YouTube: доступ к многочисленным руководствам и примерам видеороликов.
Сервер Discord Darknet/YOLO: общайтесь с другими пользователями для получения поддержки и обсуждений.
Дорожная карта
Последнее обновление 30 октября 2024 г.:
Завершенный:
Заменен qsort() на std::sort(), где это применимо во время обучения.
Удалены check_mistakes, getchar() и system().
Преобразовал Darknet для использования компилятора C++ (g++ в Linux, VisualStudio в Windows).
Исправлена сборка Windows.
Снова включены метки подсказок (код «алфавит»).
Повторно включен код CUDA/GPU, CUDNN и половина CUDNN.
Удалена жестко закодированная архитектура CUDA.
Улучшена информация о версии CUDA.
Снова включил AVX.
Удалены старые решения и Makefile.
OpenCV сделал необязательной зависимостью.
Удалена старая зависимость библиотеки pthread.
Удален СТБ.
Переписан CMakeLists.txt для улучшения обнаружения CUDA.
Удален старый код «алфавита» и связанные с ним изображения.
Реализована сборка из исходного кода.
Улучшен вывод номера версии.
Оптимизация производительности во время обучения (в процессе).
Оптимизация производительности во время вывода (в процессе).
Там, где это возможно, реализована передача по ссылке.
Очистил файлы .hpp.
Переписал darknet.h.
Устранено приведение cv::Mat к void и использовано как объект C++.
Исправлены несоответствия во внутренней структуре изображения.
Исправлена сборка для устройств Jetson на базе ARM (новые устройства Jetson Orin работают).
Исправлен API Python в версии V3.
Краткосрочные цели:
Замените printf() на std::cout (в процессе).
Вернитесь к старой поддержке камеры Zed.
Улучшение согласованности анализа командной строки (в процессе).
Среднесрочные цели:
Удалите весь код символов и замените его на std::string.
Устраните предупреждения компилятора и улучшите ясность кода (в процессе).
Расширьте использование cv::Mat вместо пользовательской структуры изображения в C (в разработке).
Замените старую функциональность списка на std::vector или std::list.
Добавьте поддержку одноканальных изображений в оттенках серого.
Расширить поддержку N-канальных изображений (N > 3, например, каналов глубины или тепловых каналов).
Текущая очистка кода (в процессе).
Долгосрочные цели:
Решите проблемы CUDA/CUDNN на всех графических процессорах.
Перепишите код CUDA+cuDNN.
Изучите поддержку графических процессоров сторонних производителей.
Реализуйте вращающиеся ограничивающие рамки или поддержку «угла».
Добавьте ключевые точки/скелетоны.
Внедрение тепловых карт (в разработке).
Изучите сегментацию.
Следите за обновлениями и вкладами в структуру Darknet/YOLO!