Closed qinxianyuzi closed 5 years ago
代码如下: const char* imagepath = "1.jpg";// argv[1]; cv::Mat m = cv::imread(imagepath, CV_LOAD_IMAGE_COLOR); while (true) { ncnn::create_gpu_instance(); std::vector cls_scores; ncnn::Net squeezenet; squeezenet.use_vulkan_compute = 1; squeezenet.load_param("mobilenet2.param"); squeezenet.load_model("mobilenet2.bin");
ncnn::Extractor ex = squeezenet.create_extractor(); ex.set_light_mode(true); ex.set_num_threads(1); ncnn::Mat in = ncnn::Mat::from_pixels_resize(m.data, ncnn::Mat::PIXEL_BGR, m.cols, m.rows, 96, 112); ex.input("data", in); ncnn::Mat out; ex.extract("prob", out); ncnn::destroy_gpu_instance(); } system("pause"); return 0;
程序跑完第一轮直接奔溃,无法循环第二次。而我把ncnn::Net squeezenet; 到ex.extract("prob", out);封装到一个函数里面,却可以循环,但内存会泄漏。有人遇到这样的情况吗?谢谢
ncnn::create_gpu_instance(); ncnn::destroy_gpu_instance();
这是全局调用一次的接口,不要放在循环里反复调用 ncnn::Net 析构必须在 ncnn::destroy_gpu_instance() 之前完成
@nihui 了解了,谢谢
代码如下: const char* imagepath = "1.jpg";// argv[1]; cv::Mat m = cv::imread(imagepath, CV_LOAD_IMAGE_COLOR); while (true) { ncnn::create_gpu_instance(); std::vector cls_scores;
ncnn::Net squeezenet;
squeezenet.use_vulkan_compute = 1;
squeezenet.load_param("mobilenet2.param");
squeezenet.load_model("mobilenet2.bin");
程序跑完第一轮直接奔溃,无法循环第二次。而我把ncnn::Net squeezenet; 到ex.extract("prob", out);封装到一个函数里面,却可以循环,但内存会泄漏。有人遇到这样的情况吗?谢谢