Commit 70c605a0 authored by Dmitry Kurtaev's avatar Dmitry Kurtaev

Limit Concat layer optimization

parent a8844de7
...@@ -1398,7 +1398,8 @@ struct Net::Impl ...@@ -1398,7 +1398,8 @@ struct Net::Impl
LayerPin pin = ld.inputBlobsId[i]; LayerPin pin = ld.inputBlobsId[i];
LayerData* inp_i_data = &layers[pin.lid]; LayerData* inp_i_data = &layers[pin.lid];
while(inp_i_data->skipFlags[DNN_BACKEND_DEFAULT] && while(inp_i_data->skipFlags[DNN_BACKEND_DEFAULT] &&
inp_i_data->inputBlobsId.size() == 1) inp_i_data->inputBlobsId.size() == 1 &&
inp_i_data->consumers.size() == 1)
{ {
pin = inp_i_data->inputBlobsId[0]; pin = inp_i_data->inputBlobsId[0];
inp_i_data = &layers[pin.lid]; inp_i_data = &layers[pin.lid];
...@@ -1428,15 +1429,11 @@ struct Net::Impl ...@@ -1428,15 +1429,11 @@ struct Net::Impl
Mat output_slice = output(chrange); Mat output_slice = output(chrange);
Mat& curr_output = inp_i_data->outputBlobs[pin.oid]; Mat& curr_output = inp_i_data->outputBlobs[pin.oid];
CV_Assert(output_slice.isContinuous() && output_slice.size == curr_output.size); CV_Assert(output_slice.isContinuous() && output_slice.size == curr_output.size);
Mat* oldPtr = &curr_output;
curr_output = output_slice; curr_output = output_slice;
// Layers that refer old input Mat will refer to the
pin = ld.inputBlobsId[i]; // new data but the same Mat object.
inp_i_data = &layers[pin.lid]; CV_Assert(curr_output.data == output_slice.data, oldPtr == &curr_output);
for (int j = 0; j < inp_i_data->consumers.size(); ++j)
{
LayerPin consumer = inp_i_data->consumers[j];
layers[consumer.lid].inputBlobs[consumer.oid] = &curr_output;
}
} }
ld.skipFlags[DNN_BACKEND_DEFAULT] = true; ld.skipFlags[DNN_BACKEND_DEFAULT] = true;
printf_(("\toptimized out Concat layer %s\n", concatLayer->name.c_str())); printf_(("\toptimized out Concat layer %s\n", concatLayer->name.c_str()));
......
...@@ -314,6 +314,7 @@ TEST(Layer_Test_Fused_Concat, Accuracy) ...@@ -314,6 +314,7 @@ TEST(Layer_Test_Fused_Concat, Accuracy)
// //
testLayerUsingCaffeModels("layer_concat_optim", DNN_TARGET_CPU, true, false); testLayerUsingCaffeModels("layer_concat_optim", DNN_TARGET_CPU, true, false);
testLayerUsingCaffeModels("layer_concat_shared_input", DNN_TARGET_CPU, true, false);
} }
TEST(Layer_Test_Eltwise, Accuracy) TEST(Layer_Test_Eltwise, Accuracy)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment