MgeConvert — это конвертер, предназначенный для моделей MegEngine. Он позволяет преобразовывать модели MegEngine в форматы сторонних фреймворков.
В настоящее время поддерживаются следующие сторонние фреймворки: Caffe, ONNX и TFLite. Поддерживаемые модели включают ResNet, ResNext и ShuffleNet. При необходимости адаптации других моделей может потребоваться добавить поддержку дополнительных операторов.
На данный момент MgeConvert также поддерживает преобразование моделей ONNX в mge/TracedModule.
Структура конвертера MgeConvert включает три части:
TracedModule | tflite | caffe | onnx | torchscript |
---|---|---|---|---|
QAT | ![]() |
![]() |
![]() |
![]() |
Quantized | ![]() |
![]() |
![]() |
![]() |
Float32 | ![]() |
![]() |
![]() |
![]() |
Mge | tflite | caffe | onnx |
---|---|---|---|
QAT | ![]() |
![]() |
![]() |
Quantized | ![]() |
![]() |
![]() |
Float32 | ![]() |
![]() |
![]() |
Для работы MgeConvert требуется наличие установленной версии MegEngine (>=1.0).
Caffe:
ONNX:
TFLite:
Torchscript:
Примечание: при установке перечисленные зависимости будут перезаписаны локальными версиями.
Если ранее была установлена версия MgeConvert 0.5.0 или более ранняя, перед установкой новой версии необходимо удалить старую с помощью команды:
sudo pip3 uninstall mgeconvert
Начиная с версии v1.0.0 MgeConvert поддерживает установку из исходного кода. Для установки преобразователя Caffe можно использовать следующую команду:
pip3 install mgeconvert --user --install-option="--targets=caffe"
Примечание: параметр
--targets
может принимать значенияcaffe
,onnx
,tflite
иall
. Значениеall
означает установку всех доступных преобразователей. Параметр--targets
также может принимать несколько значений одновременно, например,--targets=caffe,tflite
.
Примечание: схема преобразователя TFLite по умолчанию использует версию r2.3. Можно выбрать другую версию схемы TFLite с помощью параметра
--tfversion
, например,--install-option="--targets=tflite --tfversion=r2.4"
.
Инструкции по установке из исходного кода аналогичны инструкциям для pip-установки. В качестве примера рассмотрим установку преобразователя Caffe:
git clone https://github.com/MegEngine/mgeconvert.git@v0.5.0
cd mgeconvert
pip3 install . --user --install-option="--targets=caffe"
Примечание: если необходимо преобразовать модель TracedModule, рекомендуется установить версию 0.5.0 и выше.
Конвертеры различаются в зависимости от формата входной модели:
mge_to
.TracedModule — это модель, которая экспортируется в виде сериализованной модели. Конвертер для таких моделей называется tracedmodule_to
.
Скрипт выполняется в папке ~/.local/bin. Перед выполнением скрипта добавьте эту папку в переменную окружения PATH.
Командная строка поддерживает автозаполнение команд. Для этого выполните команду convert --init
.
Чтобы узнать о поддерживаемых фреймворках для преобразования, выполните команду:
convert -h
В качестве примера рассмотрим преобразование модели mge в caffe. Чтобы узнать параметры преобразования, выполните следующую команду:
convert mge_to_caffe -h
Пример команды для преобразования модели:
convert mge_to_caffe -i model.mge -c out.prototxt -b out.caffemodel
Пример команды для преобразования TracedModule-модели:
convert tracedmodule_to_caffe -i model.tm -c out.prototxt -b out.caffemodel
Преобразование QAT-модели в Caffe
mgeconvert позволяет преобразовывать QAT-модель в Caffe. По умолчанию при преобразовании QAT-модели создаётся файл с параметрами квантизации. Вы можете указать путь к файлу параметров квантизации с помощью параметра quantize_file_path
:
convert tracedmodule_to_caffe -i qat_model.tm -c out.prototxt -b out.caffemodel --quantize_file_path quant_params.json
Вы можете выбрать квантизацию параметров модели с помощью параметра param_fake_quant
:
convert tracedmodule_to_caffe -i qat_model.tm -c out.prototxt -b out.caffemodel --quantize_file_path quant_params.json --param_fake_quant
Если в QAT-модели нет QuantStub для обработки входных данных, вы можете использовать параметры input_data_type
, input_scales
и input_zero_points
при преобразовании. Если есть несколько значений масштаба или нулевых точек, разделите их запятыми:
convert tracedmodule_to_caffe -i qat_model.tm -c out.prototxt -b out.caffemodel --quantize_file_path quant_params.json --input_data_type quint8 --input_scales 0.125 --input_zero_points 128
TFlite-конвертер поддерживает float32 и квантованные TracedModule-модели.
Пример команды для преобразования float-модели:
convert mge_to_tflite -i model.mge -o out.tflite
Пример команды для преобразования TracedModule-модели:
convert tracedmodule_to_tflite -i tracedmodule.tm -o out.tflite
Для преобразования QAT-модели можно использовать параметр require_quantize
в конвертере tracedmodule_to_tflite
. Это позволит преобразовать модель в формат, который поддерживает квантованную информацию (int8/uint8/int16/int32):
convert tracedmodule_to_tflite -i tracedmodule.tm -o out.tflite --require_quantize
Также можно не использовать параметр --require_quantize
, чтобы преобразовать модель в float32-формат и создать файл с параметрами квантизации:
convert tracedmodule_to_tflite -i tracedmodule.tm -o out.tflite --quantize_file_path quant_params.json
Можно также использовать параметр param_fake_quant
, чтобы выбрать, будет ли квантизация параметров модели:
convert tracedmodule_to_tflite -i tracedmodule.tm -o out.tflite --quantize_file_path quant_params.json --param_fake_quant
Если в QAT-модели нет QuantStub для обработки входных данных, можно использовать параметры input_data_type
, input_scales
и input_zero_points
при преобразовании. Если есть несколько значений масштаба или нулевых точек, разделите их запятыми:
convert tracedmodule_to_tflite -i tracedmodule.tm -o out.tflite --input_data_type quint8 --input_scales 0.125,0.125 --input_zero_points 128,128 --require_quantize
Mgeconvert может преобразовывать модели между форматом ONNX. Поддерживаются версии opset от 7 до 12. ONNX-модели могут быть преобразованы в mge/TracedModule без ограничений по версии opset. В настоящее время поддерживается только преобразование float-моделей.
Пример команды для преобразования mge-модели в ONNX:
convert mge_to_onnx -i model.mge -o out.onnx
Пример команды для преобразования TracedModule-модели в ONNX:
convert tracedmodule_to_onnx -i tracedmodule.tm -o out.onnx
Пример команды для обратного преобразования ONNX в mge:
convert onnx_to_mge -i model.onnx -o out.mge
Пример команды для обратного преобразования ONNX в TracedModule:
convert onnx_to_tracedmodule -i tracedmodule.onnx -o out.tm
См. примеры в wiki.
error removing /home/user/.local/lib/python3.6/site-packages/mgeconvert-0.5.0-py3.6.egg-info: [Errno 13] Permission denied: '/home/user/.local/lib/python3.6/site-packages/mgeconvert-0.5.0-py3.6.egg-info/PKG-INFO'
Это проблема с правами доступа при использовании sudo для установки старой версии. Сначала удалите старую версию, а затем установите новую:
sudo pip3 uninstall mgeconvert
Эта проблема связана с несоответствием версий libflatbuffers.so и зависимостей. Используйте libflatbuffers.so, скомпилированный mgeconvert:
export LD_LIBRARY_PATH=$MGECONVERT_PATH/backend/ir_to_tflite/pyflexbuffers/lib:$LD_LIBRARY_PATH
TracedModule -> {tflite, caffe, onnx} |
-------------------------- |
Abs |
AveragePool |
Cast |
Conv |
Clip |
Concat |
Div |
Dropout |
Flatten |
Gather |
Gemm |
GlobalAveragePool |
GlobalMaxPool |
Hardsigmoid |
LSTM |
MaxPool |
Mul |
Pow |
Reduce |
Relu |
Reshape |
Resize |
Shape |
Sigmoid |
Slice |
Softmax |
Sqrt |
Sub |
Transpose |
Unsqueeze |
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )