[Обоснование модели] Руководство по развертыванию Deepstream6.0 yolov3 и yolov4

искусственный интеллект
[Обоснование модели] Руководство по развертыванию Deepstream6.0 yolov3 и yolov4

欢迎关注我的公众号 [极智视界],回复001获取Google编程规范

O_o>_<  o_OO_o~_~o_O

  Всем привет, я Jizhi Vision В этой статье рассказывается о методе развертывания yolov3 и yolov4 с использованием deepstream6.0.

  Серия Yolo является широко используемым алгоритмом обнаружения целей в технике, особенно начиная с yolov3 и постепенно развиваясь до yolov4, yolov5 и т. д., принятие проекта становится все выше и выше. А deepstream — это конвейерное приложение, предложенное NVIDIA для ускорения реализации глубокого обучения, поэтому, когда deepstream столкнется с yolo, какие искры будут создаваться, посмотрим.

  Учебное пособие по установке Deepstream вы можете найти в статьях, которые я написал ранее: 《[Обмен опытом] Установка Ubuntu Deepstream6.0", "[Обмен опытом] Установка Ubuntu Deepstream5.1".

  Давайте посмотрим на структуру каталогов исходного кода deepstream6.0:

  • apps
    • apps-common
    • audio_apps
    • sample_apps: подпрограммы, такие как deepstream-app, deepstream-test1...
  • gst-plugins: плагин gstreamer
  • include:голова
  • libs: библиотека
  • objectDetector_FasterRCNN: Пример FasterRCNN
  • objectDetector_SSD: Пример SSD
  • objectDetector_Yolo: YOLO пример
  • tools: журнал связан

1. Deepstream6.0 развертывает yolov3

  Запустите yolov3 через указанный выше проект objectDetector_Yolo и сосредоточьтесь на следующих модулях в проекте objectDetector_Yolo:

  • nvdsinfer_custom_impl_Yolo: код реализации проекта yolov3;
    • nvdsinfer_yolo_engine.cpp: модель синтаксического анализа, генерирующий движок
    • nvdsparsebbox_Yolo.cpp: функция анализа выходного слоя, анализ поля обнаружения цели
    • trt_utils.cpp и trt_utils.h: интерфейсы и реализации классов инструментов для построения сетей TensorRT.
    • yolo.cpp и yolo.h: создание интерфейса и реализация движка yolo
    • yoloPlugins.cpp и yoloPlugins.h: интерфейсы и реализации YoloLayerV3 и YoloLayerV3PluginCreator
    • kernels.cu: базовая реализация ядра cuda
  • config_infer_xxx_.txt: конфигурация модели;
  • deepstream_app_config_xxx.txt: файл конфигурации плагина Gstreamer nvinfer;
  • xxx.cfg, xxx.weights: файлы модели;

  Вышеизложенного достаточно, приступим.

1.1 Загрузите файл модели

  В SDK deepstream6.0 нет файла модели yolov3, вам нужно скачать его самостоятельно и отправить.

  yolov3.cfg:GitHub.com/P Family Eddie/Big…

  yolov3.веса:Lincoln.Straight.com/?target=Красное свечение…

  Еще одна вещь, которую нужно сказать здесь: если у вас есть yolov3.engine от TensorRT, вам не нужен исходный файл модели.Если у вас нет .engine, вы фактически сгенерируете .engine на основе исходного файла.

1.2 Настройте config_infer_primary_yolov3.txt

[property]
gpu-id=0
net-scale-factor=0.0039215697906911373
#0=RGB, 1=BGR
model-color-format=0
custom-network-config=yolov3.cfg
model-file=yolov3.weights
labelfile-path=labels.txt
int8-calib-file=yolov3-calibration.table.trt7.0
## 0=FP32, 1=INT8, 2=FP16 mode
network-mode=1
num-detected-classes=80
gie-unique-id=1
network-type=0
is-classifier=0
cluster-mode=2
maintain-aspect-ratio=1
parse-bbox-func-name=NvDsInferParseCustomYoloV3
custom-lib-path=nvdsinfer_custom_impl_Yolo/libnvdsinfer_custom_impl_Yolo.so
engine-create-func-name=NvDsInferYoloCudaEngineGet

[class-attrs-all]
nms-iou-threshold=0.3
threshold=0.7

1.3 Настройте файл deepstream_app_config_yolov3.txt

[application]
enable-perf-measurement=1
perf-measurement-interval-sec=5

[tiled-display]
enable=1
rows=1
columns=1
width=1280
height=720
gpu-id=0
nvbuf-memory-type=0

[source0]
enable=1
type=3
uri=file://../../samples/streams/sample_1080p_h264.mp4
num-sources=1
gpu-id=0
cudadec-memtype=0

[sink0]
enable=1
#Type - 1=FakeSink 2=EglSink 3=File
type=2
sync=0
source-id=0
gpu-id=0
nvbuf-memory-type=0

[osd]
enable=1
gpu-id=0
border-width=1
text-size=15
text-color=1;1;1;1;
text-bg-color=0.3;0.3;0.3;1
font=Serif
show-clock=0
clock-x-offset=800
clock-y-offset=820
clock-text-size=12
clock-color=1;0;0;0
nvbuf-memory-type=0

[streammux]
gpu-id=0
live-source=0
batch-size=1
batched-push-timeout=40000
width=1920
height=1080
enable-padding=0
nvbuf-memory-type=0

[primary-gie]
enable=1
gpu-id=0
#model-engine-file=model_b1_gpu0_int8.engine
labelfile-path=labels.txt
batch-size=1
bbox-border-color0=1;0;0;1
bbox-border-color1=0;1;1;1
bbox-border-color2=0;0;1;1
bbox-border-color3=0;1;0;1
interval=2
gie-unique-id=1
nvbuf-memory-type=0
config-file=config_infer_primary_yoloV3.txt

[tracker]
enable=1
tracker-width=640
tracker-height=384
ll-lib-file=/opt/nvidia/deepstream/deepstream-6.0/lib/libnvds_nvmultiobjecttracker.so
ll-config-file=../../samples/configs/deepstream-app/config_tracker_NvDCF_perf.yml
gpu-id=0
enable-batch-process=1
enable-past-frame=1
display-tracking-id=1

[tests]
file-loop=0

1.4 Компиляция проекта

Входить/opt/nvidia/deepstream/deepstream-6.0/sources/objectDetector_Yolo:

cd /opt/nvidia/deepstream/deepstream-6.0/sources/objectDetector_Yolo

  Выполните следующие две команды последовательно, чтобы скомпилировать и сгенерировать файл .so:

export CUDA_VER=11.4    # 设置与设备相同的CUDA版本

  или в/opt/nvidia/deepstream/deepstream-6.0/sources/objectDetector_Yolo/nvdsinfer_custom_impl_Yolo/MakefileИзменено в:

  Затем выполнить компиляцию

make -C nvdsinfer_custom_impl_Yolo 

  После компиляции будут созданы и сгенерированы файлы динамической библиотеки.libnvdsinfer_custom_impl_Yolo.soфайл динамической библиотеки.

1.5 Исполнение

deepstream-app -c deepstream_app_config_yoloV3.txt  

  На этом развертывание deepstream6.0 Yolov3 завершено.

2. Deepstream6.0 развертывает yolov4

  Здесь мы разворачиваем yolov4 другим способом, то есть напрямую вызывая TensorRT Engine вместо импорта из исходной модели.

2.1 Используйте darknet2onnx2TRT для создания yolov4.engine

  Загрузите исходные веса даркнета yolov4 и дайте передачу сетевого диска Baidu:

https://pan.baidu.com/s/1dAGEW8cm-dqK14TbhhVetA     Extraction code:dm5b

  проект преобразования модели клона:

git clone https://github.com/Tianxiaomo/pytorch-YOLOv4.git Yolov42TRT

  Начать преобразование модели:

cd Yolov42TRT

# darknet2onnx
python demo_darknet2onnx.py ./cfg/yolov4.cfg ./cfg/yolov4.weights ./data/dog.jpg 1

# onnx2trt
trtexec --onnx=./yolov4_1_3_608_608_static.onnx --fp16 --saveEngine=./yolov4.engine --device=0

  Это создаст yolov4.engine.

2.2 Конфигурация инженерного логического вывода deepstream yolov4

  Проект рассуждения клона Deepstream yolov4:

git clone https://github.com/NVIDIA-AI-IOT/yolov4_deepstream.git

cd yolov4_deepstream/deepstream_yolov4

  Настройте config_infer_primary_yoloV4.txt:

[property]
gpu-id=0
net-scale-factor=0.0039215697906911373
#0=RGB, 1=BGR
model-color-format=0
model-engine-file=yolov4.engine
labelfile-path=labels.txt
batch-size=1
## 0=FP32, 1=INT8, 2=FP16 mode
network-mode=2
num-detected-classes=80
gie-unique-id=1
network-type=0
is-classifier=0
## 0=Group Rectangles, 1=DBSCAN, 2=NMS, 3= DBSCAN+NMS Hybrid, 4 = None(No clustering)
cluster-mode=2
maintain-aspect-ratio=1
parse-bbox-func-name=NvDsInferParseCustomYoloV4
custom-lib-path=nvdsinfer_custom_impl_Yolo/libnvdsinfer_custom_impl_Yolo.so

[class-attrs-all]
nms-iou-threshold=0.6
pre-cluster-threshold=0.4

  Настройте файл deepstream_app_config_yoloV4.txt:

[application]
enable-perf-measurement=1
perf-measurement-interval-sec=5

[tiled-display]
enable=0
rows=1
columns=1
width=1280
height=720
gpu-id=0
nvbuf-memory-type=0

[source0]
enable=1
type=3
uri=file:/opt/nvidia/deepstream/deepstream-6.0/samples/streams/sample_1080p_h264.mp4
num-sources=1
gpu-id=0
cudadec-memtype=0

[sink0]
enable=1
#Type - 1=FakeSink 2=EglSink 3=File
type=3
sync=0
source-id=0
gpu-id=0
nvbuf-memory-type=0
container=1
codec=1
output-file=yolov4.mp4

[osd]
enable=1
gpu-id=0
border-width=1
text-size=12
text-color=1;1;1;1;
text-bg-color=0.3;0.3;0.3;1
font=Serif
show-clock=0
clock-x-offset=800
clock-y-offset=820
clock-text-size=12
clock-color=1;0;0;0
nvbuf-memory-type=0

[streammux]
gpu-id=0
live-source=0
batch-size=1
batched-push-timeout=40000
width=1280
height=720
enable-padding=0
nvbuf-memory-type=0

[primary-gie]
enable=1
gpu-id=0
model-engine-file=yolov4.engine
labelfile-path=labels.txt
batch-size=1

bbox-border-color0=1;0;0;1
bbox-border-color1=0;1;1;1
bbox-border-color2=0;0;1;1
bbox-border-color3=0;1;0;1
interval=0
gie-unique-id=1
nvbuf-memory-type=0
config-file=config_infer_primary_yoloV4.txt

[tracker]
enable=0
tracker-width=512
tracker-height=320
ll-lib-file=/opt/nvidia/deepstream/deepstream-5.0/lib/libnvds_mot_klt.so

[tests]
file-loop=0

  Скопируйте yolov4.engine, созданный путем преобразования 2.1, в /opt/nvidia/deepstream/deepstream-6.0/sources/yolov4_deepstream.

2.3 Компиляция проекта

Входить/opt/nvidia/deepstream/deepstream-6.0/sources/yolov4_deepstream:

cd /opt/nvidia/deepstream/deepstream-6.0/sources/yolov4_deepstream

  Выполните следующие две команды последовательно, чтобы скомпилировать и сгенерировать файл .so:

export CUDA_VER=11.4    # 设置与设备相同的CUDA版本

  или в/opt/nvidia/deepstream/deepstream-6.0/sources/yolov4_deepstream/nvdsinfer_custom_impl_Yolo/MakefileИзменено в:

  Затем выполнить компиляцию

make -C nvdsinfer_custom_impl_Yolo 

  После компиляции будут созданы и сгенерированы файлы динамической библиотеки.libnvdsinfer_custom_impl_Yolo.soфайл динамической библиотеки.

2.4 Исполнение

deepstream-app -c deepstream_app_config_yoloV4.txt  

  На этом развертывание deepstream6.0 Yolov4 завершено.

  Выше был описан метод развертывания yolov3 и yolov4 в deepstream6.0. Надеюсь, что мой обмен немного поможет вам в вашем исследовании.


【Передача по общему номеру】 "[Обоснование модели] Руководство по развертыванию Deepstream6.0 yolov3 и yolov4