Jetson Nano использует TensorRT для ускорения распознавания целей yolov3-tiny

граничные вычисления

Конфигурация среды

  • установить протобуф
sudo pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple protobuf==3.8.0
  • установить onnx
sudo apt-get install protobuf-compiler libprotoc-dev 
  • установить подушку
sudo pip3 install Pillow
  • Установите pycuda: если следующий скрипт не может быть установлен, см. [[Jetson Nano устанавливает pycuda (наступая на яму)]]
export PATH=/usr/local/cuda/bin:\${PATH}
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:\${LD_LIBRARY_PATH}
sudo pip3 install pycuda
  • установить numpy
sudo pip3 install numpy

запустить TRT-yolov3

?Github: TRT-yolov3

  1. Загрузите файлы конфигурации и файлы весов вTRT-yolov3/yolov3_onnx/середина

также можно использоватьTRT-yolov3/yolov3_onnx/download.shЗагрузите или просмотрите файл для выборочной загрузки (вы знаете, это очень медленно, не забудьте найти способ ускорить, я нашел два для вас)

  1. Исправлятьdownload.shфайл, оставьте только следующие части, выполните скриптsudo ./download.sh
#!/bin/bash

set -e

echo
echo "Creating YOLOv3-Tiny-288 and YOLOv3-Tiny-416 configs..."
cat yolov3-tiny.cfg | sed -e '8s/width=416/width=288/' | sed -e '9s/height=416/height=288/' > yolov3-tiny-288.cfg
echo >> yolov3-tiny-288.cfg
ln -sf yolov3-tiny.weights yolov3-tiny-288.weights
cp yolov3-tiny.cfg yolov3-tiny-416.cfg
echo >> yolov3-tiny-416.cfg
ln -sf yolov3-tiny.weights yolov3-tiny-416.weights

echo
echo "Done."

Только следующееyolov3-tiny-416为例, оба шага медленные, наберитесь терпения

  1. будет.cfgпреобразовать в.onnx
python3 yolov3_to_onnx.py --model yolov3-tiny-416
  1. будет.onnxпреобразовать в.trt
python3 onnx_to_tensorrt.py --model yolov3-tiny-416

проверить (определить)

【видео】

python3 detector.py --file --filename data/test.mp4 --model yolov3-tiny-416 --runtime

【камера】 будетtrt-yolov3-detector-camera.pyсценарий вTRT-yolov3/каталог и замените абсолютный путь десятой строки Выполните скрипт напрямую, чтобы вызвать камеру для идентификации


Замена модели (деталь)

Если TRT-yolov3 был успешно пройден,теоретически часть можно пропустить.Эта часть находится в процессе наступления на яму самостоятельно.До того, как я нашел проект TRT-yolov3, я нашел действие частичной декомпозиции метода преобразования модели , Если вы хотите более подробно, шаг за шагом Узнайте, как получить от.cfgпреобразовать в.trtДа, вы можете продолжить чтение

Основная идея состоит в том, чтобы сделать йоло оригинальным.cfgФайл конфигурации преобразуется в TensorRT для использования.trtдокумент

yolov3-tiny -> onnx

  1. Создайтеyolov3_tiny_to_onnx.pyдокумент
  2. Подготовить конфигурацию модели.cfgфайлы и веса.weightsфайл в том же каталоге, что и скрипт py

Я использую прямойyolov3-tinyПереименуйте два файла Два файла должны иметь одинаковое имя, напримерyolov3-tiny-416.cfgиyolov3-tiny-416.weights

  1. Выполните следующий скрипт, чтобы сгенерировать.onnxФайл конфигурации модели
python3 yolov3_tiny_to_onnx.py --model yolov3-tiny-416

【Об этом.cfgинструкция】

Я немного модифицировал исходный py-файл, оригинальный py может читать только конфигурационные файлы слоев 288, 416 и 608. Здесь это ограничение снято, но пока неясно, в чем будет проблема.

Но файл cfg по-прежнему имеет определенные ограничения формата.

  1. Между каждым слоем есть только одна пустая строка
[convolutional]
batch_normalize=1

[maxpool]
size=2
  1. Последние два элемента в первом слое [net] изменены на
steps=400000
scales=.1
  1. В конце файла cfg есть только две пустые строки.

onnx -> trt

  1. Создайтеonnx_to_tensorrt.pyдокумент
  2. Выполните следующий скрипт, чтобы сгенерировать.trtфайл модели
python3 onnx_to_tensorrt.py —model yolov3-tiny-416

Resource