上一篇博客:SSD算法代码介绍(三):网络结构参数配置 主要涉及网络结构构建时候的一些参数设置,最终是通过调用symbol_builder.py脚本的get_symbol_train函数完成网络的主干结构构建和损失函数的定义,因此接下来介绍symbol_builder.py脚本。
symbol_builder.py这个脚本主要包括import_module,get_symbol_train,get_symbol三个函数,后面两个函数类似,可以从get_symbol_train函数开始看,这里面调用了import_module函数。
from __future__ import absolute_import
import mxnet as mx
# common.py脚本中的这两个函数主要是用到定义新层和anchor的。
from .common import multi_layer_feature, multibox_layer
def import_module(module_name):
"""Helper function to import module"""
import sys, os
import importlib
sys.path.append(os.path.dirname(__file__))
# module_name只是一个str,这里调用importlib库的import_modole函数来导入指定名称的symbol脚本
return importlib.import_module(module_name)
def get_symbol_train(network, num_classes, from_layers, num_filters, strides, pads,
sizes, ratios, normalizations=-1, steps=[], min_filter=128,
nms_thresh=0.5, force_suppress=False, nms_topk=400, **kwargs):
"""Build network symbol for training SSD
Parameters
----------
network : str
base network symbol name
num_classes : int
number of object classes not including background
from_layers : list of str
feature extraction layers, use '' for add extra layers
For example:
from_layers = ['relu4_3', 'fc7', '', '', '', '']
which means extract feature from relu4_3 and fc7, adding 4 extra layers
on top of fc7
num_filters : list of int
number of filters for extra layers, you can use -1 for extracted features,
however, if normalization and scale is applied, the number of filter for
that layer must be provided.
For example:
num_filters = [512, -1, 512, 256, 256, 256]
strides : list of int
strides for the 3x3 convolution appended, -1 can be used for extracted
feature layers
pads : list of int
paddings for the 3x3 convolution, -