MCPcopy Create free account
hub / github.com/Xilinx/CHaiDNN / ExtractConvolutionParameters

Function ExtractConvolutionParameters

software/xtract/caffe_network_parser.cpp:1008–1158  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1006}
1007
1008void ExtractConvolutionParameters(const caffe::LayerParameter& src, XGraph& graph)
1009{
1010 caffe::ConvolutionParameter src_parameter = src.convolution_param();
1011 mapStrStr::const_iterator map_it = CaffeLayerMap.find(src.type());
1012 string xlayerType = map_it->second;
1013 XLayer* dst = new XLayer(src.name(), xlayerType, src.top(0));
1014
1015 // Ensure number of input/output blobs
1016 checkNumberOfTopAndBottom(src, 1, 1);
1017
1018 // Get OUTPUT_FEATURE_MAPS [MANDATORY]
1019 if(src_parameter.has_num_output())
1020 {
1021 dst->conv_params->M = src_parameter.num_output();
1022 }
1023 else
1024 {
1025 cerr << "[EP012] \"num_output\" is not specified in the convolution layer : " << src.name() << endl;
1026 exit(-1);
1027 }
1028
1029 // Get FILTER SIZE [MANDATORY]
1030 if (src_parameter.has_kernel_h() || src_parameter.has_kernel_w())
1031 {
1032 ELOG ( (src_parameter.kernel_size_size() > 0),
1033 EP151,
1034 "Mention either kernel_size or kernel_h/kernel_w for layer " << src.name() << ". Not both. !!")
1035 ASSERT((src_parameter.has_kernel_h() && src_parameter.has_kernel_w()),
1036 EP152,
1037 "Mention both kernel_h and kernel_w for layer " << src.name() << ". Or use kernel_size.")
1038 dst->conv_params->filter_h = src_parameter.kernel_h();
1039 dst->conv_params->filter_w = src_parameter.kernel_w();
1040 }
1041 else
1042 {
1043 ASSERT((src_parameter.kernel_size_size() > 0),
1044 EP153, "kernel_size is not specified in the convolution layer : " << src.name())
1045 dst->conv_params->filter_h = src_parameter.kernel_size(0);
1046 dst->conv_params->filter_w = src_parameter.kernel_size(0);
1047 }
1048
1049 // Check if filters are not rectangular
1050 ASSERT( (dst->conv_params->filter_h == dst->conv_params->filter_w),
1051 EP154, "This version supports only square filters for convolution layer: " << src.name() )
1052
1053 // Get PAD [DEFAULT = 0]
1054 if (src_parameter.has_pad_h() || src_parameter.has_pad_w())
1055 {
1056 ELOG ( (src_parameter.pad_size() > 0),
1057 EP155,
1058 "Mention either pad or pad_h/pad_w for layer " << src.name() << ". Not both. !!")
1059 ASSERT((src_parameter.has_pad_h() && src_parameter.has_pad_w()),
1060 EP156,
1061 "Mention both pad_h and pad_w for layer " << src.name() << ". Or use pad.")
1062 dst->conv_params->pad_h = src_parameter.pad_h();
1063 dst->conv_params->pad_w = src_parameter.pad_w();
1064 }
1065 else

Callers 1

ExtractParametersFunction · 0.85

Calls 15

nameIndexClass · 0.85
has_num_outputMethod · 0.80
num_outputMethod · 0.80
has_kernel_hMethod · 0.80
has_kernel_wMethod · 0.80
kernel_size_sizeMethod · 0.80
kernel_hMethod · 0.80
kernel_wMethod · 0.80
kernel_sizeMethod · 0.80
has_pad_hMethod · 0.80
has_pad_wMethod · 0.80

Tested by

no test coverage detected