Каталог статей
1. Введение
- В последнее время использую YOLOv5 как апекс ассистента.Тренировочный код сейчас допилен.На полигоне можно использовать запрещенные манекены,но для движущихся целей всегда проблемы с потерей кадров и не догоном. Я измерил FPS и обнаружил, что FPS на моем RTX2060 составляет всего 3 к 5, что в принципе эквивалентно уровню PPT, Мое железо какое-то время не сможет быть обновлено, но я очень хочу закончить поддержку APEX. Так что приходится спасать страну методом кодового ускорения. Я узнал из интернета, что Tensorrt очень хорошо влияет на ускорение кода, так что давайте начнем его пробовать.
- Сначала поместите текущий вспомогательный эффект распознавания
- (Позвольте мне сказать вам, что после использования TensorRT для ускорения YOLOv5 FPS может достигать более 100, Удивительно~)
2. Официальный сайт
- скачать developer.nvidia.com/nvidia tensorrt
- NVIDIA TensorRT | Разработчик NVIDIA
- NVIDIA TensorRT | Разработчик NVIDIA
3. Установите зависимости
3.1 Установите OpenCV
- Войдите на страницу загрузки Releases - OpenCV , выберите соответствующую платформу и версию OpenCV.
3.1.1 Установка
Извлеките содержимое установочного пакета.Эта
установка ничем не отличается от установки обычного программного обеспечения.Просто нажмите на установочный пакет EXE и перейдите к следующему шагу для завершения.Выберите
место установки
Установка
После завершения установки в каталоге установки будут сгенерированы две папки build и source Файлы, которые нам понадобятся в дальнейшем, в основном помещаются в папку build
3.1.2 Добавьте переменные среды
Добавьте следующие переменные среды
D:\Program\OpenCV\build\x64\vc16\bin
D:\Program\OpenCV\build\x64\vc16\lib
D:\Program\OpenCV\build\include
D:\Program\OpenCV\build\include\opencv2
после перезагрузки компьютера
3.1.3. Просмотр версии
Введите следующий код opencv_version в командной строке, чтобы просмотреть версию OpenCV.
3.2. Установите TensorRT
3.2.1. Скачать
Сначала перейдите на официальный сайт Nvidia tensorRT, чтобы загрузить версию, подходящую для платформы Windows.
- скачать developer.nvidia.com/nvidia tensorrt
- Или установить по указанному выше адресу
- blog.csdn.net/sinat 28442665/статья/детали/119965847
- Ссылка: https://pan.baidu.com/s/1uNw9lC6EKnaJXRNuZFHs-Q
- Код извлечения: moli
Следует отметить, что если вы хотите загружать файлы сверху, вы должны подать заявку на соответствующую учетную запись разработчика.
3.2.2. Установка
Этот TensorRT, по сути, представляет собой набор библиотек lib и набор файлов .h.
копировать файлы
- Скопируйте все библиотеки из TensorRT/ lib в каталог cuda v11.1/lib/ x64 ,
- Скопируйте все файлы .h из каталога TensorRT/ include в cuda/v11.1/ include .
3.2.3 Добавьте переменные среды
Заполните путь TensorRT/lib в переменной среды path.
- Таким образом, даже если установка TensorRT завершена
4. Скачать проект
- Сначала загрузите исходный проект YOLOv5-6.0 и скомпилированный проект.
- github.com/ultralytics/yolov5.git
- GitHub — Monday-Leo/Yolov5_Tensorrt_Win10: простая реализация tensorrt yolov5 python/c++??
- Одновременно загрузите файл веса yolov5s.pt
5. Создайте модель WTS
- Скопируйте gen_wts.py со склада и загруженный файл веса yolov5s.pt в директорию yolov5 6.0
- Выполните следующую команду, чтобы преобразовать модель
- python gen_wts.py -w yolov5s.pt -o yolov5s.wts
- Параметр w — это путь к входной модели pt, а параметр -o — это путь к выходной модели wts.
- После завершения операции в текущем каталоге будет сгенерирована весовая модель yolov5s.wts.Эта модель является специальной моделью сериализации для последующего преобразования в tensorrt.
6. смейк
6.1. Генерация Makefile
-
Создайте новую папку сборки под текущим складом
-
Откройте Cmake, выберите каталог этого хранилища для исходного файла и выберите только что созданный каталог сборки для сборки.
-
Измените configure
, чтобы выбрать нужную версию Visual Studio, а также платформу компиляции, а затем нажмите «Готово».
-
Это будет сделано через некоторое время
6.1.1 Настройка CMakeLists.txt
6.1.1.1. Изменить путь зависимостей компиляции
Откройте CMakeLists.txt и измените каталоги OpenCV, TensorRT и dirent.h. Dirent.h входит в состав этого хранилища. Следует отметить, что эти пути должны использовать абсолютные пути и использовать \ для разделения пути.
6.1.1.2. Изменение вычислительной мощности
Конкретные значения см . в разделе
CUDA GPU | NVIDIA Developer
developer.nvidia.com/zh cn/cuda gpus#compute .
7. Скомпилируйте
7.1. Изменение исходного кода
- Используйте Visual Studio, чтобы открыть файл sln в папке сборки проекта,
найдите файл yololayer.h и измените его. - Измените эти параметры в файле на собственный номер категории модели, входной размер,
- Если вы используете официальные предварительно обученные веса, вам не нужно их изменять. Но если модель, обученная самостоятельно, не модифицируется, позже будет сообщено об ошибке.
static constexpr int CLASS_NUM = 80;
static constexpr int INPUT_H = 640; // yolov5's input height and width must be divisible by 32.
static constexpr int INPUT_W = 640;
7.2. Генерация исполняемого файла
- Измените отладку в верхней части интерфейса на Release, а затем нажмите Generate в строке меню - перегенерировать yolov5
успешно скомпилировать
Вы можете видеть, что соответствующий исполняемый файл был сгенерирован в папке сборки/релиза.
7.3. Генерация двигателя
- Скопируйте сгенерированную в начале модель yolov5s.wts в папку, где находится exe, и откройте ввод cmd в этой директории
yolov5 -s yolov5s.wts yolov5s.engine s
-
Здесь мы используем модель s и, наконец, вводим s. Точно так же, если это модель m, последний параметр необходимо изменить на m
-
На этом этапе программа преобразует wts в модель сериализации движка, что займет много времени. Не закрывайте страницу, потому что вы не можете ждать, иначе все предыдущие усилия будут потрачены впустую. Конкретное время связано с вашим Производительность процессора.В общем речь идет о Вам нужно подождать минут 30-40.Здесь долго ждать не надо.Вы можете сначала заняться другими делами,или посмотреть фильм
-
-
-
Моему компьютеру потребовалось более тридцати минут, чтобы скомпилировать
-
После создания движка в папке появится модель yolov5s.engine.
-
8. Рассуждение
8.1. Исполнение рассуждений
- Скопируйте папку с изображениями на складе в элемент папки EXE, попробуйте угадать, правильно ли это, введите
yolov5 -d yolov5s.engine ./pictures
- В нем две картинки, и время вывода каждой картинки всего 4 миллисекунды, что составляет 250 кадров в секунду, можно сказать, что эта скорость довольно быстрая.
- И эффект вывода тоже очень хороший
8.2 Обоснование Python для вызова dll
- После развёртывания модели как C++ только сейчас можно предугадывать картинки в папке, но это только ограничивается этим, нет возможности сделать это для вызова в программе, и когда мы делаем много задач по обработке изображений , мы фактически используем язык Python, поэтому нам следует дополнительно развернуть модель на Python.
Нажмите на свойства проекта -
-
После изменения расширения целевого файла и типа конфигурации с exe на dll
-
Затем перестройте проект
-
После завершения генерации в папке появится файл yolov5.dll
-
Задайте путь вызываемой вами dll и путь изображения, которое необходимо предсказать.Здесь следует отметить, что параметры
Detector
в классеmodel_path
должны передаваться в пути типа bytes,b''
а это значит, что строка преобразуется в тип байтов . Если вы не добавите b'', это вызовет TypeError: ожидаемые байты, обнаружена ошибка str.
det = Detector(model_path=b"./yolov5s.engine",dll_path="./yolov5.dll") # b'' is needed
img = cv2.imread("./pictures/zidane.jpg")
- Скопируйте python_trt.py из корневого каталога хранилища в папку, где находится dll-файл
- Запустите код, если об ошибке не сообщается, будут отображаться следующие результаты теста, просто наслаждайтесь!
8.3 Тестирование производительности
-
Наконец, давайте проверим производительность этого TensorRT.
-
Обнаружение одного изображения плюс время на чтение изображения, изображение занимает всего 0,015 с, что составляет 15 миллисекунд, скорость действительно высокая
-
Для обнаружения 100 изображений требуется всего 1,65 секунды.
-
Эта предыдущая скорость также включает время чтения данных. Если эту часть времени убрать, то скорость будет намного быстрее, и действительно можно детектировать картинку за 10 миллисекунд
-
Для 100 снимков требуется всего 0,58 с.Если он продолжит работать, FPS должен быть около 170. То есть на RTX2060Ti эта скорость действительно слишком высока, чтобы иметь друзей~~~
-
Я думаю, что в будущем мой помощник Apex сможет выполнять обнаружение в реальном времени.
9. Отчет об ошибках
-
Ошибка в процессе настройки, файлы проекта могут быть недействительными
-
Ошибка CMake в CMakeLists.txt:3 (проект):
-
Не удалось запустить команду MSBuild:
-
MSBuild.exe
-
-
Проверьте сообщение об ошибке ниже, чтобы определить, какой файл не может быть найден.
-
Добавьте переменные среды для MSBuild.exe
D:\Program\VisualStudio2022\MSBuild\Current\Bin\amd64
после перезагрузки компьютера
-
Установка оконного SDK
надежна -
Набор инструментов CUDA не найден.
описывать
Ошибка в процессе настройки, файлы проекта могут быть недействительными
CUDA_SDK_ROOT_DIR-NOTFOUND
-
Возможно, набор инструментов CUDA не был проверен, когда вы устанавливали cuda самостоятельно, просто переустановите его снова,
а затем перезагрузите компьютер. -
Если ошибка по-прежнему появляется, выполните следующие действия:
-
Вручную скопируйте четыре файла* из папки C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.1\extras\visual_studio_integration**MSBuildExtensions в папку D:\Program\VisualStudio2022\MSBuild\Microsoft\VC\v170* BuildCustomizations
. успешно примерно через 20 секунд
-
Были испробованы другие стратегии, но они не сработали.
Используйте более старую версию cmake. -
Проблема с компиляцией CUDA в Windows, ошибка Cmake: набор инструментов CUDA не найден – 2 Ответа
-
3.17.1
-
Это никак не связано с версией, если конфигурация правильная, cmake старшей версии также может нормально скомпилироваться.
-
-
Вручную укажите CUDA_SDK_ROOT_DIR
, чтобы удалить cuda, а затем переустановить его.Используйте
Ubuntu для этой компиляции.Используйте
Visual Studio для переустановки всех связанных файлов с помощью cmake. -
-
-
Не удалось продолжить выполнение кода, так как не удалось найти cudnn64_8.dll. Переустановка программы может решить эту проблему.
-
-
Эта ошибка должна быть неверным местом распаковки загруженного файла cudnn, просто переустановите его.
-
TensorRT был связан с cuBLAS/cuBLAS LT 11.3.0, но загружал cuBLAS/cuBLAS LT 11.2.1.
-
-
Это предупреждение, а не ошибка. В конечном итоге он может хорошо скомпилироваться, но это повлияет на точность.
-
Так что по чужим требованиям выбирайте соответствующую версию совершенно честно, cuda11.3, cuDNN 8.1.0
-
После изменения правильного cudnn на один отчет об ошибке меньше
-
После изменения cuda на 11.3 все ошибки исчезли,
и его можно скомпилировать через некоторое время.
-
Ленивая загрузка CUDA не включена. Его включение может значительно сократить использование памяти устройства. См.
CUDA_MODULE_LOADING
https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.htmlenv-vars . -
-
Просто перейдите на другую версию TensorRT.
-
FileNotFoundError: не удалось найти модуль «E:\Documents\Desktop\Yolov5_Tensorrt_Win10-master\build\Release\yolov5.dll» (или одну из его зависимостей). Попробуйте использовать полный путь с синтаксисом конструктора.
-
использовать абсолютный путь
не решил
-
Версия Python слишком высока, просто используйте более низкую версию Python3.7.Как
правило, версия ниже python3.7 не сообщает об ошибке, но python3.8 сообщает об ошибке.Причина ошибки в том, что python3.8 выполнил проверку безопасности.
Конкретный принцип Вы можете проверить этот блог iyn.me/i/post 40.html -
Python 3.8 изменяет правила загрузки динамически подключаемых библиотек (DLL) в Windows.
-
Новые правила повышают безопасность.По умолчанию зависимости DLL могут быть загружены только из надежных расположений , что в определенной степени позволяет избежать таких угроз безопасности , как перехват DLL .
-
К надежным местам относятся:
-
Путь, по которому находится библиотека DLL (укажите полный или частичный путь к библиотеке DLL при загрузке библиотеки DLL, и путь считается доверенным, если файл существует).
-
Пути добавляются с помощью add_dll_directory().
-
(надежное расположение системы)
-
OSError: [WinError -529697949] Ошибка Windows 0xe06d7363
-
из-за несовместимости версий
Необходимо убедиться, что версия Python, используемая в процессе компиляции, совпадает с версией Python, используемой в окончательных рассуждениях, иначе может возникнуть эта ошибка.
- После компиляции почему в папке сборки нет sln файла
- Потому что запускать только configure, но не запускать generate
generate sln file - Внимательно посмотрите на запущенный процесс, он должен быть выполнен с ошибкой
выполнения теста CMAKE_HAVE_LIBC_PTHREAD.
-
Visual Studio не создает DLL-файлы
-
-
Отсутствуют необходимые зависимые библиотеки или заголовочные файлы
-
Возможно, проблема с sln-файлом, созданным на предыдущем шаге.
-
OSError: исключение: чтение нарушения прав доступа 0x0000000000000000
-
-
Win10 TensorRT-**8.4.3.1 **+ CUDA 11.7 + cudnn8.6.0.163
несоответствие версий
- Может быть достаточно один раз регенерировать решение Это
очень метафизично, но это действительно так
.
10. Ссылки
Различные ресурсы, используемые в этом случае