summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorInki Dae <inki.dae@samsung.com>2022-08-09 16:57:11 +0900
committerInki Dae <inki.dae@samsung.com>2022-09-02 17:09:25 +0900
commit9e7d7880701b4106c76e97aff808539a60233dd2 (patch)
treed8904a2dd0998c810a236ad63ea822d1ff2ac19c
parent54f69e8b649ef17485f0afab1f6c8e82f574045c (diff)
downloadmediavision-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>
-rw-r--r--mv_machine_learning/face_recognition/include/backbone_model_info.h10
-rw-r--r--mv_machine_learning/face_recognition/include/face_net_info.h8
-rw-r--r--mv_machine_learning/face_recognition/include/face_recognition.h19
-rw-r--r--mv_machine_learning/face_recognition/include/face_recognition_adapter.h10
-rw-r--r--mv_machine_learning/face_recognition/include/simple_shot.h9
-rw-r--r--mv_machine_learning/face_recognition/src/face_net_info.cpp2
-rw-r--r--mv_machine_learning/face_recognition/src/face_recognition.cpp25
-rw-r--r--mv_machine_learning/face_recognition/src/simple_shot.cpp5
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";