// Tencent is pleased to support the open source community by making ncnn available. // // Copyright (C) 2017 THL A29 Limited, a Tencent company. All rights reserved. // // Licensed under the BSD 3-Clause License (the "License"); you may not use this file except // in compliance with the License. You may obtain a copy of the License at // // https://opensource.org/licenses/BSD-3-Clause // // Unless required by applicable law or agreed to in writing, software distributed // under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR // CONDITIONS OF ANY KIND, either express or implied. See the License for the // specific language governing permissions and limitations under the License. #include #include #include #include #include #include "platform.h" #include "net.h" #if NCNN_VULKAN #include "gpu.h" #endif // NCNN_VULKAN static int detect_squeezenet(const cv::Mat& bgr, std::vector& cls_scores) { ncnn::Net squeezenet; #if NCNN_VULKAN squeezenet.opt.use_vulkan_compute = true; #endif // NCNN_VULKAN squeezenet.load_param("squeezenet_v1.1.param"); squeezenet.load_model("squeezenet_v1.1.bin"); ncnn::Mat in = ncnn::Mat::from_pixels_resize(bgr.data, ncnn::Mat::PIXEL_BGR, bgr.cols, bgr.rows, 227, 227); const float mean_vals[3] = {104.f, 117.f, 123.f}; in.substract_mean_normalize(mean_vals, 0); ncnn::Extractor ex = squeezenet.create_extractor(); ex.input("data", in); ncnn::Mat out; ex.extract("prob", out); cls_scores.resize(out.w); for (int j=0; j& cls_scores, int topk) { // partial sort topk with index int size = cls_scores.size(); std::vector< std::pair > vec; vec.resize(size); for (int i=0; i >()); // print topk and score for (int i=0; i cls_scores; detect_squeezenet(m, cls_scores); #if NCNN_VULKAN ncnn::destroy_gpu_instance(); #endif // NCNN_VULKAN print_topk(cls_scores, 3); return 0; }