Skip to content

Commit b054727

Browse files
update nnom middleware
1 parent f89287a commit b054727

File tree

1 file changed

+17
-27
lines changed

1 file changed

+17
-27
lines changed

src/embedded_ml_sdk/classifiers/nnom_middleware/nnom_middleware.c

Lines changed: 17 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -25,31 +25,28 @@ License along with SensiML Piccolo AI. If not, see <https://www.gnu.org/licenses
2525

2626
float results[NNOM_MAX_NUMBER_REULTS];
2727

28-
nnom_classifier_rows_t *nnom_classifier_rows;
28+
nnom_classifier_rows_t *nnom_classifier_rows_table;
2929
float probability;
3030
int32_t label;
3131

32-
int last_nnom_initialized = 0;
33-
nnom_model_t* model;
32+
static bool last_nnom_initialized = false;
33+
3434
uint8_t nnom_simple_submit(uint8_t classifier_id, feature_vector_t *feature_vector, model_results_t *model_results)
3535
{
3636
uint8_t y = 1;
3737
float max_result = 0;
38-
feature_vector_data = (int8_t*)feature_vector->data;
38+
uint8_t* feature_vector_data = (uint8_t*)feature_vector->data;
3939

40-
/*if (last_nnom_initialized != classifier_id)
41-
{
42-
model = nnom_model_create();
43-
//nnom_classifier_rows[0].model=model
44-
last_nnom_initialized = classifier_id;
40+
if (!last_nnom_initialized){
41+
nnom_classifier_rows_table[classifier_id].model=nnom_model_create();
42+
last_nnom_initialized=true;
4543
}
46-
*/
47-
4844
for (int i=0; i<feature_vector->size; i++){
4945

50-
nnom_input_data[i]=feature_vector_data[i]
46+
nnom_input_data[i]=(int8_t)((int)feature_vector_data[i]-127);
5147
}
52-
nnom_predict(nnom_classifier_rows[classifier_id].model, &label, &probability);
48+
49+
nnom_predict(nnom_classifier_rows_table[classifier_id].model, &label, results);
5350

5451

5552
// regression
@@ -58,39 +55,32 @@ uint8_t nnom_simple_submit(uint8_t classifier_id, feature_vector_t *feature_vect
5855
return (uint8_t)label;
5956
}
6057

61-
// classification
62-
/*
58+
6359
max_result = results[0];
64-
model_results->output_tensor->data[0] = (int16_t)results[0];
65-
for (int32_t i = 1; i < nnom_classifier_rows[classifier_id].num_outputs; i++)
60+
model_results->output_tensor->data[0] = results[0];
61+
for (int32_t i = 1; i < nnom_classifier_rows_table[classifier_id].num_outputs; i++)
6662
{
6763
if (results[i] > max_result)
6864
{
6965
max_result = results[i];
7066
y = i + 1;
7167
}
72-
model_results->output_tensor->data[i] = (int16_t)results[i];
68+
model_results->output_tensor->data[i] = results[i];
7369
}
7470

7571

76-
if (max_result < nnom_classifier_rows[classifier_id].threshold)
72+
if (max_result < nnom_classifier_rows_table[classifier_id].threshold)
7773
{
7874
model_results->result = 0.0f;
7975
return 0;
8076
}
8177

82-
*/
83-
model_results->result = (float)label;
84-
85-
return (float)label;
78+
return (uint8_t)model_results->result;
8679
}
8780

8881
void nnom_init(nnom_classifier_rows_t *classifier_table, const uint8_t num_classifiers)
8982
{
90-
model = nnom_model_create();
91-
nnom_classifier_rows = classifier_table;
92-
nnom_classifier_rows[0].model=model;
93-
last_nnom_initialized=0;
83+
nnom_classifier_rows_table = classifier_table;
9484

9585
}
9686

0 commit comments

Comments
 (0)