diff options
author | Inki Dae <inki.dae@samsung.com> | 2022-08-09 16:57:11 +0900 |
---|---|---|
committer | Inki Dae <inki.dae@samsung.com> | 2022-09-02 17:09:25 +0900 |
commit | 9e7d7880701b4106c76e97aff808539a60233dd2 (patch) | |
tree | d8904a2dd0998c810a236ad63ea822d1ff2ac19c | |
parent | 54f69e8b649ef17485f0afab1f6c8e82f574045c (diff) | |
download | mediavision-9e7d7880701b4106c76e97aff808539a60233dd2.tar.gz mediavision-9e7d7880701b4106c76e97aff808539a60233dd2.tar.bz2 mediavision-9e7d7880701b4106c76e97aff808539a60233dd2.zip |
mv_machine_learning: code cleanup to face recognition
[Issue type]: code cleanup
Cleaned up face recognition framework by doing,
- use override keyword for virtual functions.
- call functions of base class instead of derived one.
- drop unused declaration.
Change-Id: I0fc528e85d7248b01fd9a12d4b00ca16b1209697
Signed-off-by: Inki Dae <inki.dae@samsung.com>
8 files changed, 46 insertions, 42 deletions
diff --git a/mv_machine_learning/face_recognition/include/backbone_model_info.h b/mv_machine_learning/face_recognition/include/backbone_model_info.h index 9756449b..b2164ff7 100644 --- a/mv_machine_learning/face_recognition/include/backbone_model_info.h +++ b/mv_machine_learning/face_recognition/include/backbone_model_info.h @@ -24,13 +24,13 @@ typedef struct { inference_engine_tensor_info tensor_info; } model_layer_info; -class BackboneModelInfo { +class IBackboneModelInfo { public: - BackboneModelInfo(std::string model_file_path) { } - virtual ~BackboneModelInfo() { } + virtual ~IBackboneModelInfo() { } - virtual std::vector<model_layer_info>& GetInputLayerInfo() { return GetInputLayerInfo(); } - virtual std::vector<model_layer_info>& GetOutputLayerInfo() { return GetOutputLayerInfo(); } + virtual std::vector<model_layer_info>& GetInputLayerInfo() = 0; + virtual std::vector<model_layer_info>& GetOutputLayerInfo() = 0; + virtual std::string GetModelFilePath() = 0; }; #endif
\ No newline at end of file diff --git a/mv_machine_learning/face_recognition/include/face_net_info.h b/mv_machine_learning/face_recognition/include/face_net_info.h index ee27ee1d..e2cf317a 100644 --- a/mv_machine_learning/face_recognition/include/face_net_info.h +++ b/mv_machine_learning/face_recognition/include/face_net_info.h @@ -19,7 +19,7 @@ #include "backbone_model_info.h" -class FaceNetInfo : public BackboneModelInfo { +class FaceNetInfo : public IBackboneModelInfo { private: std::vector<model_layer_info> _input_layer_info; std::vector<model_layer_info> _output_layer_info; @@ -29,9 +29,9 @@ public: FaceNetInfo(std::string model_file_path); ~FaceNetInfo(); - std::string GetModelFilePath(); - std::vector<model_layer_info>& GetInputLayerInfo(); - std::vector<model_layer_info>& GetOutputLayerInfo(); + std::vector<model_layer_info>& GetInputLayerInfo() override; + std::vector<model_layer_info>& GetOutputLayerInfo() override; + std::string GetModelFilePath() override; }; #endif
\ No newline at end of file diff --git a/mv_machine_learning/face_recognition/include/face_recognition.h b/mv_machine_learning/face_recognition/include/face_recognition.h index a2394717..47e75301 100644 --- a/mv_machine_learning/face_recognition/include/face_recognition.h +++ b/mv_machine_learning/face_recognition/include/face_recognition.h @@ -26,7 +26,7 @@ #include "inference_engine_common_impl.h" #include "Inference.h" #include "label_manager.h" -#include "face_net_info.h" +#include "backbone_model_info.h" #include "simple_shot.h" #include "data_augment_default.h" #include "data_augment_flip.h" @@ -95,9 +95,16 @@ typedef struct { class FaceRecognition { private: + unsigned int _status; + std::unique_ptr<mediavision::inference::Inference> _internal; + std::unique_ptr<mediavision::inference::Inference> _backbone; + std::unique_ptr<IBackboneModelInfo> _backbone_model_info; + std::unique_ptr<TrainingModel> _training_model; + std::unique_ptr<LabelManager> _label_manager; FaceRecognitionConfig _config; - std::vector<std::unique_ptr<DataAugment>> _data_augments; mv_face_recognition_result_s _result; + std::vector<std::unique_ptr<DataAugment>> _data_augments; + // FYI. This function should be called every time a new face is registered. void ImportLabel(); @@ -110,14 +117,6 @@ private: std::vector<model_layer_info>& GetBackboneInputLayerInfo(); int GetVecFromMvSource(mv_source_h img_src, std::vector<float>& out_vec); -protected: - unsigned int _status; - std::unique_ptr<mediavision::inference::Inference> _internal; - std::unique_ptr<mediavision::inference::Inference> _backbone; - std::unique_ptr<FaceNetInfo> _face_net_info; - std::unique_ptr<TrainingModel> _training_model; - std::unique_ptr<LabelManager> _label_manager; - public: FaceRecognition(); ~ FaceRecognition(); diff --git a/mv_machine_learning/face_recognition/include/face_recognition_adapter.h b/mv_machine_learning/face_recognition/include/face_recognition_adapter.h index b4ab9faf..97cebbfc 100644 --- a/mv_machine_learning/face_recognition/include/face_recognition_adapter.h +++ b/mv_machine_learning/face_recognition/include/face_recognition_adapter.h @@ -77,11 +77,11 @@ public: return _config; } - void configure(); - void prepare(); - void setInput(T& t); - void perform(); - V& getOutput(); + void configure() override; + void prepare() override; + void setInput(T& t) override; + void perform() override; + V& getOutput() override; }; } // machine_learning diff --git a/mv_machine_learning/face_recognition/include/simple_shot.h b/mv_machine_learning/face_recognition/include/simple_shot.h index 145ac15d..d2e025d8 100644 --- a/mv_machine_learning/face_recognition/include/simple_shot.h +++ b/mv_machine_learning/face_recognition/include/simple_shot.h @@ -24,8 +24,8 @@ class SimpleShot : public TrainingModel { private: TrainingEngineBackendInfo _engine_info; private: - void SaveModel(const std::string file_path); - void RemoveModel(const std::string file_path); + void SaveModel(const std::string file_path) override; + void RemoveModel(const std::string file_path) override; public: SimpleShot(const mv_inference_backend_type_e backend_type = MV_INFERENCE_BACKEND_NNTRAINER, const mv_inference_target_device_e target_type = MV_INFERENCE_TARGET_DEVICE_CPU, @@ -33,9 +33,8 @@ public: ~SimpleShot(); // Configure layers for SimpleShot learning. - void ConfigureModel(int num_of_class); - - TrainingEngineBackendInfo& GetTrainingEngineInfo() { return _engine_info; } + void ConfigureModel(int num_of_class) override; + TrainingEngineBackendInfo& GetTrainingEngineInfo() override; }; #endif
\ No newline at end of file diff --git a/mv_machine_learning/face_recognition/src/face_net_info.cpp b/mv_machine_learning/face_recognition/src/face_net_info.cpp index 2059af29..8224787b 100644 --- a/mv_machine_learning/face_recognition/src/face_net_info.cpp +++ b/mv_machine_learning/face_recognition/src/face_net_info.cpp @@ -18,7 +18,7 @@ using namespace std; -FaceNetInfo::FaceNetInfo(string model_file_path) : BackboneModelInfo(model_file_path) +FaceNetInfo::FaceNetInfo(string model_file_path) { _model_file_path = model_file_path; diff --git a/mv_machine_learning/face_recognition/src/face_recognition.cpp b/mv_machine_learning/face_recognition/src/face_recognition.cpp index 8a6505c7..5f21116a 100644 --- a/mv_machine_learning/face_recognition/src/face_recognition.cpp +++ b/mv_machine_learning/face_recognition/src/face_recognition.cpp @@ -31,6 +31,7 @@ #include "face_recognition.h" #include "nntrainer_fvm.h" #include "nntrainer_dsm.h" +#include "face_net_info.h" #include "file_util.h" using namespace std; @@ -45,7 +46,7 @@ namespace machine_learning { FaceRecognition::FaceRecognition() : - _status(NONE), _internal(), _backbone(), _face_net_info(), _training_model(), _label_manager() + _status(NONE), _internal(), _backbone(), _backbone_model_info(), _training_model(), _label_manager(), _config(), _result() { _data_augments.push_back(std::make_unique<DataAugmentDefault>()); /* Add other data argument classes. */ @@ -193,7 +194,7 @@ void FaceRecognition::SetConfig(FaceRecognitionConfig& config) std::vector<model_layer_info>& FaceRecognition::GetBackboneInputLayerInfo() { - return _face_net_info->GetInputLayerInfo(); + return _backbone_model_info->GetInputLayerInfo(); } int FaceRecognition::GetVecFromMvSource(mv_source_h img_src, std::vector<float>& out_vec) @@ -229,14 +230,14 @@ int FaceRecognition::GetVecFromMvSource(mv_source_h img_src, std::vector<float>& int FaceRecognition::Initialize() { - _face_net_info = make_unique<FaceNetInfo>(_config.backbone_model_file_path); + _backbone_model_info = make_unique<FaceNetInfo>(_config.backbone_model_file_path); - if (_face_net_info->GetInputLayerInfo().empty() || _face_net_info->GetInputLayerInfo().size() > 1) { + if (_backbone_model_info->GetInputLayerInfo().empty() || _backbone_model_info->GetInputLayerInfo().size() > 1) { LOGE("Invalid input layer size - input layer size should be 1."); return MEDIA_VISION_ERROR_INVALID_PARAMETER; } - if (_face_net_info->GetOutputLayerInfo().empty() || _face_net_info->GetOutputLayerInfo().size() > 1) { + if (_backbone_model_info->GetOutputLayerInfo().empty() || _backbone_model_info->GetOutputLayerInfo().size() > 1) { LOGE("Invalid output layer size - output layer size should be 1."); return MEDIA_VISION_ERROR_INVALID_PARAMETER; } @@ -244,12 +245,12 @@ int FaceRecognition::Initialize() vector<string> input_layer_names, output_layer_names; vector<inference_engine_tensor_info> input_tensor_info, output_tensor_info; - for (auto& input : _face_net_info->GetInputLayerInfo()) { + for (auto& input : _backbone_model_info->GetInputLayerInfo()) { input_layer_names.push_back(input.layer_name); input_tensor_info.push_back(input.tensor_info); } - for (auto& output : _face_net_info->GetOutputLayerInfo()) { + for (auto& output : _backbone_model_info->GetOutputLayerInfo()) { output_layer_names.push_back(output.layer_name); output_tensor_info.push_back(output.tensor_info); } @@ -269,7 +270,7 @@ int FaceRecognition::Initialize() _backbone->ConfigureInputInfo(width, height, 1, ch, 127.5f, 127.5f, MV_INFERENCE_DATA_FLOAT32, input_layer_names); _backbone->ConfigureOutputInfo(output_layer_names, output_tensor_info); - _backbone->ConfigureModelFiles("", _face_net_info->GetModelFilePath(), ""); + _backbone->ConfigureModelFiles("", _backbone_model_info->GetModelFilePath(), ""); ret = _backbone->Load(); if (ret != MEDIA_VISION_ERROR_NONE) @@ -310,7 +311,7 @@ void FaceRecognition::ImportLabel() int FaceRecognition::RegisterNewFace(mv_source_h img_src, string label_name) { - vector<model_layer_info>& output_layer_info = _face_net_info->GetOutputLayerInfo(); + vector<model_layer_info>& output_layer_info = _backbone_model_info->GetOutputLayerInfo(); if (_status < INITIALIZED) { LOGE("Initialization not ready yet. (%u)", _status); @@ -445,12 +446,12 @@ int FaceRecognition::RecognizeFace(mv_source_h img_src) // Import label data from a label file. ImportLabel(); - if (_face_net_info->GetInputLayerInfo().empty() || _face_net_info->GetInputLayerInfo().size() > 1) { + if (_backbone_model_info->GetInputLayerInfo().empty() || _backbone_model_info->GetInputLayerInfo().size() > 1) { LOGE("Invalid input layer size - input layer size should be 1."); return MEDIA_VISION_ERROR_INVALID_PARAMETER; } - if (_face_net_info->GetOutputLayerInfo().empty() || _face_net_info->GetOutputLayerInfo().size() > 1) { + if (_backbone_model_info->GetOutputLayerInfo().empty() || _backbone_model_info->GetOutputLayerInfo().size() > 1) { LOGE("Invalid output layer size - output layer size should be 1."); return MEDIA_VISION_ERROR_INVALID_PARAMETER; } @@ -466,7 +467,7 @@ int FaceRecognition::RecognizeFace(mv_source_h img_src) } // Get output layer info for facenet model. - vector<model_layer_info>& output_layer_info = _face_net_info->GetOutputLayerInfo(); + vector<model_layer_info>& output_layer_info = _backbone_model_info->GetOutputLayerInfo(); // Get output tensor buffer to the output layer. inference_engine_tensor_buffer *backbone_output_buffer = _backbone->GetOutputTensorBuffer(output_layer_info[0].layer_name); if (!backbone_output_buffer) { diff --git a/mv_machine_learning/face_recognition/src/simple_shot.cpp b/mv_machine_learning/face_recognition/src/simple_shot.cpp index c3a5ff89..d4603640 100644 --- a/mv_machine_learning/face_recognition/src/simple_shot.cpp +++ b/mv_machine_learning/face_recognition/src/simple_shot.cpp @@ -118,6 +118,11 @@ void SimpleShot::ConfigureModel(int num_of_class) throw InvalidOperation("Fail to add knn layer."); } +TrainingEngineBackendInfo& SimpleShot::GetTrainingEngineInfo() +{ + return _engine_info; +} + void SimpleShot::SaveModel(const string file_path) { string bin_file_path = file_path.substr(0, file_path.find('.')) + ".bin"; |