Add a warning for networks with in-place layers.

This commit is contained in:
2018-03-12 13:38:46 +01:00
parent 3cbf1a1281
commit f7f3eb5196

View File

@@ -33,6 +33,8 @@ struct Simulator::Impl
void computeLayerInfo();
void loadMeans(const string &means_file);
void ensureNoInPlaceLayers();
};
// Create simple forwarding functions.
@@ -50,6 +52,7 @@ Simulator::Impl::Impl(const string& model_file, const string& weights_file, cons
net(model_file, TEST)
{
net.CopyTrainedLayersFrom(weights_file);
ensureNoInPlaceLayers();
auto input_layer = net.input_blobs()[0];
input_geometry = cv::Size(input_layer->width(), input_layer->height());
@@ -206,6 +209,17 @@ void Simulator::Impl::computeLayerInfo()
}
}
void Simulator::Impl::ensureNoInPlaceLayers()
{
auto blobList = net.top_vecs();
typeof(blobList) uniqueVecs;
unique_copy(blobList.begin(), blobList.end(), back_inserter(uniqueVecs));
LOG_IF(ERROR, blobList.size() != uniqueVecs.size())
<< "Network file contains in-place layers, layer-state will not be accurate\n"
<< "If accurate results are desired, see the deinplace script in tools." << endl;
}
Simulator::~Simulator()
{
// Empty but defined constructor.