Преобразование модели MXNet-Gluon в Caffe
from gluoncv import resnet18_v1
net = resnet18_v1(pretrained=True)
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)
convert_ssd_model
, а не convert_model
.
from convert import save_model
save_model(text_net, binary_weights, prefix="tmp/resnet18_v1")
PriorBox
и DetectionOutput
, convert_ssd_model
извлечёт их из gluon-net и anchors, box_decoder, class_decoder в нём.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, и они работают хорошо.
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 )