yolo layers

This commit is contained in:
Francesco Gatti
2017-08-01 16:08:56 +02:00
parent 8e4b3c6c17
commit b94931f9f7
21 changed files with 522 additions and 84 deletions
+62
View File
@@ -0,0 +1,62 @@
#include <iostream>
#include "Layer.h"
#include "kernels.h"
namespace tkDNN {
Route::Route(Network *net, int *layers_id, int layers_n) :
Layer(net, dataDim_t()) {
this->layers_n = layers_n;
//get layers
layers = new Layer*[layers_n];
for(int i=0; i<layers_n; i++)
layers[i] = net->layers[layers_id[i]];
//get dims
output_dim.l = 1;
output_dim.c = 0;
for(int i=0; i<layers_n; i++) {
if(i==0) {
output_dim.w = layers[i]->output_dim.w;
output_dim.h = layers[i]->output_dim.h;
} else {
if( layers[i]->output_dim.w != output_dim.w ||
layers[i]->output_dim.h != output_dim.h )
FatalError("Route Output dim missmatch");
}
output_dim.c += layers[i]->output_dim.c;
}
input_dim = output_dim;
checkCuda( cudaMalloc(&dstData, output_dim.tot()*sizeof(value_type)) );
}
Route::~Route() {
checkCuda( cudaFree(dstData) );
}
value_type* Route::infer(dataDim_t &dim, value_type* srcData) {
int offset = 0;
for(int i=0; i<layers_n; i++) {
value_type *input = layers[i]->dstData;
int in_dim = layers[i]->input_dim.tot();
checkCuda( cudaMemcpy(dstData + offset, input, in_dim*sizeof(value_type), cudaMemcpyDeviceToDevice));
offset += in_dim;
}
//update data dimensions
dim = output_dim;
return dstData;
}
}