Реализация на C++ модели YOLOv5 для обнаружения курящих людей, работающая на Jetson Xavier NX и Jetson Nano. На Jetson Xavier NX достигается производительность в 33 кадра в секунду.
Для просмотра видео перейдите на BILIBILI или YOUTUBE.
Если вы хотите обучить свою собственную модель, обратитесь к yolov5-smoke-detection-python. Следуйте инструкциям в README для получения своей собственной модели.
Если у вас возникли проблемы при работе с этим проектом, прочтите эту CSDN статью.
Общее время выполнения от чтения изображения до завершения процесса (включает все этапы предобработки и постобработки каждого изображения). Все результаты можно получить на Jetson Xavier NX. Для моделей и кода на Python перейдите к этому yolov5-smoke-detection-python| Архитектура | До применения TensorRT | TensorRT (детекция) | FPS (детекция) | | :----------------: | :--------------------: | :------------------: | :-------------: | | Yolov5s-640-float16 | 100 мс | 60-70 мс | 14 - 18 | | Yolov5m-640-float16 | 120 мс | 70-75 мс | 13 - 14 | | Yolov5s-640-int8 | | 30-40 мс | 25 - 33 | | Yolov5m-640-int8 | | 50-60 мс | 16 - 20 |---
git clone https://github.com/RichardoMrMu/yolov5-smoking-detect
cd yolov5-smoking-detect
mkdir build
cmake ..
make
Если вы столкнулись с ошибками при использовании cmake и make, прочтите эту статью или обратитесь к разделу "Внимание".
Вы должны иметь две модели: одну для детекции (генерируется из tensorrtx), другую — для классификации.### Генерация модели yolov5
Для модели детекции yolov5 я выбрал yolov5s, и выбрал преобразование yolov5s.pt -> yolov5s.wts -> yolov5s.engine
.
Обратите внимание, что используемые модели можно получить с yolov5 и использовать этот yolov5-smoke-detection-python для получения вашей модели.
Вы также можете просмотреть официальную документацию tensorrtx.
Обратите внимание, здесь используется официально обученная модель. Я использую yolov5 версии 5.0. Поэтому если вы тренируете свою собственную модель, убедитесь, что ваш код yolov5 версии 5.0.
git clone -b v5.0 https://github.com/ultralytics/yolov5.git
cd yolov5
mkdir weights
cd weights
# скачайте https://github.com/ultralytics/yolov5/releases/download/v5.0/yolov5s.pt
wget https://github.com/ultralytics/yolov5/releases/download/v5.0/yolov5s.pt
git clone https://github.com/wang-xinyu/tensorrtx
cp tensorrtx/gen_wts.py yolov5/
cd yolov5
python3 gen_wts.py -w ./weights/yolov5s.pt -o ./weights/yolov5s.wts
# будет создан файл 'yolov5s.wts'
Вы можете получить файл yolov5s.wts в папке yolov5/weights/
.4. Создание tensorrtx/yolov5
и получение файла TensorRT engine
cd tensorrtx/yolov5
# Обновите CLASS_NUM до 2 в yololayer.h
# nc: 1 # Количество классов
# names: ['smoke'] # Названия классов
mkdir build
cd build
cp {ultralytics}/yolov5/yolov5s.wts {tensorrtx}/yolov5/build
cmake ..
make
# yolov5s
sudo ./yolov5 -s yolov5s.wts yolov5s.engine s
# Тест вашего файла engine
sudo ./yolov5 -d yolov5s.engine ../samples
Затем вы получите файл yolov5s.engine
, который можно поместить в проект My project
. Например:
cd {yolov5-smoking-detect}
mkdir resources
cp {tensorrtx}/yolov5/build/yolov5s.engine {yolov5-smoking-detect}/resources
Вы можете столкнуться с некоторыми проблемами при получении файла yolov5s.engine
, вы можете загрузить свои проблемы на GitHub или в статью csdn.
Скачайте .pt
с релиза YOLOv5 v5.0, выполните команды:
git clone -b v5.0 https://github.com/ultralytics/yolov5.git
git clone https://github.com/wang-xinyu/tensorrtx.git
Затем следуйте инструкциям на текущей странице.
Скачайте .pt
с релиза YOLOv5 v4.0, выполните команды:
git clone -b v4.0 https://github.com/ultralytics/yolov5.git
git clone -b yolov5-v4.0 https://github.com/wang-xinyu/tensorrtx.git
Затем следуйте инструкциям в tensorrtx/YOLOv5-v4.0.
Скачайте .pt
с релиза YOLOv5 v3.1, выполните команды:
git clone -b v3.1 https://github.com/ultralytics/yolov5.git
git clone -b yolov5-v3.1 https://github.com/wang-xinyu/tensorrtx.git
Затем следуйте инструкциям в tensorrtx/YOLOv5-v3.1.
Скачайте .pt
с релиза YOLOv5 v3.0, выполните команды:
git clone -b v3.0 https://github.com/ultralytics/yolov5.git
git clone -b yolov5-v3.0 https://github.com/wang-xinyu/tensorrtx.git
Затем следуйте инструкциям в tensorrtx/YOLOv5-v3.0.
Скачайте .pt
с релиза YOLOv5 v2.0, выполните команды:
git clone -b v2.0 https://github.com/ultralytics/yolov5.git
git clone -b yolov5-v2.0 https://github.com/wang-xinyu/tensorrtx.git
Затем следуйте инструкциям в tensorrtx/YOLOv5-v2.0.
Скачайте .pt
с релиза YOLOv5 v1.0.
Вы можете обучить свой собственный модель и передать её в TensorRT. Поэтому вы можете следовать указанным ниже шагам.
static constexpr int CLASS_NUM = 80; // 20 static constexpr int INPUT_H = 640; // 21 высота и ширина входных данных yolov5 должны делиться на 32 без остатка. static constexpr int INPUT_W = 640; // 22
static constexpr int CLASS_NUM = 2; // 20 static constexpr int INPUT_H = 416; // 21 высота и ширина входных данных yolov5 должны делиться на 32 без остатка. static constexpr int INPUT_W = 416; // 22
```shell
cd {tensorrtx}/yolov5/
# обновите CLASS_NUM в yololayer.h, если ваша модель была обучена на собственном наборе данных
Создайте сборку
Перейдите в сборку
Копируйте {ultralytics}/yolov5/yolov5s.wts {tensorrtx}/yolov5/сборка
Выполните cmake ..
Выполните make
sudo ./yolov5 -s [.wts] [.engine] [s/m/l/x/s6/m6/l6/x6 или c/c6 gd gw] // сериализация модели в плановый файл
sudo ./yolov5 -d [.engine] [папка с изображениями] // десериализация и выполнение инференса, изображения в [папка с изображениями] будут обработаны.
// Например yolov5s
sudo ./yolov5 -s yolov5s.wts yolov5s.engine s
sudo ./yolov5 -d yolov5s.engine ../образцы
// Например пользовательская модель с depth_multiple=0.17, width_multiple=0.25 в yolov5.yaml
sudo ./yolov5 -s yolov5_custom.wts yolov5.engine c 0.17 0.25
sudo ./yolov5 -d yolov5.engine ../образцы
```Таким образом, вы можете получить свой собственный модель TensorRT YOLOv5. Приятного использования!
## Квантификация INT8
У этого метода есть некоторые отличия от файла движка TensorRT с типом данных float16 и int8. Как и в [README tensorrtx](https://github.com/wang-xinyu/tensorrtx/tree/master/yolov5), файл движка Int8 требует калибровочных изображений.
```Для официальной модели YOLOv5 вам нужно скачать `coco_calid.zip` с этой [страницы Google Drive](https://drive.google.com/drive/folders/1s7jE9DtOngZMzJC1uL307J2MiaGwdRSI) или [BAIDUYUN](https://pan.baidu.com/s/1GOm_-JobpyLMAqZWCDUhKg) --- `a9wh`. И распаковать в папку `{project}/build/`.
Затем измените 10-ю строку в файле `yolov5.cpp` с `USE_FLOAT16` на `USE_INT8`, а затем выполните следующие команды:
```shell
cmake ..
make
// yolov5s
sudo ./yolov5 -s yolov5s.wts yolov5s-int8.engine s
// тестовый файл движка
sudo ./yolov5 -d yolov5s-int8.engine ../samples
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )