1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/mumuU1156-yolov5-smoking-detect

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Детектор курения YOLOv5

Реализация на C++ модели YOLOv5 для обнаружения курящих людей, работающая на Jetson Xavier NX и Jetson Nano. На Jetson Xavier NX достигается производительность в 33 кадра в секунду.

Для просмотра видео перейдите на BILIBILI или YOUTUBE.

Если вы хотите обучить свою собственную модель, обратитесь к yolov5-smoke-detection-python. Следуйте инструкциям в README для получения своей собственной модели.

Требования

  1. Jetson Nano или Jetson Xavier NX
  2. JetPack 4.5.1
  3. Python3 с установленной библиотекой TensorRT 7.1.3.0 (Jetson Nano или Jetson Xavier NX имеют по умолчанию Python3 с TensorRT 7.1.3.0)
  4. TensorRT 7.1.3.0
  5. Torch 1.8.0
  6. TorchVision 0.9.0
  7. Torch2Trt 0.3.0
  8. ONNX 1.4.1
  9. OpenCV-Python 4.5.3.56
  10. Protobuf 3.17.3
  11. SciPy 1.5.4

Если у вас возникли проблемы при работе с этим проектом, прочтите эту CSDN статью.

Достижения и эксперименты

  • Int8.
  • yolov5-s
  • yolov5-m

В планах

  • Более быстрая версия, использующая меньше памяти.

Производительность

Общее время выполнения от чтения изображения до завершения процесса (включает все этапы предобработки и постобработки каждого изображения). Все результаты можно получить на 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.

  1. Получение репозитория yolov5

Обратите внимание, здесь используется официально обученная модель. Я использую 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
  1. Получение tensorrtx.
git clone https://github.com/wang-xinyu/tensorrtx
  1. Получение файла xxx.wts модели
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.

Различные версии yolov5На данный момент TensorRT поддерживает YOLOv5 версий 1.0 (только YOLOv5s), 2.0, 3.0, 3.1, 4.0 и 5.0.
Для YOLOv5 v5.0

Скачайте .pt с релиза YOLOv5 v5.0, выполните команды:

git clone -b v5.0 https://github.com/ultralytics/yolov5.git
git clone https://github.com/wang-xinyu/tensorrtx.git

Затем следуйте инструкциям на текущей странице.

Для YOLOv5 v4.0

Скачайте .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.

Для YOLOv5 v3.1

Скачайте .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.

Для YOLOv5 v3.0

Скачайте .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.

Для YOLOv5 v2.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.

Для YOLOv5 v1.0

Скачайте .pt с релиза YOLOv5 v1.0.

com/ultralytics/yolov5/releases/tag/v1.0), выполните команды `git clone -b v1.0 https://github.com/ultralytics/yolov5.git` и `git clone -b yolov5-v1.0 https://github.com/wang-xinyu/tensorrtx.git`, затем следуйте инструкциям в [tensorrtx/yolov5-v1.0](https://github.com/wang-xinyu/tensorrtx/tree/yolov5-v1.0/yolov5).
Конфигурация
  • Выберите модель s/m/l/x/s6/m6/l6/x6 с помощью аргументов командной строки.
  • Размер входных данных определён в yololayer.h
  • Количество классов определено в yololayer.h, НЕ ЗАБУДЬТЕ АДАПТИРОВАТЬ ЭТО, если используете свою собственную модель
  • INT8/FP16/FP32 можно выбрать макросами в yolov5.cpp, INT8 требует больше шагов, следуйте сначала разделу "Как запустить" и затем переходите к разделу "Квантизация INT8" ниже
  • ID видеокарты можно выбрать макросами в yolov5.cpp
  • Параметр NMS определён в yolov5.cpp
  • Параметр уверенности ограничивающей рамки (BBox confidence) определён в yolov5.cpp
  • Размер пакета определён в yolov5.cpp

Запуск вашего собственного модели

Вы можете обучить свой собственный модель и передать её в TensorRT. Поэтому вы можете следовать указанным ниже шагам.

  1. Обучение собственной модели Вы можете следовать официальной вики для обучения своей собственной модели на вашем наборе данных. Например, я выбрал yolov5-s для обучения моей модели.
  2. Передача собственной модели Подобно официальному руководству TensorRT. Когда вы последуете за "Генерацией модели yolov5", чтобы получить yolov5 и TensorRT репозиторий, следующим шагом будет передача вашей модели PyTorch в TensorRT. Перед этим вам потребуется изменить файл yololayer.h на линиях 20, 21 и 22 (CLASS_NUM, INPUT_H, INPUT_W) на свои собственные параметры.```shell

до изменения

static constexpr int CLASS_NUM = 80; // 20 static constexpr int INPUT_H = 640; // 21 высота и ширина входных данных yolov5 должны делиться на 32 без остатка. static constexpr int INPUT_W = 640; // 22

после изменения

если ваша модель имеет два класса и размер изображения равен 416×416

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 )

Вы можете оставить комментарий после Вход в систему

Введение

Реализация Yolov5 на C++ для обнаружения курения людей, работающая на Jetson Xavier nx и Jetson nano. Развернуть Свернуть
C++ и 3 других языков
MIT
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/mumuU1156-yolov5-smoking-detect.git
git@api.gitlife.ru:oschina-mirror/mumuU1156-yolov5-smoking-detect.git
oschina-mirror
mumuU1156-yolov5-smoking-detect
mumuU1156-yolov5-smoking-detect
main