Rockchip · AI & Linux Hub

AI-инференс

RKNN-Toolkit2 Python API V2.5.0 — Построение, гибридное квантование и экспорт

RKNN-Toolkit2 Python API V2.5.0 — Построение, гибридное квантование и экспорт | Полные параметры, примеры и ограничения платформ

· ArmSoM · 6 мин чтения

Платформа и источник

Статья подготовлена по PDF производителя RKNN V2.5.0 и относится только к перечисленным в нём чипам и интерфейсам. Для платы ArmSoM сначала проверьте SoC, драйвер NPU, Toolkit/Runtime, SDK/BSP и версию ядра. Проверки на оборудовании ArmSoM не проводились; примеры и измерения оригинала не являются тестами ArmSoM.

Навигация по серии

5 API построения и квантования модели

5.1 Построение модели RKNN

API build
Описание Собрать соответствующую модель RKNN на основе импортированной модели.
Параметр do_quantization: Выполнять ли квантование модели. По умолчанию True.
Параметр dataset: Входной набор данных для калибровки параметров квантования. Поддерживается текстовый файл с путями к изображениям (jpg или png) либо файлам npy для калибровки. На каждой строке один путь, например:
a.jpg
b.jpg
или
a.npy
b.npy
При нескольких входах соответствующие файлы разделяются пробелом, например:
a.jpg a2.jpg
b.jpg b2.jpg
или
a.npy a2.npy
b.npy b2.npy
Примечание: обычно рекомендуются изображения квантования, соответствующие сценарию прогнозирования.
Параметр rknn_batch_size: Изменяет размер пакета входа. По умолчанию None.
При значении больше 1 NPU обрабатывает несколько кадров изображений или входных данных за один инференс. Например, исходный вход MobileNet — [1, 224, 224, 3], выход — [1, 1001]. При rknn_batch_size = 4 вход становится [4, 224, 224, 3], выход — [4, 1001].
Примечания:
1. rknn_batch_size повышает производительность (загрузку ядер) только на многоядерных NPU; рекомендуется выбирать значение по числу ядер NPU.
2. Изменение rknn_batch_size меняет формы входов и выходов. Для inference нужно передавать входы правильного размера и соответственно обрабатывать возвращённые выходы на этапе постобработки.
Параметр auto_hybrid: Включать ли автоматическое смешанное квантование для коррекции точности или переполнения. По умолчанию False: коррекция не выполняется. При квантовании модели auto_hybrid переводит операции, у которых косинусное и евклидово расстояния ниже заданных порогов, в вычисления FP16 (сейчас поддерживается только квантование ‘w8a8’). Если модель не квантуется, auto_hybrid переводит операции, выходящие за диапазон значений FP16, в вычисления INT16.
Примечание:
1. Пороги косинусного и евклидова расстояния задаются через auto_hybrid_cos_thresh и auto_hybrid_euc_thresh интерфейса config.
Возвращаемое значение 0: Сборка выполнена успешно.
Возвращаемое значение -1: Ошибка сборки.

Пример кода:

# Build and quantize RKNN model
ret = rknn.build(do_quantization=True, dataset='./dataset.txt')

5.2 Гибридное квантование

5.2.1 hybrid_quantization_step1

На первом этапе гибридного квантования вызывается hybrid_quantization_step1. Он создаёт временную модель (.model), файл данных (.data) и конфигурацию квантования (.quantization.cfg). Подробности интерфейса:

API hybrid_quantization_step1
Описание На основе загруженной исходной модели генерируются временные файлы модели, файлы данных и профили квантования.
Параметр dataset: См. 5.1 «Построение модели RKNN».
Параметр rknn_batch_size: См. 5.1 «Построение модели RKNN».
Параметр proposal: Генерировать предложения по настройке смешанного квантования. По умолчанию False.
Параметр proposal_dataset_size: Размер набора данных для proposal. По умолчанию 1. Поскольку proposal требует много времени, используется размер 1.
Параметр custom_hybrid: Выбор подграфов гибридного квантования по нескольким парам имён входов и выходов пользователя. Формат [[input0_name, output0_name], [input1_name, output1_name], …]. По умолчанию None.
Примечание: имена выбираются по временной модели (.model).
Возвращаемое значение 0: Успешно.
Возвращаемое значение -1: Ошибка.

Пример кода:

# Call hybrid_quantization_step1 to generate quantization config
ret = rknn.hybrid_quantization_step1(dataset='./dataset.txt')

5.2.2 hybrid_quantization_step2

Для этапа формирования смешанно-квантованной модели RKNN вызывается hybrid_quantization_step2. Описание интерфейса:

API hybrid_quantization_step2
Описание Принимает временный файл модели, файл данных, профиль квантования и калибровочный набор данных, затем генерирует модель RKNN со смешанным квантованием.
Параметр model_input: Путь к файлу временной модели (.model), созданному hybrid_quantization_step1.
Параметр data_input: Путь к файлу данных модели (.data), созданному hybrid_quantization_step1.
Параметр model_quantization_cfg: Путь к файлу изменённой конфигурации квантования (.quantization.cfg), созданному hybrid_quantization_step1.
Возвращаемое значение 0: Успешно.
Возвращаемое значение -1: Ошибка.

Пример кода:

# Call hybrid_quantization_step2 to generate hybrid quantized RKNN model
ret = rknn.hybrid_quantization_step2(
               model_input='./ssd_mobilenet_v2.model',
               data_input='./ssd_mobilenet_v2.data',
               model_quantization_cfg='./ssd_mobilenet_v2.quantization.cfg')

6 Экспорт модели RKNN

Модель RKNN, созданную через build, можно сохранить в файл для дальнейшего развёртывания.

API export_rknn
Описание Сохранить модель RKNN в указанном файле (суффикс “.rknn”).
Параметр export_path: Путь к создаваемому файлу модели RKNN.
Возвращаемое значение 0: Экспорт выполнен успешно.
Возвращаемое значение -1: Ошибка экспорта.

Пример кода:

# save the built RKNN model as a mobilenet_v1.rknn file in the current path
ret = rknn.export_rknn(export_path='./mobilenet_v1.rknn')

Источник и редакционные примечания

Технические главы разделены по назначению. Код, идентификаторы и параметры сохранены. Китайская версия следует китайскому оригиналу; английская, русская и немецкая — английскому. В главы без иллюстраций вымышленные изображения не добавлены.

Примечания: журналы с SDK 1.5.2 сохранены как исторические примеры, а не измерения V2.5.0. Ячейка Python для Ubuntu20.04 различается: китайский текст 3.8/3.9, английский 3.8/3.8; аналогично для Debian11; в разделе ARM64 Debian всё ещё помечен x64. Значения сохранены; проверяйте фактический установочный пакет. V2.5.0 добавляет главу C++ codegen и уточняет квантование и стратегии памяти; параметры старой версии не подменяют новый источник.

RKNN-Toolkit2 · ArmSoM documentation

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