Свои нейросети на NPU

Пионер Мини 2 выполняет инференс нейросетей прямо на борту — на NPU процессора RK3576 через библиотеку pioneer_rknn. Можно использовать готовые модели или обучить и зарегистрировать собственную. Этот урок описывает полный маршрут: от обучения до запуска на борту.

Маршрут модели

обучение (PyTorch/Ultralytics)
      │
      ▼
экспорт в ONNX  (opset=19)
      │
      ▼
конвертация в RKNN  (rknn-toolkit2, x86 Linux)
      │
      ▼
загрузка на борт  (сервис «Модели ИИ», :7777)
      │
      ▼
инференс  (pioneer_rknn, NPU)

1. Обучение

Модель обучается на компьютере (не на борту). Для детекции удобно использовать Ultralytics YOLO; для поз — YOLO-pose. Рекомендованный набор библиотек для обучения приведён в уроке «Быстрый старт» (раздел «Модели ИИ»).

Поддерживаемые на борту архитектуры (по данным model-registry):

АрхитектураЗадача
yolov8Детекция объектов
yolov8-poseОценка позы (скелет)
PP-OCRv5_mobile_det / PP-OCRv5_mobile_recРаспознавание текста (детекция и распознавание)
customСвоя архитектура (без авто-постобработки)

2. Экспорт в ONNX (opset=19)

Экспортируйте модель в ONNX с opset=19 — именно этот вариант принимает сервис загрузки моделей на борту. Пример для Ultralytics:

model.export(format="onnx", opset=19, simplify=True, imgsz=640)

3. Конвертация в RKNN

RKNN-модель собирается утилитой rknn-toolkit2 на компьютере под Linux x86_64. На борту установлена только rknn-toolkit-lite2 (инференс) и librknnrt — конвертация на коптере не выполняется. Для конвертации нужны целевая платформа RK3576 и калибровочный датасет (для квантования).

from rknn.api import RKNN

rknn = RKNN()
rknn.config(target_platform="rk3576")
rknn.load_onnx(model="best.onnx")
rknn.build(do_quantization=True, dataset="dataset.txt")
rknn.export_rknn("best.rknn")

4. Загрузка и регистрация на борту

  1. Подключитесь к коптеру и откройте сервис «Модели ИИ».
  2. Загрузите .rknn-файл кнопкой Загрузить модель.
  3. Укажите архитектуру (yolov8, yolov8-pose, PP-OCRv5_* или custom) и описание.

Реестр хранится в /usr/local/bin/model-registry/models, список — в list.json (см. аудит системы).

5. Запуск на борту

Инференс выполняется классом Yolo из pioneer_rknn (а также YoloPose, PaddleOCR, ModelRegistry). Полный разбор — в уроке «Нейросети (RKNN)» и справочнике.

from pioneer_rknn import Yolo
from pioneer_sdk2 import Camera, CameraType

yolo = Yolo(model_name="yolov8n")
cam = Camera(CameraType.MAIN)
frame = cam.get_cv_frame()
boxes, scores, classes = yolo.inference(frame)

Практические советы

  • Начинайте с готовой yolov8n и лишь затем обучайте свою — так проще проверить весь маршрут.
  • Качество модели на NPU зависит от квантования: подбирайте репрезентативный калибровочный набор.
  • Проверяйте входной размер (imgsz) — он должен совпадать с тем, что ожидает постобработка.
  • Нагрузка NPU повышает температуру борта — следите за термозонами (см. Диагностику).