1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/RainweicHome-GluonConverter

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Gluon Converter

Преобразование модели MXNet-Gluon в Caffe

Требования

  • Python версии 3.6 и выше (f-string используется в коде)
  • mxnet
  • gluoncv
  • numpy
  • caffe (необязательно)

Использование

  1. Создайте свою модель gluon, например:
    from gluoncv import resnet18_v1
    net = resnet18_v1(pretrained=True)
  2. Преобразуйте её в параметры NetParamert Caffe, например:
    from convert import convert_model
    text_net, binary_weights = convert_model(net, input_shape=(1,3,224,224), softmax=False, to_bgr=True, merge_bn=True)
    Для caffe порядок входных каналов часто BGR, а не RGB.
    Если вы хотите преобразовать модель типа ssd в gluoncv, используйте API convert_ssd_model, а не convert_model.
  3. Сохраните в файлы, например:
    from convert import save_model
    save_model(text_net, binary_weights, prefix="tmp/resnet18_v1")

Как преобразовать модель типа SSD?

  1. Чтобы получить атрибуты, необходимые для слоёв PriorBox и DetectionOutput, convert_ssd_model извлечёт их из gluon-net и anchors, box_decoder, class_decoder в нём.
  2. Перед преобразованием символов в caffemodel в исходные символы добавляются поддельные символы для priorbox и detction_output.
  3. Поскольку step нельзя извлечь из якорей в gluon-net, он будет установлен по умолчанию в caffe (step=img_size/layer_size, см. caffe-ssd/prior_box_layer.cpp).
    Вы можете создать экземпляр gluoncv.model_zoo.SSD и обучить его, как в gluoncv/scripts/detection/ssd/train_ssd.py, например, ssd300_mobilenetv2:
    from gluoncv.model_zoo import SSD
    image_size = 300
    layer_size = (19, 10, 5, 3, 2, 1)
    net = SSD(network="mobilenetv2_1.0", 
           base_size=image_size, 
           features=['features_linearbottleneck12_elemwise_add0_output',     # FeatureMap: 19x19
                     'features_linearbottleneck16_batchnorm2_fwd_output'],   # FeatureMap: 10x10
           num_filters=[256, 256, 128, 128],    # Expand feature extractor with FeatureMaps: 5x5, 3x3, 2x2, 1x1 (stride=2)
           sizes=[21, 45, 99, 153, 207, 261, 315],
           ratios=[[1, 2, 0.5]] + [[1, 2, 0.5, 3, 1.0/3]] * 3 + [[1, 2, 0.5]] * 2,
           steps=[image_size/layer_size for layer_size in layer_size],   # Default setting in DetectionOutput caffe-layer
           classes=['A', 'B', 'C'],
           pretrained=True)
    # ...train as train_ssd.py

Я протестировал модели ssd, преобразованные из gluoncv, на caffe-ssd и ncnn, и они работают хорошо.

Как преобразовать MobileNetv2?

ReLU6 — один из компонентов MobileNetv2, который реализован с помощью символа clip с диапазоном [0,6]. Но caffe не поддерживает clip. Поэтому для преобразования MobileNetv2 конвертер заменит символ clip с диапазоном [0,6] на Activation(relu). И, конечно, некоторые ошибки будут введены, особенно для квантованных моделей.
Однако, насколько мне известно, некоторые ветви caffe и некоторые платформы (например, ncnn) поддерживают ReLU6, поэтому, если вы хотите развернуть его на таких ветвях или платформах, сбросьте тип слоёв активации вручную.

Поддерживаемые слои

  • Convolution -> Convolution

  • BatchNorm -> BatchNorm & Scale

  • Activation (relu только) -> ReLU

  • Pooling -> Pooling (MAX/AVG)

  • elemwise_add -> Eltwise (ADD)

  • FullyConnected -> InnerProduct

  • Flatten -> Flatten К сожалению, без контекста сложно понять, о чём идёт речь в запросе. Но я могу предложить перевод терминов, которые вы указали:

  • Concat — Конкат;

  • Dropout — Дропаут;

  • Softmax — софтмакс;

  • Permute (caffe-ssd) — перестановка (Caffe-SSD);

  • Reshape (caffe-ssd) — изменение формы (Caffe-SSD);

  • ReLU — выпрямленная линейная функция.

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Конвертируйте модель MXNet-Gluon в Caffe. Развернуть Свернуть
MIT
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/RainweicHome-GluonConverter.git
git@api.gitlife.ru:oschina-mirror/RainweicHome-GluonConverter.git
oschina-mirror
RainweicHome-GluonConverter
RainweicHome-GluonConverter
master