当前位置: 首页 > news >正文

彭水网站建设手机网站二级域名

彭水网站建设,手机网站二级域名,hao123网址之家官网之手机版,网站关键词优化培训1.背景 为了实现低延时#xff0c;所以开始看看C版本的rknn的使用#xff0c;确实有不足的地方#xff0c;请指正#xff08;代码借鉴了rk官方的仓库文件#xff09;。 2.基本的操作流程 1.读取模型初始化 // 设置基本信息 // 在postprocess.h文件中定义#xff0c;详见…1.背景 为了实现低延时所以开始看看C版本的rknn的使用确实有不足的地方请指正代码借鉴了rk官方的仓库文件。 2.基本的操作流程 1.读取模型初始化 // 设置基本信息 // 在postprocess.h文件中定义详见include/postprocess.h文件const float nms_threshold NMS_THRESH; // 默认的NMS阈值const float box_conf_threshold BOX_THRESH; // 默认的置信度阈值// 默认的模型输入输出信息letterbox默认使用LetterBox的预处理std::string option letterbox;// 默认的图片输出路径根据路径设置std::string out_path /home/ubuntu/unet/unet_rknn_c/rknn_api_test/result/out.png;// 默认的模型路径根据路径设置const char model_path[] ../weights/yolov5s-640-640.rknn;// 设置rknn模型的基本信息 //初始化rknn_context对象数据类型:rknn_context成员变量:ctxrknn_context ctx 0;int ret;// RKNN模型的二进制数据或者RKNN模型路径。当参数size大于0时model表示二进制数据当参数size等于0时model表示RKNN模型路径。int model_len 0;unsigned char *model;// 初始化RKNN模型 model load_model(model_path, model_len);ret rknn_init(ctx, model, model_len, 0, NULL);if (ret 0){printf(rknn_init fail! ret%d\n, ret);return -1;}else{printf(model load success\n);}if (ctx 0){printf(rknn_init fail! ret%d\n, ret);return -1;}rknn_core_mask core_mask RKNN_NPU_CORE_0_1_2;ret rknn_set_core_mask(ctx, core_mask); 2.获取输入和输出的相关信息 // SDK的版本信息 rknn_sdk_version version;ret rknn_query(ctx, RKNN_QUERY_SDK_VERSION, version, sizeof(rknn_sdk_version));if (ret 0){printf(rknn_init error ret%d\n, ret);return -1;}printf(sdk version: %s driver version: %s\n, version.api_version, version.drv_version);// 获取模型输入输出信息 /*调佣rknn_query接口查询tensor输入输出个数*/rknn_input_output_num io_num;ret rknn_query(ctx, RKNN_QUERY_IN_OUT_NUM, io_num, sizeof(io_num));if (ret ! RKNN_SUCC){printf(rknn_query fail! ret%d\n, ret);return -1;}printf(model input num:%d,output num:%d\n,io_num.n_input,io_num.n_output);// 结构体rknn_tensor_attr表示模型的tensor的属性 // 1input的tensor信息rknn_tensor_attr input_attrs[io_num.n_input];memset(input_attrs, 0, sizeof(input_attrs));for (int i 0; i io_num.n_input; i){input_attrs[i].index i;ret rknn_query(ctx, RKNN_QUERY_INPUT_ATTR, (input_attrs[i]), sizeof(rknn_tensor_attr));if (ret 0){printf(rknn_init error ret%d\n, ret);return -1;}dump_tensor_attr((input_attrs[i]));}//2output的tensor信息rknn_tensor_attr output_attrs[io_num.n_output];memset(output_attrs, 0, sizeof(output_attrs));for (int i 0; i io_num.n_output; i){output_attrs[i].index i;ret rknn_query(ctx, RKNN_QUERY_OUTPUT_ATTR, (output_attrs[i]), sizeof(rknn_tensor_attr));dump_tensor_attr((output_attrs[i]));} 3.设置输入格式 // 查看模型的输入格式NCHW或者NHWC获取输入的宽高和通道数int channel 3;int width 0;int height 0;if (input_attrs[0].fmt RKNN_TENSOR_NCHW){printf(model is NCHW input fmt\n);channel input_attrs[0].dims[1];height input_attrs[0].dims[2];width input_attrs[0].dims[3];}else{printf(model is NHWC input fmt\n);height input_attrs[0].dims[1];width input_attrs[0].dims[2];channel input_attrs[0].dims[3];}printf(model input height%d, width%d, channel%d\n, height, width, channel);// 设置模型输入 // rknn_input 结构体用于描述输入数据包括索引、类型、大小、格式等。1表示输入的数量可换成io_num.n_inputrknn_input inputs[1];memset(inputs, 0, sizeof(inputs));// 该输入的索引位置inputs[0].index 0;// 输入数据的类型inputs[0].type RKNN_TENSOR_UINT8;// 输入数据所占内存大小inputs[0].size width * height * channel;// 输入数据的格式inputs[0].fmt RKNN_TENSOR_NHWC;// 输入数据是否透传inputs[0].pass_through 0; 4.读取图片进行预处理 string input_path ../images/bus.jpg;// 读取图片 printf(Read %s ...\n, input_path.c_str());cv::Mat orig_img cv::imread(input_path, 1);if (!orig_img.data){printf(cv::imread %s fail!\n, input_path.c_str());return -1;}cv::Mat img;cv::cvtColor(orig_img, img, cv::COLOR_BGR2RGB);int img_width img.cols;int img_height img.rows;printf(img width %d, img height %d\n, img_width, img_height);// 这里去除了rga的操作// 指定目标大小和预处理方式,默认使用LetterBox的预处理BOX_RECT pads;memset(pads, 0, sizeof(BOX_RECT));cv::Size target_size(width, height);cv::Mat resized_img(target_size.height, target_size.width, CV_8UC3);// 计算缩放比例float scale_w (float)target_size.width / img.cols;float scale_h (float)target_size.height / img.rows;if (img_width ! width || img_height ! height) {if (option letterbox) {printf(resize image with letterbox\n);float min_scale std::min(scale_w, scale_h);scale_w min_scale;scale_h min_scale;letterbox(img, resized_img, pads, min_scale, target_size);// 保存预处理图片cv::imwrite(letterbox_input.jpg, resized_img);} else {fprintf(stderr, Invalid resize option. Use resize or letterbox.\n);return -1;}inputs[0].buf resized_img.data;}else{inputs[0].buf img.data;} 5.模型输入和推理 // 使用rknn_inputs_set函数设置模型输入ret rknn_inputs_set(ctx, io_num.n_input, inputs);if (ret 0){printf(rknn_input_set fail! ret%d\n, ret);return -1;}// rknn模型推理 printf(rknn_run\n);ret rknn_run(ctx, nullptr);if (ret 0){printf(rknn_run fail! ret%d\n, ret);return -1;} 6.获取输出 // 多输出rknn_output outputs[io_num.n_output];memset(outputs, 0, sizeof(outputs));// 为每个输出设置属性这里假设我们希望所有输出都转换为浮点数for (int i 0; i 3; i) {// want_float标识是否需要将输出数据转为float类型输出0表示不需要1表示需要outputs[i].want_float 0;}// 使用rknn_outputs_get函数获取模型输出ret rknn_outputs_get(ctx, 3, outputs, NULL);if (ret 0) {printf(rknn_outputs_get fail! ret%d\n, ret);return -1;}/***int8数据格式int占用1字节查看模型输出的shape: (1*255*80*80),(1*255*40*40),(1*255*40*40)output[0] shape: 1632000output[1] shape: 408000output[2] shape: 102000float数据格式float占用4字节查看模型输出的shape: (1*255*80*80),(1*255*40*40),(1*255*40*40)output[0] shape: 1632000*4output[1] shape: 408000*4output[2] shape: 102000*4***/ // int8_t *pblob[3]; // for (int i 0; i io_num.n_output; i) // { // cout output[ i ] shape: outputs[i].size endl; // pblob[i] (int8_t*)outputs[i].buf; // } 7.后处理 // 后处理detect_result_group_t detect_result_group;std::vectorfloat out_scales;std::vectorint32_t out_zps;// rknn量化的零点和缩放因子for (int i 0; i io_num.n_output; i){out_scales.push_back(output_attrs[i].scale);out_zps.push_back(output_attrs[i].zp);}// 后处理post_process((int8_t *)outputs[0].buf, (int8_t *)outputs[1].buf, (int8_t *)outputs[2].buf, height, width,box_conf_threshold, nms_threshold, pads, scale_w, scale_h, out_zps, out_scales, detect_result_group);// 画框和概率char text[256];for (int i 0; i detect_result_group.count; i){detect_result_t *det_result (detect_result_group.results[i]);sprintf(text, %s %.1f%%, det_result-name, det_result-prop * 100);printf(%s (%d %d %d %d) %f\n, det_result-name, det_result-box.left, det_result-box.top,det_result-box.right, det_result-box.bottom, det_result-prop);int x1 det_result-box.left;int y1 det_result-box.top;int x2 det_result-box.right;int y2 det_result-box.bottom;rectangle(orig_img, cv::Point(x1, y1), cv::Point(x2, y2), cv::Scalar(256, 0, 0, 256), 3);putText(orig_img, text, cv::Point(x1, y1 12), cv::FONT_HERSHEY_SIMPLEX, 0.4, cv::Scalar(255, 255, 255));}imwrite(out_path, orig_img);printf(save detect result to %s\n, out_path.c_str()); 8.资源释放 // 释放rknn_outputs_get函数得到的输出的相关资源ret rknn_outputs_release(ctx, io_num.n_output, outputs);// 释放传入的rknn_context及其相关资源ret rknn_destroy(ctx);if (model){free(model);} 3.后记 详细的内容我已经上传到yolov5-rk文件中可以详细的研究
http://www.zqtcl.cn/news/760035/

相关文章:

  • 网络推广最好的网站有哪些wordpress怎么用万网域名
  • 大连仟亿科技网站建设公司 概况网络信用贷款哪个好
  • 配置了iis打不开网站外贸建站哪个最便宜
  • 酒店网站建设描述免费建站网站有哪些
  • 做宠物的网站主题思想网站建设 司法公开的需要
  • 建站图标素材前端面试题2022
  • 宁夏住房建设厅网站官网最新版cmsv6
  • 网站建设备案和免备案的区别建网站视频教程
  • 网站推广话术wordpress主题没法用
  • 微信网站开发 全屏包头教育云平台网站建设
  • 诸城手机网站建设做竞价网站
  • 网站策划报告公司简介模板范文高大上
  • 做信息图的免费网站如何获取网站是哪个公司制作
  • 乐清建设网站哪家好seo一个月赚多少钱
  • 哈尔滨专业官网建站企业h5公众号开发
  • 商城网站建设精英wordpress实例配置
  • 国内网站开发语言模板兔自用主题WordPress
  • 天津营销网站建设公司哪家好市场营销平台
  • 上海企业响应式网站建设推荐网站建设类织梦模板
  • 洛阳最好的做网站的公司哪家好信誉好的邢台做网站
  • 织梦 旅游网站模板seo百家外链网站
  • 做网站提升公司形象摄影网站建设任务书
  • wordpress建站不好用wordpress共用用户多站点
  • 企业网站设计请示杭州做企业网站的公司
  • 苏宁易购网站建设的不足之处wordpress myisam
  • 互联网站建设维护是做什么的网站建设模板成功案例
  • 制作网站需要什么语言wordpress 免签约支付宝
  • 西安网站开发的未来发展易企网络网站建设
  • 贵州做网站怎么推广vs2012 做网站教程
  • 完全菜鸟七天学会建网站网络营销的四大基础理论