- void run_detector(int argc, char **argv)
- void test_detector(char *datacfg, char *cfgfile, char *weightfile, char *filename, float thresh, float hier_thresh, int dont_show, int ext_output, int save_labels, char *outfile, int letter_box)
- float *network_predict(network net, float *input) 利用网络预测
- float *network_predict_gpu(network net, float *input) 使用GPU进行预测
- void forward_network_gpu(network net, network_state state) 前向网络
- float *get_network_output_gpu(network net) 获得网络输出
- 前向网络代码
void forward_network_gpu(network net, network_state state)
{
//cudaDeviceSynchronize();
//printf("\n");
state.workspace = net.workspace;
int i;
for(i = 0; i < net.n; ++i){
state.index = i;
layer l = net.layers[i];
if(l.delta_gpu && state.train){
fill_ongpu(l.outputs * l.batch, 0, l.delta_gpu, 1);
}
//printf("\n layer %d - type: %d - \n", i, l.type);
//start_timer();
l.forward_gpu(l, state);
//CHECK_CUDA(cudaDeviceSynchronize());
//stop_timer_and_show();
if(net.wait_stream)
cudaStreamSynchronize(get_cuda_stream());
state.input = l.output_gpu;
//cudaDeviceSynchronize();
/*
cuda_pull_array(l.output_gpu, l.output, l.batch*l.outputs);
if (l.out_w >= 0 && l.out_h >= 1 && l.c >= 3) {
int j;
for (j = 0; j < l.out_c; ++j) {
image img = make_image(l.out_w, l.out_h, 3);
memcpy(img.data, l.output + l.out_w*l.out_h*j, l.out_w*l.out_h * 1 * sizeof(float));
memcpy(img.data + l.out_w*l.out_h * 1, l.output + l.out_w*l.out_h*j, l.out_w*l.out_h * 1 * sizeof(float));
memcpy(img.data + l.out_w*l.out_h * 2, l.output + l.out_w*l.out_h*j, l.out_w*l.out_h * 1 * sizeof(float));
char buff[256];
sprintf(buff, "layer-%d slice-%d", i, j);
show_image(img, buff);
save_image(img, buff);
}
cvWaitKey(0); // wait press-key in console
cvDestroyAllWindows();
}
*/
}
//cudaStreamSynchronize(get_cuda_stream()); // sync CUDA-functions
//cudaDeviceSynchronize();
//show_total_time();
}
memcpy指的是C和C++使用的内存拷贝函数,函数原型为void *memcpy(void destin, void source, unsigned n);函数的功能是从源内存地址的起始位置开始拷贝若干个字节到目标内存地址中,即从源source中拷贝n个字节到目标destin中。
destin-- 指向用于存储复制内容的目标数组,类型强制转换为 void 指针。
source-- 指向要复制的数据源,类型强制转换为 void 指针。
n-- 要被复制的字节数。
获取网络中间输出结果
将上段代码中的注释取消掉就可以输出中间结果了