Платформа обнаружения объектов Darknet и YOLO
Darknet — это платформа нейронных сетей с открытым исходным кодом, написанная в основном на C и C++, с некоторым кодом CUDA для ускорения графического процессора. Он известен своей скоростью и эффективностью, что делает его популярным выбором для приложений обнаружения объектов в реальном времени.
YOLO (You Only Look Once) — это мощная система обнаружения объектов в реальном времени, разработанная для работы в рамках Darknet. Он превосходит другие системы обнаружения объектов по скорости и точности, постоянно превосходя другие системы обнаружения объектов в тестах.
Погрузитесь глубже в мир Darknet/YOLO:
Вклад Hank.ai: узнайте, как Hank.ai активно поддерживает сообщество Darknet/YOLO.
Официальный сайт: посетите официальный сайт Darknet/YOLO для получения подробной информации.
Часто задаваемые вопросы: найдите ответы на распространенные вопросы о Darknet/YOLO.
Сервер Discord: присоединяйтесь к оживленному сообществу Darknet/YOLO Discord для обсуждений и помощи.
Статьи
Эволюция YOLO документирована в нескольких исследовательских работах:
1. YOLOv7: расширяя границы глубокого обучения для обнаружения объектов
2. Scaled-YOLOv4: масштабирование YOLOv4 для промышленных приложений.
3. YOLOv4: оптимальная скорость и точность обнаружения объектов
4. YOLOv3: постепенное улучшение
Общая информация
Платформа Darknet/YOLO продолжает оставаться на переднем крае обнаружения объектов, обеспечивая как скорость, так и точность. Эта платформа полностью бесплатна и имеет открытый исходный код, что позволяет разработчикам легко включать ее в свои проекты без каких-либо ограничений по лицензированию или оплате.
Darknet V3 под кодовым названием «Jazz», выпущенный в октябре 2024 года, обеспечивает выдающуюся производительность благодаря графическому процессору NVIDIA RTX 3090. Он может обрабатывать видео набора данных LEGO со скоростью до 1000 кадров в секунду, то есть каждый кадр анализируется всего за 1 миллисекунду или меньше.
Оставайтесь на связи:
Discord: присоединяйтесь к серверу Discord Darknet/YOLO для поддержки и обсуждений: https://discord.gg/zSq8rtW.
Darknet/YOLO адаптируется и работает на различных платформах: от Raspberry Pi и облачных серверов до настольных компьютеров и высокопроизводительных систем обучения. Хотя версия CPU работает на широком спектре устройств, для версии GPU требуется графический процессор NVIDIA с поддержкой CUDA.
Даркнет-версия
Структура Darknet значительно изменилась с момента ее создания и имеет несколько ключевых версий:
1. Версия 0.x. В этой исходной версии, разработанной Джозефом Редмоном в период с 2013 по 2017 год, не было определенного номера версии.
2. Версия 1.x: Поддерживалась Алексеем Бочковским с 2017 по 2021 год. Эта версия также не имела номера версии.
3. Версия 2.x «OAK»: спонсируется Hank.ai и поддерживается Стефаном Шареттом, начиная с 2023 года. Это первая версия с командой версии. Эта версия действовала до конца 2024 года.
4. Версия 3.x «JAZZ». Последняя версия, выпущенная в октябре 2024 г., содержит значительные улучшения и новый API.
Создание даркнета
Для сборки Darknet требуется компилятор C++17 или новее, OpenCV и система сборки CMake. Хотя этот процесс может показаться сложным, вам не нужно быть экспертом по C++ для сборки, установки и запуска Darknet/YOLO.
Варианты постройки:
1. Google Colab. Инструкции Google Colab идентичны инструкциям Linux.
2. Метод Linux CMake. Этот метод предоставляет подробное руководство для пользователей Linux.
3. Метод Windows CMake: следуйте этим инструкциям для сборки Darknet в Windows.
Примечание. Если вы используете старые руководства, этапы их сборки могут отличаться от нового унифицированного подхода, описанного ниже.
Разработчики программного обеспечения: посетите https://darknetcv.ai/, чтобы получить представление о внутренней работе системы обнаружения объектов Darknet/YOLO.
Гугл Колаб
Инструкции Google Colab точно отражают метод Linux CMake. В подкаталоге colab есть несколько блокнотов Jupyter, которые демонстрируют конкретные задачи, такие как обучение новой сети.
Метод 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 -DCMAKEBUILDTYPE=Выпустить ..
`
5. Сборка Darknet. Создайте исполняемые файлы Darknet:
`бить
сделать -j4
`
6. Пакет для установки. Создайте пакет DEB для простой установки (необязательно):
`бить
сделать пакет
sudo dpkg -i darknet-ВЕРСИЯ.deb
`
7. CUDA/cuDNN (необязательно). Для ускорения графического процессора установите CUDA или CUDA+cuDNN:
* CUDA: https://developer.nvidia.com/cuda-downloads.
* cuDNN: https://developer.nvidia.com/rdp/cudnn-download
8. Проверка установки. После установки проверьте версию Darknet:
`бить
даркнет-версия
`
Метод Windows CMake
Эти инструкции предназначены для сборки Darknet на чистой установке Windows 11 22H2.
1. Установите необходимые условия:
`бить
winget install Git.Git winget install Kitware.CMake winget install nsis.nsis winget install Microsoft.VisualStudio.2022.Community
`
2. Поддержка Visual Studio C++:
* Откройте установщик Visual Studio и выберите «Изменить».
* Включите разработку настольных компьютеров с помощью C++ и нажмите «Изменить».
3. Командная строка разработчика для VS 2022: откройте командную строку разработчика для VS 2022.
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/cuDNN (необязательно): для ускорения графического процессора установите CUDA или CUDA+cuDNN:
* CUDA: https://developer.nvidia.com/cuda-downloads.
* cuDNN: https://developer.nvidia.com/rdp/cudnn-download
6. Клон Даркнета:
`бить
компакт-диск c: источник
клон git https://github.com/hank-ai/darknet.git
компакт-диск даркнет
сборка mkdir
сборка компакт-диска
`
7. Настройте с помощью CMake:
`бить
cmake -DCMAKEBUILDTYPE=Выпуск -DCMAKETOOLCHAINFILE=C:/src/vcpkg/scripts/buildsystems/vcpkg.cmake ..
`
8. Создайте даркнет с помощью 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
`
9. Проверьте установку: запустите исполняемый файл Darknet и проверьте версию:
`бить
Версия C:srcdarknetbuildsrc-cliReleasedarknet.exe
`
10. Установите пакет NSIS. Запустите файл darknet-VERSION.exe в каталоге сборки, чтобы установить Darknet, библиотеки, включаемые файлы и библиотеки DLL.
Использование даркнета
Darknet предлагает интерфейс командной строки (CLI) для взаимодействия с платформой.
Примечание. В дополнение к интерфейсу командной строки Darknet проект DarkHelp предоставляет альтернативный интерфейс командной строки с расширенными функциями. Вы можете использовать оба интерфейса Darknet CLI и DarkHelp CLI вместе.
Общие команды CLI Darknet:
Справка: список доступных команд:
`бить
помощь в даркнете
`
Версия: Проверьте версию Darknet:
`бить
даркнет-версия
`
Прогнозирование (изображение): выполните обнаружение объекта на изображении:
`бить
# Версия 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
`
Выходные координаты (изображение): Получить координаты объекта:
`бить
# Версия 2
Тест детектора даркнета животные.данные животные.cfg животныеbest.weights -extoutput собака.jpg
# Версия 3
darknet01inference_images животные собака.jpg
# ТемнаяПомощь
DarkHelp --json животные.cfg животные.названия животных_лучшие.веса собаки.jpg
`
Обработка видео:
`бить
# Версия 2
# Запустить видеофайл
Демонстрация детектора даркнета животные.данные животные.cfg животныеbest.weights -extoutput test.mp4
# Запуск по веб-камере
Демонстрация детектора даркнета животные.данные животные.cfg животные_лучшие.веса -c 0
# Версия 3
# Запустить видеофайл
darknet03display_videos животные.cfg test.mp4
# Запуск по веб-камере
darknet08display_webcam животные
# ТемнаяПомощь
# Запустить видеофайл
DarkHelp животные.cfg животные.имена животных_лучшие.веса test.mp4
`
Сохранить результаты в видео:
`бить
# Версия 2
Демонстрация детектора даркнета животные.данные животные.cfg животныеbest.weights test.mp4 -outfilename res.avi
# Версия 3
darknet05processvideosmultithreaded животные.cfg животные.имена животных_лучшие.тест веса.mp4
# ТемнаяПомощь
DarkHelp животные.cfg животные.имена животных_лучшие.веса test.mp4
`
Вывод JSON:
`бить
# Версия 2
Демонстрация детектора даркнета животные.данные животные.cfg животныеbest.weights test50.mp4 -jsonport 8070 -mjpegport 8090 -extoutput
# Версия 3
darknet06imagestojson животные image1.jpg
# ТемнаяПомощь
DarkHelp --json животные.названия животных.cfg животные_лучшие.веса image1.jpg
`
Конкретный графический процессор: запуск на назначенном графическом процессоре:
`бить
# Версия 2
Демонстрация детектора даркнета животные.данные животные.cfg животные_лучшие.веса -i 1 test.mp4
`
Проверка точности: оцените точность сети:
`бить
Карта детектора даркнета вождение.данные вождение.cfg вождение_best.weights
`
Рассчитать якоря:
`бить
детектор даркнета кальканчоры животные.данные -numof_clusters 6 -ширина 320 -высота 256
`
Обучение новой сети
DarkMark: для интуитивно понятного и упрощенного подхода к аннотированию и обучению используйте DarkMark.
Ручная настройка:
1. Создать каталог: создайте папку для своих тренировочных данных.
2. Копирование конфигурации: выберите файл конфигурации в качестве шаблона, например, cfg/yolov4-tiny.cfg, и скопируйте его в свой каталог.
3. Создайте файл .names: создайте текстовый файл (например, Animals.names), в котором будут перечислены ваши классы, по одному в каждой строке.
4. Создайте файл .data: создайте текстовый файл (например, животные.данные) со следующей структурой:
`
занятия = 4
поезд = /путь/к/animals_train.txt
действительный = /путь/к/animals_valid.txt
имена = /путь/к/животным.имена
резервная копия = /путь/к/каталог_резервной копии
`
5. Подготовьте набор данных: упорядочите изображения и соответствующие файлы аннотаций в каталоге.
6. Создайте обучающие/действительные текстовые файлы. Создайте два текстовых файла (animalstrain.txt, Animalsvalid.txt) со списком путей к изображениям для обучения и проверки.
7. Измените конфигурацию:
* Установите пакет = 64.
* Отрегулируйте подразделения в зависимости от памяти вашего графического процессора.
Установите для max_batches подходящее значение (например, 2000 классов).
* Установите шаги на 80% и 90% от max_batches.
* Отрегулируйте ширину и высоту в соответствии с размерами вашей сети.
* Обновление классов в соответствии с количеством классов.
* Измените фильтры в разделах [convolutional] перед разделами [yolo].
8. Начните обучение:
`бить
компакт-диск /путь/к/животным
Детектор даркнета -map -dont_show train животные.данные животные.cfg
`
9. Просмотр прогресса. Отслеживайте ход тренировки с помощью файлаchart.png.
Другие инструменты и ссылки
DarkMark: этот инструмент упрощает аннотацию изображений, проверку и создание файлов для обучения с помощью Darknet.
DarkHelp: надежный альтернативный интерфейс командной строки для Darknet с такими функциями, как мозаика изображений и отслеживание объектов.
Часто задаваемые вопросы по Darknet/YOLO: найдите ответы на часто задаваемые вопросы.
Канал Стефана на YouTube: доступ к руководствам и примерам видео.
Сервер Discord Darknet/YOLO: присоединяйтесь к сообществу для поддержки и обсуждений.
Дорожная карта
Завершенный:
Для повышения эффективности заменен qsort() на std::sort().
Удален устаревший код (например, check_mistakes, getchar(), system()).
Даркнет перенесен на компилятор C++.
Исправлены проблемы со сборкой Windows.
Восстановлена поддержка Python.
Создал библиотеку даркнета.
Повторно включен код CUDA/GPU, CUDNN и половина CUDNN.
Улучшена информация о версии CUDA.
Повторно включен набор инструкций AVX.
Удалены старые решения и Makefile.
OpenCV сделал обязательной зависимостью.
Удалены устаревшие зависимости библиотеки (например, pthread, STB).
Переписан CMakeLists.txt для улучшения обнаружения CUDA.
Включены сборки из исходного кода.
Улучшен вывод номера версии.
Реализована оптимизация производительности для обучения и вывода.
Почистил код для лучшей читаемости.
Переписан darknet.h для улучшенного API.
Улучшена поддержка устройств Jetson на базе ARM.
Исправлен API Python в версии V3.
Краткосрочные цели:
Замените printf() на std::cout.
Изучите поддержку камеры Zed.
Улучшить анализ командной строки.
Среднесрочные цели:
Замените весь код символов на std::string.
Адресные предупреждения компилятора.
Расширьте использование cv::Mat вместо пользовательских структур изображений.
Обновите функциональность списка до std::vector или std::list.
Поддержка 1-канальных изображений в оттенках серого.
Добавить поддержку N-канальных изображений (N > 3).
Текущая очистка кода.
Долгосрочные цели:
Устраните проблемы CUDA/CUDNN на разных графических процессорах.
Перепишите код CUDA+cuDNN для повышения эффективности.
Изучите поддержку графических процессоров сторонних производителей.
Реализуйте вращающиеся ограничивающие рамки и поддержку «угла».
Добавляйте ключевые точки, скелеты и тепловые карты.
Внедрить возможности сегментации.