Платформа обнаружения объектов Darknet и YOLO
Darknet — это платформа нейронных сетей с открытым исходным кодом, написанная на C, C++ и CUDA.
YOLO (You Only Look Once) — это современная система обнаружения объектов в режиме реального времени, работающая в рамках Darknet.
Узнайте, как Hank.ai помогает сообществу Darknet/YOLO
Анонсируем Darknet V3 «Джаз»
Посетите веб-сайт Darknet/YOLO.
Пожалуйста, прочтите FAQ по Darknet/YOLO.
Присоединяйтесь к дискорд-серверу Darknet/YOLO
Статьи
1. Бумага YOLOv7
2. Бумага Scaled-YOLOv4
3. Бумага YOLOv4
4. Бумага YOLOV3
Общая информация
Платформа Darknet/YOLO по-прежнему работает быстрее и точнее, чем другие платформы и версии YOLO.
Эта платформа полностью бесплатна и имеет открытый исходный код. Вы можете включить Darknet/YOLO в существующие проекты и продукты, в том числе коммерческие, без лицензии и оплаты.
Darknet V3 («Джаз»), выпущенный в октябре 2024 года, может точно воспроизводить видео набора данных LEGO со скоростью до 1000 кадров в секунду при использовании графического процессора NVIDIA RTX 3090, что означает, что каждый видеокадр считывается, изменяется размер и обрабатывается Darknet/YOLO за 1 миллисекунду или меньше.
Присоединяйтесь к серверу Discord Darknet/YOLO, если вам нужна помощь или вы хотите обсудить 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++.
3. Улучшен файлchart.png во время тренировки.
4. Исправления ошибок и оптимизация, связанная с производительностью, в основном связанная с сокращением времени, необходимого для обучения сети.
Последняя ветвь этой кодовой базы — версия 2.1 в ветке v2.
Следующий этап разработки начался в середине 2024 года и был выпущен в октябре 2024 года. Команда версии теперь возвращает 3.x «JAZZ».
Вы всегда можете проверить предыдущую ветку v2, если вам нужно запустить одну из этих команд. Сообщите нам, чтобы мы могли изучить вопрос о добавлении недостающих команд.
Ключевые изменения в этой версии включают в себя:
1. Удалены многие старые и неподдерживаемые команды.
2. Множество оптимизаций производительности, как при обучении, так и при выводе.
3. Изменен устаревший API C; приложения, использующие исходный API Darknet, потребуют незначительных изменений: https://darknetcv.ai/api/api.html.
4. Новый API Darknet V3 C и C++: https://darknetcv.ai/api/api.html.
5. Новые приложения и примеры кода в src-примерах: https://darknetcv.ai/api/files.html.
MSCOCO Предварительно обученные веса
Несколько популярных версий YOLO для удобства были предварительно обучены на наборе данных MSCOCO. Этот набор данных содержит 80 классов, которые можно увидеть в текстовом файле cfg/coco.names.
Для тестирования Darknet/YOLO доступно несколько других, более простых наборов данных и предварительно обученных весов, например LEGO Gears и Rolodex. Подробности смотрите в FAQ по Darknet/YOLO.
Предварительно обученные веса MSCOCO можно загрузить из нескольких разных мест, а также из этого репозитория:
1. YOLov2, ноябрь 2016 г.
- YOLOv2-крошечный
- YOLOv2-полный
2. YOLov3, май 2018 г.
- YOLOv3-крошечный
- YOLOv3-полный
3. YOLov4, май 2020 г.
- YOLOv4-крошечный
- YOLOv4-полный
4. YOLov7, август 2022 г.
- YOLOv7-крошечный
- YOLOv7-полный
Предварительно обученные веса 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 для создания необходимых файлов проекта.
Вам не нужно знать C++ для сборки, установки и запуска Darknet/YOLO, точно так же, как вам не нужно быть механиком, чтобы водить машину.
Будьте осторожны, если вы следуете старым руководствам с более сложными шагами сборки или шагами сборки, которые не соответствуют тому, что указано в этом файле ознакомительных сведений. Новые этапы сборки, описанные ниже, начались в августе 2023 года.
Разработчикам программного обеспечения рекомендуется посетить https://darknetcv.ai/, чтобы получить информацию о внутреннем устройстве системы обнаружения объектов Darknet/YOLO.
Гугл Колаб
Инструкции Google Colab такие же, как инструкции Linux. Доступно несколько блокнотов Jupyter, показывающих, как выполнять определенные задачи, например обучение новой сети.
Посмотрите блокноты в подкаталоге colab и/или следуйте инструкциям Linux ниже.
Метод CMake в Linux
1. Установите необходимые пакеты:
`бить
sudo apt-get install build-essential git libopencv-dev cmake
`
2. Клонируйте репозиторий Darknet:
`бить
mkdir ~/srccd ~/src
git клон https://github.com/hank-ai/darknetcd даркнет
`
3. Создайте каталог сборки и запустите CMake:
`бить
сборка mkdir buildcd
cmake -DCMAKEBUILDTYPE=Выпустить ..
`
4. Создайте даркнет:
`бить
сделать -j4
`
5. Упакуйте и установите Darknet:
`бить
упаковка
sudo dpkg -i darknet-ВЕРСИЯ.deb
`
6. Проверьте установку:
`бить
даркнет-версия
`
Метод Windows CMake
1. Установите необходимые пакеты:
`бить
winget install Git.Git winget install Kitware.CMake winget install nsis.nsis winget install Microsoft.VisualStudio.2022.Community
`
2. Измените установку Visual Studio:
- Нажмите меню «Пуск» Windows и запустите «Установщик Visual Studio».
- Нажмите «Изменить».
- Выберите «Разработка настольных компьютеров с помощью C++».
- Нажмите «Изменить» в правом нижнем углу, а затем нажмите «Да».
3. Откройте командную строку разработчика для VS 2022:
- Нажмите меню «Пуск» Windows и выберите «Командная строка разработчика для VS 2022». Не используйте PowerShell для этих действий.
4. Установите Microsoft VCPKG:
`бить
cd c:mkdir c:srccd c:src git clone https://github.com/microsoft/vcpkgcd vcpkg
bootstrap-vcpkg.bat
.vcpkg.exe интегрировать
установить .vcpkg.exe интегрировать powershell.vcpkg.exe установить opencv[contrib,dnn,freetype,jpeg,openmp,png,webp,world]:x64-windows
`
5. Клонировать репозиторий Darknet:
`бить
компакт-диск c: источник
git клон https://github.com/hank-ai/darknet.gitcd даркнет
`
6. Создайте каталог сборки и запустите CMake:
`бить
сборка mkdir buildcd
cmake -DCMAKEBUILDTYPE=Выпуск -DCMAKETOOLCHAINFILE=C:/src/vcpkg/scripts/buildsystems/vcpkg.cmake ..
`
7. Создайте даркнет:
`бить
msbuild.exe /property:Platform=x64;Configuration=Release /target:Build -maxCpuCount -verbosity:normal -detailedSummary darknet.sln
`
8. Сгенерируйте установочный пакет NSIS:
`бить
msbuild.exe /property:Platform=x64;Configuration=Release PACKAGE.vcxproj
`
9. Запустите мастер установки NSIS:
- Откройте файл darknet-VERSION.exe в каталоге сборки. Например: darknet-2.0.31-win64.exe.
10. Проверьте установку:
`бить
C: Версия Program FilesDarknetbindarknet.exe
`
Использование даркнета
интерфейс командной строки
Ниже приведен не полный список всех команд, поддерживаемых Darknet.
В дополнение к интерфейсу командной строки Darknet также обратите внимание на интерфейс командной строки проекта DarkHelp, который предоставляет альтернативный интерфейс командной строки Darknet/YOLO. Интерфейс командной строки DarkHelp также имеет несколько расширенных функций, которые недоступны непосредственно в Darknet. Вы можете использовать интерфейс командной строки Darknet и интерфейс командной строки DarkHelp вместе, они не являются взаимоисключающими.
Для большинства команд, показанных ниже, вам понадобится файл .weights с соответствующими файлами .names и .cfg. Вы можете либо обучить свою собственную сеть (настоятельно рекомендуется!), либо загрузить нейронную сеть, которую кто-то уже обучил и бесплатно разместил в Интернете. Примеры предварительно обученных наборов данных включают в себя:
1. LEGO Gears (поиск объектов по изображению)
2. Ролодекс (поиск текста на изображении)
3. 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 ...
`
Выход:
`
Идентификатор Имя AvgPrecision TP FN FP TN Точность ErrorRate Специфичность повторного вызова FalsePosRate
-- ---- ------------ ------ ------ ------ ------ -------- --------- --------- ------ ----------- ------------
0 автомобиль 91,2495 32648 3903 5826 65129 0,9095 0,0905 0,8486 0,8932 0,9179 0,0821
1 мотоцикл 80,4499 2936 513 569 5393 0,8850 0,1150 0,8377 0,8513 0,9046 0,0954
2 велосипеда 89,0912 570 124 104 3548 0,9475 0,0525 0,8457 0,8213 0,9715 0,0285
3 человека 76,7937 7072 1727 2574 27523 0,8894 0,1106 0,7332 0,8037 0,9145 0,0855
4 много машин 64,3089 1068 509 733 11288 0,9087 0,0913 0,5930 0,6772 0,9390 0,0610
5 зеленый свет 86,8118 1969 239 510 4116 0,8904 0,1096 0,7943 0,8918 0,8898 0,1102
6 желтый свет 82,0390 126 38 30 1239 0,9525 0,0475 0,8077 0,7683 0,9764 0,0236
7 красный свет 94,1033 3449 217 451 4643 0,9237 0,0763 0,8844 0,9408 0,9115 0,0885
`
11. Для проверки точности mAP@IoU=75:
`бить
Карта детектора даркнета животные.данные животные.cfg животныеbest.weights -iouthresh 0.75
`
12. Пересчет якорей:
- Лучше всего делать в DarkMark.
- В Даркнете используйте:
`бить
детектор даркнета кальканчоры животные.данные -numof_clusters 6 -ширина 320 -высота 256
`
13. Обучите новую сеть:
`бить
компакт-диск ~/nn/животные/
Детектор даркнета -map -dont_show train животные.данные животные.cfg
`
Обучение
Быстрые ссылки на соответствующие разделы FAQ по Darknet/YOLO:
1. Как мне настроить файлы и каталоги?
2. Какой файл конфигурации мне следует использовать?
3. Какую команду мне следует использовать при обучении собственной сети?
Самый простой способ аннотировать и обучать — использовать DarkMark для создания всех необходимых файлов Darknet. Это определенно рекомендуемый способ обучения новой нейронной сети.
Если вы предпочитаете вручную настраивать различные файлы для обучения пользовательской сети:
1. Создайте новую папку для вашего проекта:
- В этом примере будет создана нейронная сеть для обнаружения животных, поэтому будет создан следующий каталог: ~/nn/animals/.
2. Скопируйте файл конфигурации Darknet в качестве шаблона:
- Например, скопируйте cfg/yolov4-tiny.cfg в папку проекта. Теперь у вас будет файл ~/nn/animals/animals.cfg.
3. Создайте текстовый файл Animal.names:
- Этот файл будет содержать список классов, которые вы хотите обнаружить, по одному в строке. Например:
`
собака
кот
птица
лошадь
`
4. Создайте текстовый файл Animals.data:
— В этом файле указаны пути к данным обучения и проверки, а также имена и каталоги резервных копий. Например:
`
классы=4
train=/home/username/nn/animals/animals_train.txt
valid=/home/username/nn/animals/animals_valid.txt
имена=/home/имя_пользователя/nn/animals/animals.names
резервная копия =/home/имя пользователя/nn/животные
`
5. Создайте папку для своих изображений и аннотаций:
— Например, это может быть ~/nn/animals/dataset. Для каждого изображения потребуется соответствующий файл .txt, описывающий аннотации к этому изображению. Формат файлов аннотаций .txt очень специфичен. Вы не можете создать эти файлы вручную, поскольку каждая аннотация должна содержать точные координаты аннотации. См. DarkMark или другое подобное программное обеспечение для аннотирования ваших изображений. Формат аннотации YOLO описан в FAQ по Darknet/YOLO.
6. Создайте «поезд» и «валидные» текстовые файлы:
- В этих двух текстовых файлах необходимо индивидуально перечислить все изображения, которые Даркнет должен использовать для обучения и проверки при расчете mAP%. Ровно одно изображение в строке. Путь и имена файлов могут быть относительными или абсолютными.
7. Измените файл .cfg:
- партия: установлено на 64.
- подразделения: начните с 1. См. FAQ по Darknet/YOLO, если вам нужно настроить это в зависимости от доступности памяти.
- maxbatches: хорошее начальное значение — 2000 Numberof_classes. В этом примере у нас 4 животных, поэтому 4 2000 = 8000.
- шаги: установите 80% и 90% от максимального количества пакетов. В этом примере мы бы использовали шаги = 6400,7200, поскольку для параметра maxbatches установлено значение 8000.
- ширина и высота: это размеры сети. Часто задаваемые вопросы Darknet/YOLO объясняют, как рассчитать лучший размер для использования.
- классы: измените эту строку, указав количество классов в вашем файле .names. В этом примере мы бы использовали классы = 4.
- фильтры: в разделе [convolutional] перед каждым разделом [yolo] измените filter=... со значением (numberofclasses + 5) * 3. В этом примере мы бы использовали filter=27.
8. Начать обучение:
`бить
компакт-диск ~/nn/животные/
Детектор даркнета -map -dont_show train животные.данные животные.cfg
`
Потерпи. Лучшие веса будут сохранены как животные_best.weights. За ходом обучения можно наблюдать, просмотрев файлchart.png. Дополнительные параметры, которые вы можете использовать при обучении новой сети, см. в FAQ по Darknet/YOLO.
Если вы хотите видеть более подробную информацию во время обучения, добавьте параметр --verbose. Например:
`бить
детектор даркнета -map -dont_show --verbose train животные.данные животные.cfg
`
Другие инструменты и ссылки
1. DarkMark: для управления проектами Darknet/YOLO, аннотирования изображений, проверки ваших аннотаций и создания необходимых файлов для обучения с Darknet.
2. DarkHelp: надежная альтернатива CLI Darknet для использования мозаики изображений, отслеживания объектов в ваших видеороликах или надежного C++ API, который можно легко использовать в коммерческих приложениях.
3. Часто задаваемые вопросы по Darknet/YOLO: чтобы помочь ответить на ваши вопросы.
4. Канал Стефана на YouTube: обучающие видео и примеры.
5. Сервер разногласий Darknet/YOLO: чтобы общаться с другими пользователями Darknet/YOLO и обращаться за поддержкой.
Дорожная карта
Последнее обновление 30 октября 2024 г.:
Завершенный
1. Замените qsort() на std::sort(), если он используется во время обучения.
2. Избавьтесь от check_mistakes, getchar() и system().
3. Преобразуйте Darknet для использования компилятора C++.
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. Удалить STB.
18. Перепишите CMakeLists.txt, чтобы использовать новое обнаружение CUDA.
19. Удалите старый «алфавитный» код и удалите более 700 изображений в данных/метках.
20. Сборка вне исходного кода.
21. Улучшен вывод номера версии.
22. Оптимизация производительности, связанная с обучением (текущая задача).
23. Оптимизация производительности, связанная с выводом (текущая задача).
24. По возможности передавайте ссылку.
25. Очистите файлы .hpp.
26. Переписать darknet.h.
27. Не приводите cv::Mat к void*, а используйте его как правильный объект C++.
28. Исправьте или будьте последовательны в использовании внутренней структуры изображения.
29. Исправление сборки для устройств Jetson на базе ARM.
30. Новые устройства Jetson Orin работают.
31. Исправьте API Python в версии 3.
Краткосрочные цели
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. Сегментация.