欢迎关注我的公众号 [极智视界],回复001获取Google编程规范
O_o >_< o_O O_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》