En utilisant le SDK DeepStream, l'inférence à grande vitesse est possible même avec Jetson Nano (YOLO v3-TIny semble produire environ 25 FPS). Cette fois, j'utiliserai DeepStream SDK pour créer un programme qui acquiert les résultats d'inférence de Python. En passant, à propos du SDK DeepStream, Article détaillé sur Macnica est répertorié, il est donc bon de s'y référer.
Terminal: Jetson Nano Image: JetPack 4.2.2. DeepStream SDK:v4.0.2 Python Binding:v0.5α
Vois ici [SDK Deep Stream avec Jetson Nano pour détecter les objets en temps réel et fournir RTSP](https://www.space-i.com/post-blog/jetson-nano%E3%81%A7deepstream-sdk% E3% 80% 80usb% E3% 82% AB% E3% 83% A1% E3% 83% A9% E6% 98% A0% E5% 83% 8F% E3% 81% 8B% E3% 82% 89% E6% A4% 9C% E7% 9F% A5% EF% BC% 86iphone% E3% 81% A7% E3% 82% B9% E3% 83% 88% E3% 83% AA% E3% 83% BC% E3% 83% A0 /)
Téléchargez «DeepStream Python Apps and Bindings» depuis ce site Enregistrez dans n'importe quel emplacement et décompressez
$ tar -xjvf deepstream_python_v0.5.tbz2
deepstream_python_v0.5/
deepstream_python_v0.5/LICENSE.txt
deepstream_python_v0.5/ds_pybind_0.5.tbz2
deepstream_python_v0.5/LicenseAgreement.pdf
deepstream_python_v0.5/README
De plus, décompressez "ds_pybind_0.5.tbz2"
$ cd deepstream_python_v0.5/
$ ls
LICENSE.txt LicenseAgreement.pdf README ds_pybind_0.5.tbz2
~/deepstream_python_v0.5$ tar -xjvf ds_pybind_0.5.tbz2
Poursuivez l'installation en vous référant à deepstream_python_v0.5 / README. Tout d'abord, placez la liaison Python dans le répertoire d'installation du SDK DeepStream.
$ tar -xjvf ds_pybind_v0.5.tbz2
$ cp -r python /opt/nvidia/deepstream/deepstream-4.0/sources/
À ce stade, vérifiez que la structure des dossiers est la suivante
/opt/nvidia/deepstream/deepstream-4.0/sources/python/bindings
/opt/nvidia/deepstream/deepstream-4.0/sources/python/apps$ ls
common deepstream-test2 deepstream-test4
deepstream-test1 deepstream-test3
Installez Gst-python.
$ sudo apt-get install python-gi-dev
$ export GST_LIBS="-lgstreamer-1.0 -lgobject-2.0 -lglib-2.0"
$ export GST_CFLAGS="-pthread -I/usr/include/gstreamer-1.0 -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include"
$ git clone https://github.com/GStreamer/gst-python.git
$ cd gst-python
$ git checkout 1a8f48a
$ ./autogen.sh PYTHON=python3
$ ./configure PYTHON=python3
$ make
$ sudo make install
Cette fois, nous allons définir l'exemple de programme deepstream-test1 comme exemple. Tout d'abord, allez dans deepstream-test1.
$ cd /opt/nvidia/deepstream/deepstream-4.0/sources/python/apps/deepstream-test1
$ ls
README dstest1_pgie_config.txt
deepstream_test_1.py
"Dstest1_pgie_config.txt" dans ce fichier est le fichier de configuration par défaut, mais comme il s'agit du fichier de configuration pour Jetson AGX Xavier, il doit être modifié pour Jetson Nano. Par conséquent, créez un nouveau fichier appelé "dstest_jetson_nano_config.txt" ci-dessous. Copiez et collez le contenu suivant tel quel.
dstest_jetson_nano_config.txt
[property]
gpu-id=0
net-scale-factor=0.0039215697906911373
model-file=../../../../samples/models/Primary_Detector_Nano/resnet10.caffemodel
proto-file=../../../../samples/models/Primary_Detector_Nano/resnet10.prototxt
model-engine-file=../../../../samples/models/Primary_Detector_Nano/resnet10.caffemodel_b8_fp16.engine
labelfile-path=../../../../samples/models/Primary_Detector_Nano/labels.txt
batch-size=8
process-mode=1
model-color-format=0
## 0=FP32, 1=INT8, 2=FP16 mode
network-mode=2
num-detected-classes=4
interval=0
gie-unique-id=1
output-blob-names=conv2d_bbox;conv2d_cov/Sigmoid
#parse-bbox-func-name=NvDsInferParseCustomResnet
#custom-lib-path=/path/to/libnvdsparsebbox.so
#enable-dbscan=1
[class-attrs-all]
threshold=0.2
group-threshold=1
## Set eps=0.7 and minBoxes for enable-dbscan=1
eps=0.2
#minBoxes=3
roi-top-offset=0
roi-bottom-offset=0
detected-min-w=0
detected-min-h=0
detected-max-w=0
detected-max-h=0
Modifiez également deepstream_test_1.py comme suit.
deepstream_test_1.py
- pgie.set_property('config-file-path', "dstest1_pgie_config.txt")
+ pgie.set_property('config-file-path', "dstest_jetson_nano_config.txt")
- streammux.set_property('width', 1920)
+ streammux.set_property('width',Largeur de la vidéo)
- streammux.set_property('height', 1080)
+ streammux.set_property('height',Hauteur de la vidéo)
Il est difficile de vérifier et de régler la résolution vidéo à l'avance, c'est donc aussi une bonne idée d'essayer d'obtenir la résolution vidéo en utilisant OpenCV. Par exemple, comme ça
deepstream_test_1.py
import cv2
cap = cv2.VideoCapture(args[1])
ret, frame = cap.read()
width = len(frame[0])
height = len(frame)
print (f"width:{width}, height:{height}")
streammux.set_property('width', width)
streammux.set_property('height', height)
Créez un fichier vidéo de test dans le même répertoire que deepstream_test_1.py et exécutez la commande suivante pour afficher le résultat de l'inférence DeepStream à l'écran. En outre, il semble qu'il faudra environ 5 minutes pour que le résultat de l'inférence soit affiché.
$ python3 deepstream_test_1.py "Fichier vidéo"
Si cela ne fonctionne pas, vérifiez les points suivants.
$ GST_DEBUG = 3 python3 deepstream_test_1.py Lorsqu'elle est exécutée avec "video file"
, l'option de débogage GST est activée et le journal de démarrage détaillé est affiché sur la console.Recommended Posts