From 36b1553f737386ce27c104b198cf979c1a32db0e Mon Sep 17 00:00:00 2001 From: J Yegerlehner Date: Wed, 19 Nov 2014 17:30:46 -0600 Subject: [PATCH 1/2] Load weights from multiple caffemodels. --- tools/caffe.cpp | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/tools/caffe.cpp b/tools/caffe.cpp index 9f9d975dfba..cacd8be08e6 100644 --- a/tools/caffe.cpp +++ b/tools/caffe.cpp @@ -5,6 +5,7 @@ #include #include +#include "boost/algorithm/string.hpp" #include "caffe/caffe.hpp" using caffe::Blob; @@ -76,6 +77,19 @@ int device_query() { } RegisterBrewFunction(device_query); +// Load the weights from the specified caffemodel(s) into the train- and +// test-nets. +void CopyLayers(caffe::Solver& solver, const std::string& model_list) { + std::vector model_names; + boost::split(model_names, model_list, boost::is_any_of(",") ); + for(int i = 0; i < model_names.size(); ++i) { + LOG(INFO) << "Finetuning from " << model_names[i]; + solver.net()->CopyTrainedLayersFrom(model_names[i]); + for( int j = 0; j < solver.test_nets().size(); ++j ) { + solver.test_nets()[j]->CopyTrainedLayersFrom(model_names[i]); + } + } +} // Train / Finetune a model. int train() { @@ -112,8 +126,7 @@ int train() { LOG(INFO) << "Resuming from " << FLAGS_snapshot; solver->Solve(FLAGS_snapshot); } else if (FLAGS_weights.size()) { - LOG(INFO) << "Finetuning from " << FLAGS_weights; - solver->net()->CopyTrainedLayersFrom(FLAGS_weights); + CopyLayers(*solver, FLAGS_weights); solver->Solve(); } else { solver->Solve(); From 3fd08b5888b21887259d014c5d5d94b87bbd6541 Mon Sep 17 00:00:00 2001 From: J Yegerlehner Date: Wed, 19 Nov 2014 20:33:10 -0600 Subject: [PATCH 2/2] Fix more lint. --- tools/caffe.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/tools/caffe.cpp b/tools/caffe.cpp index cacd8be08e6..fa20a1c2698 100644 --- a/tools/caffe.cpp +++ b/tools/caffe.cpp @@ -79,14 +79,14 @@ RegisterBrewFunction(device_query); // Load the weights from the specified caffemodel(s) into the train- and // test-nets. -void CopyLayers(caffe::Solver& solver, const std::string& model_list) { +void CopyLayers(caffe::Solver* solver, const std::string& model_list) { std::vector model_names; boost::split(model_names, model_list, boost::is_any_of(",") ); - for(int i = 0; i < model_names.size(); ++i) { + for (int i = 0; i < model_names.size(); ++i) { LOG(INFO) << "Finetuning from " << model_names[i]; - solver.net()->CopyTrainedLayersFrom(model_names[i]); - for( int j = 0; j < solver.test_nets().size(); ++j ) { - solver.test_nets()[j]->CopyTrainedLayersFrom(model_names[i]); + solver->net()->CopyTrainedLayersFrom(model_names[i]); + for (int j = 0; j < solver->test_nets().size(); ++j) { + solver->test_nets()[j]->CopyTrainedLayersFrom(model_names[i]); } } } @@ -126,7 +126,7 @@ int train() { LOG(INFO) << "Resuming from " << FLAGS_snapshot; solver->Solve(FLAGS_snapshot); } else if (FLAGS_weights.size()) { - CopyLayers(*solver, FLAGS_weights); + CopyLayers(&*solver, FLAGS_weights); solver->Solve(); } else { solver->Solve();