From 9e7d7880701b4106c76e97aff808539a60233dd2 Mon Sep 17 00:00:00 2001 From: Inki Dae Date: Tue, 9 Aug 2022 16:57:11 +0900 Subject: [PATCH] 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 --- .../face_recognition/include/backbone_model_info.h | 10 ++++----- .../face_recognition/include/face_net_info.h | 8 +++---- .../face_recognition/include/face_recognition.h | 19 ++++++++-------- .../include/face_recognition_adapter.h | 10 ++++----- .../face_recognition/include/simple_shot.h | 9 ++++---- .../face_recognition/src/face_net_info.cpp | 2 +- .../face_recognition/src/face_recognition.cpp | 25 +++++++++++----------- .../face_recognition/src/simple_shot.cpp | 5 +++++ 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 9756449..b2164ff 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& GetInputLayerInfo() { return GetInputLayerInfo(); } - virtual std::vector& GetOutputLayerInfo() { return GetOutputLayerInfo(); } + virtual std::vector& GetInputLayerInfo() = 0; + virtual std::vector& 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 ee27ee1..e2cf317 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 _input_layer_info; std::vector _output_layer_info; @@ -29,9 +29,9 @@ public: FaceNetInfo(std::string model_file_path); ~FaceNetInfo(); - std::string GetModelFilePath(); - std::vector& GetInputLayerInfo(); - std::vector& GetOutputLayerInfo(); + std::vector& GetInputLayerInfo() override; + std::vector& 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 a239471..47e7530 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 _internal; + std::unique_ptr _backbone; + std::unique_ptr _backbone_model_info; + std::unique_ptr _training_model; + std::unique_ptr _label_manager; FaceRecognitionConfig _config; - std::vector> _data_augments; mv_face_recognition_result_s _result; + std::vector> _data_augments; + // FYI. This function should be called every time a new face is registered. void ImportLabel(); @@ -110,14 +117,6 @@ private: std::vector& GetBackboneInputLayerInfo(); int GetVecFromMvSource(mv_source_h img_src, std::vector& out_vec); -protected: - unsigned int _status; - std::unique_ptr _internal; - std::unique_ptr _backbone; - std::unique_ptr _face_net_info; - std::unique_ptr _training_model; - std::unique_ptr _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 b4ab9fa..97cebbf 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 145ac15..d2e025d 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 2059af2..8224787 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 8a6505c..5f21116 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()); /* Add other data argument classes. */ @@ -193,7 +194,7 @@ void FaceRecognition::SetConfig(FaceRecognitionConfig& config) std::vector& FaceRecognition::GetBackboneInputLayerInfo() { - return _face_net_info->GetInputLayerInfo(); + return _backbone_model_info->GetInputLayerInfo(); } int FaceRecognition::GetVecFromMvSource(mv_source_h img_src, std::vector& out_vec) @@ -229,14 +230,14 @@ int FaceRecognition::GetVecFromMvSource(mv_source_h img_src, std::vector& int FaceRecognition::Initialize() { - _face_net_info = make_unique(_config.backbone_model_file_path); + _backbone_model_info = make_unique(_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 input_layer_names, output_layer_names; vector 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& output_layer_info = _face_net_info->GetOutputLayerInfo(); + vector& 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& output_layer_info = _face_net_info->GetOutputLayerInfo(); + vector& 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 c3a5ff8..d460364 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"; -- 2.7.4