mirror of
https://github.com/openmv/openmv.git
synced 2025-11-04 14:49:50 +08:00
NN: Move output buffer to network struct.
This commit is contained in:
parent
1c0c8d744b
commit
5fba4c3ad9
@ -263,6 +263,8 @@ int nn_load_network(nn_t *net, const char *path)
|
|||||||
layer = layer->next;
|
layer = layer->next;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Alloc output buffer.
|
||||||
|
net->output_data = xalloc(net->output_size);
|
||||||
printf("Max layer: %lu Max col buf: %lu Max scratch buf: %lu Output size:%lu\n\n",
|
printf("Max layer: %lu Max col buf: %lu Max scratch buf: %lu Output size:%lu\n\n",
|
||||||
net->max_layer_size, net->max_colbuf_size, net->max_scrbuf_size, net->output_size);
|
net->max_layer_size, net->max_colbuf_size, net->max_scrbuf_size, net->output_size);
|
||||||
error:
|
error:
|
||||||
@ -328,7 +330,7 @@ void nn_transform_input(data_layer_t *data_layer, image_t *img, q7_t *input_data
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int nn_run_network(nn_t *net, image_t *img, int8_t *output_data)
|
int nn_run_network(nn_t *net, image_t *img)
|
||||||
{
|
{
|
||||||
uint32_t layer_idx = 0;
|
uint32_t layer_idx = 0;
|
||||||
layer_t *layer = net->layers;
|
layer_t *layer = net->layers;
|
||||||
@ -425,7 +427,7 @@ int nn_run_network(nn_t *net, image_t *img, int8_t *output_data)
|
|||||||
|
|
||||||
// Last layer
|
// Last layer
|
||||||
if (layer->next && layer->next->next == NULL) {
|
if (layer->next && layer->next->next == NULL) {
|
||||||
output_buffer = output_data;
|
output_buffer = net->output_data;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -440,7 +442,7 @@ int nn_run_network(nn_t *net, image_t *img, int8_t *output_data)
|
|||||||
(buffer == buffer1) ? "buffer1":\
|
(buffer == buffer1) ? "buffer1":\
|
||||||
(buffer == buffer2) ? "buffer2":\
|
(buffer == buffer2) ? "buffer2":\
|
||||||
(buffer == input_data) ? "input_data":\
|
(buffer == input_data) ? "input_data":\
|
||||||
(buffer == output_data) ? "output_data": "???"
|
(buffer == net->output_data) ? "output_data": "???"
|
||||||
|
|
||||||
#define CONV_FUNC_2STR(conv_func)\
|
#define CONV_FUNC_2STR(conv_func)\
|
||||||
(conv_func == arm_convolve_HWC_q7_basic) ? "arm_convolve_HWC_q7_basic" :\
|
(conv_func == arm_convolve_HWC_q7_basic) ? "arm_convolve_HWC_q7_basic" :\
|
||||||
@ -449,7 +451,7 @@ int nn_run_network(nn_t *net, image_t *img, int8_t *output_data)
|
|||||||
#define POOL_FUNC_2STR(pool_func)\
|
#define POOL_FUNC_2STR(pool_func)\
|
||||||
(pool_func == arm_maxpool_q7_HWC) ? "arm_maxpool_q7_HWC" : "arm_avepool_q7_HWC"
|
(pool_func == arm_maxpool_q7_HWC) ? "arm_maxpool_q7_HWC" : "arm_avepool_q7_HWC"
|
||||||
|
|
||||||
int nn_dry_run_network(nn_t *net, image_t *img, int8_t *output_data)
|
int nn_dry_run_network(nn_t *net, image_t *img)
|
||||||
{
|
{
|
||||||
uint32_t layer_idx = 0;
|
uint32_t layer_idx = 0;
|
||||||
layer_t *layer = net->layers;
|
layer_t *layer = net->layers;
|
||||||
@ -549,7 +551,7 @@ int nn_dry_run_network(nn_t *net, image_t *img, int8_t *output_data)
|
|||||||
|
|
||||||
// Last layer
|
// Last layer
|
||||||
if (layer->next && layer->next->next == NULL) {
|
if (layer->next && layer->next->next == NULL) {
|
||||||
output_buffer = output_data;
|
output_buffer = net->output_data;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -80,6 +80,7 @@ typedef struct {
|
|||||||
typedef struct {
|
typedef struct {
|
||||||
uint8_t type[4];
|
uint8_t type[4];
|
||||||
uint32_t n_layers;
|
uint32_t n_layers;
|
||||||
|
int8_t *output_data;
|
||||||
uint32_t output_size;
|
uint32_t output_size;
|
||||||
uint32_t max_layer_size;
|
uint32_t max_layer_size;
|
||||||
uint32_t max_colbuf_size;
|
uint32_t max_colbuf_size;
|
||||||
@ -99,6 +100,6 @@ typedef void (*pool_func_t)(q7_t * Im_in, const uint16_t dim_im_in, const uint16
|
|||||||
|
|
||||||
int nn_dump_network(nn_t *net);
|
int nn_dump_network(nn_t *net);
|
||||||
int nn_load_network(nn_t *net, const char *path);
|
int nn_load_network(nn_t *net, const char *path);
|
||||||
int nn_run_network(nn_t *net, image_t *img, int8_t *output);
|
int nn_run_network(nn_t *net, image_t *img);
|
||||||
int nn_dry_run_network(nn_t *net, image_t *img, int8_t *output);
|
int nn_dry_run_network(nn_t *net, image_t *img);
|
||||||
#endif //#define __CNN_H__
|
#endif //#define __CNN_H__
|
||||||
|
|||||||
@ -34,18 +34,17 @@ STATIC mp_obj_t py_net_forward(uint n_args, const mp_obj_t *args, mp_map_t *kw_a
|
|||||||
nn_t *net = py_net_cobj(args[0]);
|
nn_t *net = py_net_cobj(args[0]);
|
||||||
image_t *img = py_helper_arg_to_image_mutable(args[1]);
|
image_t *img = py_helper_arg_to_image_mutable(args[1]);
|
||||||
|
|
||||||
int8_t output_data[10]; //TODO alloc output buffer
|
|
||||||
mp_obj_t output_list = mp_obj_new_list(0, NULL);
|
mp_obj_t output_list = mp_obj_new_list(0, NULL);
|
||||||
bool dry_run = py_helper_keyword_int(n_args, args, 2, kw_args, MP_OBJ_NEW_QSTR(MP_QSTR_dry_run), false);
|
bool dry_run = py_helper_keyword_int(n_args, args, 2, kw_args, MP_OBJ_NEW_QSTR(MP_QSTR_dry_run), false);
|
||||||
|
|
||||||
if (dry_run == false) {
|
if (dry_run == false) {
|
||||||
nn_run_network(net, img, output_data);
|
nn_run_network(net, img);
|
||||||
} else {
|
} else {
|
||||||
nn_dry_run_network(net, img, output_data);
|
nn_dry_run_network(net, img);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i=0; i<10; i++) {
|
for (int i=0; i<net->output_size; i++) {
|
||||||
mp_obj_list_append(output_list, mp_obj_new_int(output_data[i]));
|
mp_obj_list_append(output_list, mp_obj_new_int(net->output_data[i]));
|
||||||
}
|
}
|
||||||
return output_list;
|
return output_list;
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user