YOLO3检测调用函数流程plus获取网络中间输出结果

  1. void run_detector(int argc, char **argv)
  2. 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)
  3. float *network_predict(network net, float *input) 利用网络预测
  4. float *network_predict_gpu(network net, float *input) 使用GPU进行预测
  5. void forward_network_gpu(network net, network_state state) 前向网络
  6. float *get_network_output_gpu(network net) 获得网络输出
  7. 前向网络代码
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-- 要被复制的字节数。

获取网络中间输出结果

将上段代码中的注释取消掉就可以输出中间结果了
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值