Портирование и запуск моделей на Sophon
Портирование моделей на Sophon
Для запуска нейросетевых моделей на устройстве 3DV-EdgeAI-32 требуется преобразование исходной модели в формат bmodel — нативный формат инференса для TPU.
Компиляция ONNX-модели в формат bmodel выполняется с помощью специализированного инструмента TPU-MLIR, который оптимизирует вычислительный граф под архитектуру TPU и подготавливает модель к эффективному выполнению на целевом устройстве.
Предварительные требования
Все действия выполняются на устройстве, удовлетворяющем требованиям:
- ЦП x86-64
- ОС Ubuntu 16.04+
- Оперативная память 12 ГБ или более
На устройстве должно быть установлено и настроено ПО Docker.
Продготовка окружения
Загрузите архив с данными и весами YOLOv5. Расположите архив в примонтированной рабочей папке и распакуйте его.
tar xf data.tar.gzСкачайте docker-образ.
docker pull sophgo/tpuc_dev:v3.2Запустите контейнер.
docker run --privileged --name bmodel -v $PWD:/workspace -it sophgo/tpuc_dev:v3.2Установите tpu-mlir в контейнере.
pip3 install tpu_mlir==1.7
Компиляция модели
Преобразуйте ONNX-файл в промежуточный формат mlir.
mkdir -p export
cd export
model_transform \
--model_name yolov5m \
--model_def \
../models/onnx/yolov5m_v6.1_1output_1b.onnx \
--input_shapes [[1,3,640,640]] \
--mean 0.0,0.0,0.0 \
--scale 0.0039216,0.0039216,0.0039216 \
--keep_aspect_ratio \
--pixel_format rgb \
--output_names output \
--test_input \
../datasets/test/dog.jpg \
--test_result yolov5m_top_outputs.npz \
--mlir yolov5m.mlirПреобразуйте файл mlir в bmodel (пример для точности FP16).
model_deploy \
--mlir yolov5m.mlir \
--quantize F16 \
--processor bm1684x \
--test_input yolov5m_in_f32.npz \
--test_reference yolov5m_top_outputs.npz \
--tolerance 0.99,0.99 \
--model yolov5m_1684x_f16.bmodel
В результате выполнения команд будет создан файл export/yolov5m_1684x_f16.bmodel.
Более подробная информация изложена в руководстве по TPU-MLIR.
Значения input_shapes и output_names для произвольного ONNX-файла можно получить с помощью приложения Netron.

Запуск модели на Python на примере Yolo5
Предварительные требования
Все действия выполняются на устройстве 3DV-EdgeAI-32.
Подготовка окружения
Загрузите архив с зависимостями. Архив включает минимальный набор библиотек, необходимых для инференса на устройстве. Разместите архив в рабочей папке на устройстве и распакуйте.
tar xf deps.tarИзвлеките runtime библиотеки и настройте переменные окружения для поиска необходимых библиотек.
sophon_lib_path="/opt/sophon/libsophon-current/lib"
sophon_opencv_path="/opt/sophon/sophon-opencv-latest/opencv-python/"
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$sophon_lib_path"
export PYTHONPATH="$PYTHONPATH:$sophon_opencv_path"
echo >> ~/.bashrc
echo "# set library search paths for sophon modules for python" >> ~/.bashrc
echo 'export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:'$sophon_lib_path'"' >> ~/.bashrc
echo 'export PYTHONPATH="$PYTHONPATH:'$sophon_opencv_path'"' >> ~/.bashrcИзвлеките и установите пакет
sophonдля Python.tar xf sophon-sail_3.7.0.tar.gz
pip3 install sophon-sail/python_wheels/soc/libsophon-0.4.9_sophonmw-0.7.0/py38/sophon_arm-3.7.0-py3-none-any.whlСклонируйте репозиторий
sophon-demo.git clone -b release https://github.com/sophgo/sophon-demo.gitВАЖНОЕсли ваша модель не представлена в списке моделей, для которых уже есть пример, необходимо написать собственный пример по аналогии. Например, для resnet.
Перейдите в папку примера инференса YOLOv5.
cd sophon-demo/sample/YOLOv5Загрузите архив с данными и весами YOLOv. Разместите архив в папке примера YOLOv5 на устройстве и распакуйте его.
tar xf data.tar.gzпримечаниеПрилагаемый архив содержит минимальный набор файлов весов, необходимый для проверки инференса на устройстве. В качестве альтернативы для загрузки полного наброра весов и данных может использоваться скрипт из репозитория sophon-demo.
chmod -R +x scripts/
./scripts/download.sh
Тест инференса на Python
Для запуска инференса на тестовом наборе изображений выполните команды:
Для проверки модели с точностью FP32
python3 python/yolov5_opencv.py --input datasets/test --bmodel models/BM1684X/yolov5s_v6.1_3output_fp32_1b.bmodel --dev_id 0 --conf_thresh 0.5 --nms_thresh 0.5 --use_cpu_optДля проверки модели с точностью INT8
python3 python/yolov5_opencv.py --input datasets/test --bmodel models/BM1684X/yolov5s_v6.1_3output_int8_1b.bmodel --dev_id 0 --conf_thresh 0.5 --nms_thresh 0.5 --use_cpu_opt
В результате выполнения команды в папке примера YOLOv5 будет создана папка results/images, содержащая изображения с визуализациями результатов детекции.
Расширенная информация о тестовом примере на Python собрана в файле README_EN.md.
Специалисты 3DiVi имеют опыт портирования моделей нейросетей на архитектуру нейроускорителя Sophon. Чтобы ускорить процесс и сократить ваши затраты, вы можете обратиться к нам за соответствующими услугами:
- Портирование моделей. Для этого нам понадобятся ONNX-файлы ваших моделей. Для проверки желательно также предоставить набор контрольных примеров, либо тестовый датасет с метриками качества, посчитанными до конвертации.
- Квантизация и калибровка моделей. Для этого нам потребуются ваши датасеты (отдельный для калибровки, отдельный для проверки качества), а также метрики качества, посчитанные до конвертации.
- Оптимизация и ускорение. Чтобы оптимизировать модели для быстрой работы на 3DV-EdgeAI-32 нам может потребоваться словесное описание алгоритма препроцессинга/постпроцессинга, или же исходный код.
При необходимости мы также можем провести переобучение модели.
Оставьте заявку и мы обязательно поможем.