Rockchip · AI & Linux Hub

AI-инференс

RKNN2 V2.5.0, часть 5: детекция YOLOv5 и оценка точности

RKNN2 V2.5.0, часть 5: детекция YOLOv5 и оценка точности · RKNN2 V2.5.0

· ArmSoM Editorial · Rockchip source documentation · 5 мин чтения

Область применения: справочный материал RKNN2 V2.5.0 для RK3562, семейств RK3566/3568/3576/3588 и RV1126B. Плате ArmSoM с тем же SoC всё равно нужны соответствующие BSP, драйвер NPU и Runtime; нельзя напрямую переносить требования EVB Rockchip к питанию, USB и прошивке. Требования к ПК и драйверу приведены ниже. Проверка на оборудовании ArmSoM не проводилась.

Подготовлено по локальным китайскому и английскому оригиналам V2.5.0 с сохранением нумерации. Китайский использует китайские рисунки, остальные языки — рисунки английского источника. Восстановлены переносы PDF, продолжения таблиц и отступы кода. Примеры вывода не являются испытаниями ArmSoM.

Rockchip source

RKNN2 V2.5.0, часть 1: развёртывание, платформы и репозитории SDK

RKNN2 V2.5.0, часть 2: подключение и проверка ADB

RKNN2 V2.5.0, часть 3: Toolkit, Runtime Android/Linux и компиляторы

RKNN2 V2.5.0, часть 4: преобразование и развёртывание MobileNet

RKNN2 V2.5.0, часть 5: детекция YOLOv5 и оценка точности

RKNN2 V2.5.0, часть 6: Docker, диагностика и документация

4.2 Пример детекции объектов

На примере YOLOv5 рассматриваются преобразование, запуск с подключённой платой, развёртывание и оценка точности детектора. Пример находится в examples/yolov5.

4.2.1 Преобразование модели

В rknn_model_zoo/examples/yolov5/model запустите download_model.sh. Скрипт загрузит доступную модель YOLOv5 ONNX в текущий каталог model. Команды:

# Switch to the rknn_model_zoo/examples/yolov5/model directory
cd Projects/rknn_model_zoo/examples/yolov5/model

# Run the download_model.sh script to download the yolov5 ONNX model
# For example, the downloaded ONNX model is stored at model/yolov5s_relu.onnx
./download_model.sh

Перейдите в rknn_model_zoo/examples/yolov5/python и запустите convert.py. Сценарий преобразует исходную ONNX-модель в RKNN. Пример команд:

# Switch to the rknn_model_zoo/examples/yolov5/python directory
cd Projects/rknn_model_zoo/examples/yolov5/python

# Run the convert.py script to convert the original ONNX model to RKNN format
# Usage: python convert.py model_path [rk3566|rk3588|rk3562] [i8/fp] [output_path]
python convert.py ../model/yolov5s_relu.onnx rk3588 i8 ../model/yolov5s_relu.rknn

Здесь i8 включает 8-битное квантование. После преобразования в каталоге модели создаётся соответствующий файл .rknn.

4.2.2 Запуск RKNN Python Demo

RKNN Python Demo запускает YOLOv5 через отладку с подключённой платой. В rknn_model_zoo/examples/yolov5/python выполните yolov5.py:

# Run the yolov5.py script to run the yolov5 model on the board
# Usage: python yolov5.py --model_path {rknn_model} --target {target_platform} --img_show

# If the --img_show parameter is included, the result image will be displayed
# Note: Here, the example is for the rk3588 platform. If using a different board, modify the platform type in the command accordingly
python yolov5.py --model_path ../model/yolov5s_relu.rknn --target rk3588 --img_show

# If you want to run the original onnx model on the computer first, you can use the following command
# Usage: python yolov5.py --model_path {onnx_model} --img_show
python yolov5.py --model_path ../model/yolov5s_relu.onnx --img_show

После успешного запуска сценария появится следующий вывод. Поле class — предсказанная категория, score — уверенность; (xmin, ymin) — координаты верхнего левого угла рамки обнаружения, (xmax, ymax) — нижнего правого.

# class @ (xmin, ymin, xmax, ymax) score
person @ (209 244 286 506) 0.884
person @ (478 238 559 526) 0.868
person @ (110 238 230 534) 0.825
bus @ (94 129 553 468) 0.705
person @ (79 354 122 516) 0.339

Входное изображение по умолчанию — model/bus.jpg. Результат показан ниже:

Рисунок английского оригинала · PDF 27

Рисунок английского оригинала · PDF 27

Рис. 4-1 Визуализация результата RKNN Python Demo

4.2.3 Запуск RKNN C Demo

Сначала скомпилируйте исходный код C/C++ в исполняемый файл, передайте его на плату и запустите. Перед компиляцией установите инструменты (раздел 3.4): для Android задайте ANDROID_NDK_PATH в начале build-android.sh, для Linux — GCC_COMPILER в начале build-linux.sh. Параметры сборки описаны в README.md каждого примера.

  1. Компиляция
# Board running on the Android system
# Note: configure ANDROID_NDK_PATH at the beginning of the build-android.sh script
cd Projects/rknn_model_zoo
./build-android.sh -t rk3588 -a arm64-v8a -d yolov5

# Board running on the Linux system
# Note: configure GCC_COMPILER at the beginning of the build-linux.sh script
cd Projects/rknn_model_zoo
./build-linux.sh -t rk3588 -a aarch64 -d yolov5
  1. Передача файлов на плату

После компиляции исполняемый файл находится в папке rknn_yolov5_demo внутри install:

# Board running on the Android system
adb root
adb push install/rk3588_android_arm64-v8a/rknn_yolov5_demo /data/

# Board running on the Linux system
adb push install/rk3588_linux_aarch64/rknn_yolov5_demo /userdata/
  1. Запуск Demo на плате
# Switch to the board
adb shell

# Switch to the rknn_yolov5_demo directory
# /data/rknn_yolov5_demo for Android, /userdata/rknn_yolov5_demo for Linux
cd /userdata/rknn_yolov5_demo

# Set the library dependency environment
export LD_LIBRARY_PATH=./lib

# Run the executable file
# Usage: ./rknn_yolov5_demo <model_path> <input_path>
./rknn_yolov5_demo model/yolov5s_relu.rknn model/bus.jpg

По умолчанию выходное изображение сохраняется в rknn_yolov5_demo/out.png. Скопируйте его с платы на компьютер через adb. В терминале компьютера выполните следующую команду:

# Pull to the local current directory
adb pull /userdata/rknn_yolov5_demo/out.png .

Выходное изображение:

Рисунок английского оригинала · PDF 29

Рисунок английского оригинала · PDF 29

Рис. 4-2 Визуализация результата RKNN C Demo

Для первого запуска достаточно убедиться, что Demo завершается нормально и создаёт out.png. Фактическая детекция зависит от версии модели, входного изображения и среды выполнения.

4.2.4 Оценка точности на наборе данных (необязательно)

В rknn_model_zoo/datasets хранятся наборы для оценки точности. Сначала загрузите нужный набор в этот каталог. Для YOLOv5 нужен COCO: в rknn_model_zoo/datasets/COCO выполните download_eval_dataset.py. Скрипт загрузит val2017 в текущий каталог COCO. Команды:

# Switch to the rknn_model_zoo/datasets/COCO directory
cd Projects/rknn_model_zoo/datasets/COCO

# Run the download_eval_dataset.py script to download the COCO dataset
python download_eval_dataset.py

Для оценки точности задайте –coco_map_test и путь набора –img_folder. Команды:

# Please install pycocotools first
pip install pycocotools

# Switch to the rknn_model_zoo/examples/yolov5/python directory
cd Projects/rknn_model_zoo/examples/yolov5/python

# Run the yolov5.py script
python yolov5.py \
    --model_path ../model/yolov5s_relu.rknn \
    --target rk3588 \
    --img_folder ../../../datasets/COCO/val2017 \
    --coco_map_test

Примечание: для послойного сравнения результатов квантованной модели с моделью с плавающей точкой используйте rknn.accuracy_analysis() из RKNN-Toolkit2. См. «Model Accuracy Analysis» в RKNN2 SDK Development Guide.

Другие статьи по теме → · Учебные маршруты →