From 168af40fe9a3cc81c6ee16b3e81f154780c36bdb Mon Sep 17 00:00:00 2001 From: Scheaven <xuepengqiang> Date: 星期四, 03 六月 2021 15:03:27 +0800 Subject: [PATCH] up new v4 --- lib/detecter_tools/darknet/avgpool_layer.c | 142 +++++++++++++++++++++++----------------------- 1 files changed, 71 insertions(+), 71 deletions(-) diff --git a/lib/detecter_tools/darknet/avgpool_layer.c b/lib/detecter_tools/darknet/avgpool_layer.c index 64567cd..2b595aa 100644 --- a/lib/detecter_tools/darknet/avgpool_layer.c +++ b/lib/detecter_tools/darknet/avgpool_layer.c @@ -1,71 +1,71 @@ -#include "avgpool_layer.h" -#include "dark_cuda.h" -#include "utils.h" -#include <stdio.h> - -avgpool_layer make_avgpool_layer(int batch, int w, int h, int c) -{ - fprintf(stderr, "avg %4d x%4d x%4d -> %4d\n", w, h, c, c); - avgpool_layer l = { (LAYER_TYPE)0 }; - l.type = AVGPOOL; - l.batch = batch; - l.h = h; - l.w = w; - l.c = c; - l.out_w = 1; - l.out_h = 1; - l.out_c = c; - l.outputs = l.out_c; - l.inputs = h*w*c; - int output_size = l.outputs * batch; - l.output = (float*)xcalloc(output_size, sizeof(float)); - l.delta = (float*)xcalloc(output_size, sizeof(float)); - l.forward = forward_avgpool_layer; - l.backward = backward_avgpool_layer; - #ifdef GPU - l.forward_gpu = forward_avgpool_layer_gpu; - l.backward_gpu = backward_avgpool_layer_gpu; - l.output_gpu = cuda_make_array(l.output, output_size); - l.delta_gpu = cuda_make_array(l.delta, output_size); - #endif - return l; -} - -void resize_avgpool_layer(avgpool_layer *l, int w, int h) -{ - l->w = w; - l->h = h; - l->inputs = h*w*l->c; -} - -void forward_avgpool_layer(const avgpool_layer l, network_state state) -{ - int b,i,k; - - for(b = 0; b < l.batch; ++b){ - for(k = 0; k < l.c; ++k){ - int out_index = k + b*l.c; - l.output[out_index] = 0; - for(i = 0; i < l.h*l.w; ++i){ - int in_index = i + l.h*l.w*(k + b*l.c); - l.output[out_index] += state.input[in_index]; - } - l.output[out_index] /= l.h*l.w; - } - } -} - -void backward_avgpool_layer(const avgpool_layer l, network_state state) -{ - int b,i,k; - - for(b = 0; b < l.batch; ++b){ - for(k = 0; k < l.c; ++k){ - int out_index = k + b*l.c; - for(i = 0; i < l.h*l.w; ++i){ - int in_index = i + l.h*l.w*(k + b*l.c); - state.delta[in_index] += l.delta[out_index] / (l.h*l.w); - } - } - } -} +#include "avgpool_layer.h" +#include "dark_cuda.h" +#include "utils.h" +#include <stdio.h> + +avgpool_layer make_avgpool_layer(int batch, int w, int h, int c) +{ + fprintf(stderr, "avg %4d x%4d x%4d -> %4d\n", w, h, c, c); + avgpool_layer l = { (LAYER_TYPE)0 }; + l.type = AVGPOOL; + l.batch = batch; + l.h = h; + l.w = w; + l.c = c; + l.out_w = 1; + l.out_h = 1; + l.out_c = c; + l.outputs = l.out_c; + l.inputs = h*w*c; + int output_size = l.outputs * batch; + l.output = (float*)xcalloc(output_size, sizeof(float)); + l.delta = (float*)xcalloc(output_size, sizeof(float)); + l.forward = forward_avgpool_layer; + l.backward = backward_avgpool_layer; + #ifdef GPU + l.forward_gpu = forward_avgpool_layer_gpu; + l.backward_gpu = backward_avgpool_layer_gpu; + l.output_gpu = cuda_make_array(l.output, output_size); + l.delta_gpu = cuda_make_array(l.delta, output_size); + #endif + return l; +} + +void resize_avgpool_layer(avgpool_layer *l, int w, int h) +{ + l->w = w; + l->h = h; + l->inputs = h*w*l->c; +} + +void forward_avgpool_layer(const avgpool_layer l, network_state state) +{ + int b,i,k; + + for(b = 0; b < l.batch; ++b){ + for(k = 0; k < l.c; ++k){ + int out_index = k + b*l.c; + l.output[out_index] = 0; + for(i = 0; i < l.h*l.w; ++i){ + int in_index = i + l.h*l.w*(k + b*l.c); + l.output[out_index] += state.input[in_index]; + } + l.output[out_index] /= l.h*l.w; + } + } +} + +void backward_avgpool_layer(const avgpool_layer l, network_state state) +{ + int b,i,k; + + for(b = 0; b < l.batch; ++b){ + for(k = 0; k < l.c; ++k){ + int out_index = k + b*l.c; + for(i = 0; i < l.h*l.w; ++i){ + int in_index = i + l.h*l.w*(k + b*l.c); + state.delta[in_index] += l.delta[out_index] / (l.h*l.w); + } + } + } +} -- Gitblit v1.8.0