@@ -195,26 +195,26 @@ arma::fmat ConvolutionLayer::Im2Col(sftensor input, uint32_t kernel_w,
195195 for (uint32_t ic = 0 ; ic < input_c_group; ++ic) {
196196 float * input_channel_ptr =
197197 input->matrix_raw_ptr (ic + group * input_c_group);
198- uint32_t input_channel_height = input_h ;
199- int current_col = 0 ;
198+ uint32_t current_col = 0 ;
199+ uint32_t channel_row = ic * row_len ;
200200 for (uint32_t w = 0 ; w < input_padded_w - kernel_w + 1 ; w += stride_w_) {
201201 for (uint32_t r = 0 ; r < input_padded_h - kernel_h + 1 ; r += stride_h_) {
202- float * input_matrix_c_ptr =
203- input_matrix.colptr (current_col) + ic * row_len ;
202+ float * input_matrix_ptr =
203+ input_matrix.colptr (current_col) + channel_row ;
204204 current_col += 1 ;
205205 for (uint32_t kw = 0 ; kw < kernel_w; ++kw) {
206+ const uint32_t region_w = input_h * (w + kw - padding_w_);
206207 for (uint32_t kh = 0 ; kh < kernel_h; ++kh) {
207208 if ((kh + r >= padding_h_ && kw + w >= padding_w_) &&
208209 (kh + r < input_h + padding_h_ &&
209210 kw + w < input_w + padding_w_)) {
210- float * region_ptr = input_channel_ptr +
211- input_channel_height * (w + kw - padding_w_) +
212- r + kh - padding_h_;
213- *input_matrix_c_ptr = *region_ptr;
211+ float * region_ptr =
212+ input_channel_ptr + region_w + (r + kh - padding_h_);
213+ *input_matrix_ptr = *region_ptr;
214214 } else {
215- *input_matrix_c_ptr = padding_value; // only support zero mode
215+ *input_matrix_ptr = padding_value; // only support zero mode
216216 }
217- input_matrix_c_ptr += 1 ;
217+ input_matrix_ptr += 1 ;
218218 }
219219 }
220220 }
@@ -339,7 +339,7 @@ ParseParameterAttrStatus ConvolutionLayer::GetInstance(
339339 return ParseParameterAttrStatus::kParameterMissingOutChannel ;
340340 }
341341
342- auto out_channel =
342+ auto out_channel =
343343 std::dynamic_pointer_cast<RuntimeParameterInt>(params.at (" out_channels" ));
344344 if (!out_channel) {
345345 LOG (ERROR) << " Can not find the out channel parameter" ;
@@ -362,7 +362,8 @@ ParseParameterAttrStatus ConvolutionLayer::GetInstance(
362362 LOG (ERROR) << " Can not find the bias parameter" ;
363363 return ParseParameterAttrStatus::kParameterMissingUseBias ;
364364 }
365- auto use_bias = std::dynamic_pointer_cast<RuntimeParameterBool>(params.at (" bias" ));
365+ auto use_bias =
366+ std::dynamic_pointer_cast<RuntimeParameterBool>(params.at (" bias" ));
366367 if (!use_bias) {
367368 LOG (ERROR) << " Can not find the bias parameter" ;
368369 return ParseParameterAttrStatus::kParameterMissingUseBias ;
@@ -372,7 +373,7 @@ ParseParameterAttrStatus ConvolutionLayer::GetInstance(
372373 LOG (ERROR) << " Can not find the stride parameter" ;
373374 return ParseParameterAttrStatus::kParameterMissingStride ;
374375 }
375- auto stride =
376+ auto stride =
376377 std::dynamic_pointer_cast<RuntimeParameterIntArray>(params.at (" stride" ));
377378 if (!stride) {
378379 LOG (ERROR) << " Can not find the stride parameter" ;
@@ -383,16 +384,16 @@ ParseParameterAttrStatus ConvolutionLayer::GetInstance(
383384 LOG (ERROR) << " Can not find the kernel parameter" ;
384385 return ParseParameterAttrStatus::kParameterMissingKernel ;
385386 }
386- auto kernel =
387- std::dynamic_pointer_cast<RuntimeParameterIntArray>( params.at (" kernel_size" ));
387+ auto kernel = std::dynamic_pointer_cast<RuntimeParameterIntArray>(
388+ params.at (" kernel_size" ));
388389 if (!kernel) {
389390 LOG (ERROR) << " Can not find the kernel parameter" ;
390391 return ParseParameterAttrStatus::kParameterMissingKernel ;
391392 }
392393
393394 if (params.find (" padding_mode" ) != params.end ()) {
394- auto padding_mode =
395- std::dynamic_pointer_cast<RuntimeParameterString>( params.at (" padding_mode" ));
395+ auto padding_mode = std::dynamic_pointer_cast<RuntimeParameterString>(
396+ params.at (" padding_mode" ));
396397 if (padding_mode == nullptr ) {
397398 LOG (ERROR) << " Can not find the padding parameter" ;
398399 return ParseParameterAttrStatus::kParameterMissingPaddingMode ;
@@ -408,7 +409,8 @@ ParseParameterAttrStatus ConvolutionLayer::GetInstance(
408409 return ParseParameterAttrStatus::kParameterMissingPaddingMode ;
409410 }
410411
411- auto groups = std::dynamic_pointer_cast<RuntimeParameterInt>(params.at (" groups" ));
412+ auto groups =
413+ std::dynamic_pointer_cast<RuntimeParameterInt>(params.at (" groups" ));
412414 if (!groups) {
413415 LOG (ERROR) << " Can not find the groups parameter" ;
414416 return ParseParameterAttrStatus::kParameterMissingGroups ;
0 commit comments