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

Function ExtractDeconvolutionParameters

software/xtract/caffe_network_parser.cpp:1160–1315  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1158}
1159
1160void ExtractDeconvolutionParameters(const caffe::LayerParameter& src, XGraph& graph)
1161{
1162 caffe::ConvolutionParameter src_parameter = src.convolution_param();
1163 mapStrStr::const_iterator map_it= CaffeLayerMap.find(src.type());
1164 string xlayerType = map_it->second;
1165 XLayer* dst = new XLayer(src.name(), xlayerType, src.top(0));
1166
1167 // Ensure number of input/output blobs
1168 checkNumberOfTopAndBottom(src, 1, 1);
1169
1170 // Get OUTPUT_FEATURE_MAPS [MANDATORY]
1171 if(src_parameter.has_num_output())
1172 {
1173 dst->deconv_params->M = src_parameter.num_output();
1174 }
1175 else
1176 {
1177 cerr << "[EP015] \"num_output\" is not specified in the Deconvolution layer : " << src.name() << endl;
1178 exit(-1);
1179 }
1180
1181 // Get FILTER SIZE [MANDATORY]
1182 if (src_parameter.has_kernel_h() || src_parameter.has_kernel_w())
1183 {
1184 ELOG ( (src_parameter.kernel_size_size() > 0),
1185 EP151,
1186 "Mention either kernel_size or kernel_h/kernel_w for layer " << src.name() << ". Not both. !!")
1187 ASSERT((src_parameter.has_kernel_h() && src_parameter.has_kernel_w()),
1188 EP152,
1189 "Mention both kernel_h and kernel_w for layer " << src.name() << ". Or use kernel_size.")
1190 dst->deconv_params->filter_h = src_parameter.kernel_h();
1191 dst->deconv_params->filter_w = src_parameter.kernel_w();
1192 }
1193 else
1194 {
1195 ASSERT((src_parameter.kernel_size_size() > 0),
1196 EP153, "kernel_size is not specified in the Deconvolution layer : " << src.name())
1197 dst->deconv_params->filter_h = src_parameter.kernel_size(0);
1198 dst->deconv_params->filter_w = src_parameter.kernel_size(0);
1199 }
1200
1201 // Check if filters are not rectangular
1202 ASSERT( (dst->deconv_params->filter_h == dst->deconv_params->filter_w),
1203 EP154, "This version supports only square filters for Deconvolution layer: " << src.name() )
1204
1205 // Get PAD [DEFAULT = 0]
1206 if (src_parameter.has_pad_h() || src_parameter.has_pad_w())
1207 {
1208 ELOG ( (src_parameter.pad_size() > 0),
1209 EP155,
1210 "Mention either pad or pad_h/pad_w for layer " << src.name() << ". Not both. !!")
1211 ASSERT((src_parameter.has_pad_h() && src_parameter.has_pad_w()),
1212 EP156,
1213 "Mention both pad_h and pad_w for layer " << src.name() << ". Or use pad.")
1214 dst->deconv_params->pad_h = src_parameter.pad_h();
1215 dst->deconv_params->pad_w = src_parameter.pad_w();
1216 }
1217 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