赞
踩
Code
#include <opencv2\opencv.hpp> #include <map> #include <vector> #include <algorithm> #include <functional> #include <cstdlib> #include <iostream> #include <stdio.h> #include <stdlib.h> #include <net.h> static int detect_squeezenet(const cv::Mat& bgr, std::vector<float>& cls_scores) { ncnn::Net squeezenet; // 声明一个类,这里是一个模型,但是怎么知道模型的结构呢? squeezenet.load_param("D:/profile/ncnn-20200226/examples/squeezenet_v1.1.param"); // 和darknet一样,读取一个配置文件来建立模型darknet中net, layer都是struct squeezenet.load_model("D:/profile/ncnn-20200226/examples/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<out.w; j++) { cls_scores[j] = out[j]; // 放入容器 } return 0; } static int print_topk(const std::vector<float>& cls_scores, int topk) { // partial sort topk with index int size = cls_scores.size(); std::vector< std::pair<float, int> > vec; // 声明一个pair容器 vec.resize(size); for (int i = 0; i<size; i++) { vec[i] = std::make_pair(cls_scores[i], i); // 向容器内写入数据 } std::partial_sort(vec.begin(), vec.begin() + topk, vec.end(), // 部分排序算法,只要topk的 // 返回一个当前vector容器中起始元素的迭代器 std::greater< std::pair<float, int> >()); // greator,降序排列,应该是使用第一个float // print topk and score for (int i = 0; i<topk; i++) { float score = vec[i].first; int index = vec[i].second; fprintf(stderr, "%d = %f\n", index, score); } return 0; } int main() { std::string imagepath = "./demo_image/test.jpg"; cv::Mat m = cv::imread(imagepath, CV_LOAD_IMAGE_COLOR); if (m.empty()) { std::cout << "cv::imread " << imagepath << " failed\n" << std::endl; return -1; } std::vector<float> cls_scores; detect_squeezenet(m, cls_scores); // 加载模型,推理,将推理结果放入cls_scores print_topk(cls_scores, 3); // 打印前三高的分数 getchar(); return 0; }
知识点
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。