NN: Move output buffer to network struct.

This commit is contained in:
iabdalkader 2018-05-29 17:57:56 +02:00
parent 1c0c8d744b
commit 5fba4c3ad9
3 changed files with 14 additions and 12 deletions

View File

@ -263,6 +263,8 @@ int nn_load_network(nn_t *net, const char *path)
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",
net->max_layer_size, net->max_colbuf_size, net->max_scrbuf_size, net->output_size);
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;
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
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 == buffer2) ? "buffer2":\
(buffer == input_data) ? "input_data":\
(buffer == output_data) ? "output_data": "???"
(buffer == net->output_data) ? "output_data": "???"
#define CONV_FUNC_2STR(conv_func)\
(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)\
(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;
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
if (layer->next && layer->next->next == NULL) {
output_buffer = output_data;
output_buffer = net->output_data;
}
}

View File

@ -80,6 +80,7 @@ typedef struct {
typedef struct {
uint8_t type[4];
uint32_t n_layers;
int8_t *output_data;
uint32_t output_size;
uint32_t max_layer_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_load_network(nn_t *net, const char *path);
int nn_run_network(nn_t *net, image_t *img, int8_t *output);
int nn_dry_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);
#endif //#define __CNN_H__

View File

@ -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]);
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);
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) {
nn_run_network(net, img, output_data);
nn_run_network(net, img);
} else {
nn_dry_run_network(net, img, output_data);
nn_dry_run_network(net, img);
}
for (int i=0; i<10; i++) {
mp_obj_list_append(output_list, mp_obj_new_int(output_data[i]));
for (int i=0; i<net->output_size; i++) {
mp_obj_list_append(output_list, mp_obj_new_int(net->output_data[i]));
}
return output_list;
}