对学院网站建设的建议django做网站

web/2025/9/27 7:09:31/文章来源:
对学院网站建设的建议,django做网站,帮忙推广的平台,北京网站开发培训中心Fast SAM C推理部署—TensorRT 核心源代码在结尾处有获取方式 晓理紫 0 XX开局一张图#xff0c;剩下… 1 为什么需要trt部署 主要是在GPU上推理可以获得更高的推理速度。可与onnxruntim推理向比较一下 对比视频 2 TensorRt部署 2.1 环境与条件 需要配置TensorRt相关环境 这… Fast SAM C推理部署—TensorRT 核心源代码在结尾处有获取方式 晓理紫 0 XX开局一张图剩下… 1 为什么需要trt部署 主要是在GPU上推理可以获得更高的推理速度。可与onnxruntim推理向比较一下 对比视频 2 TensorRt部署 2.1 环境与条件 需要配置TensorRt相关环境 这个就需要有显卡安装驱动CUDA以及TensorRT 需要把原始权重模型转为trt模型 2.2 trt模型转换 trt模型转换有多种方式本文采用的是先把pt模型转成onnx模型再把onnx通过trtexec工具进行转换。这里假设已经有onxx模型转换命令如下 trtexec --onnxfastsam.onnx --saveEnginefasrsam.engine 注意 trtexec -h查看帮助转fp16或者int8等参数 2.3 部署核心代码 模型转换完成以后剩下的就是部署推理。部署推理里面最为重要也是最难搞的是数据解析部分。其中模型加载是很标准的流程当然我这里不一定是标准的。 加载模型并初始化核心代码 std::ifstream file(engine_file_path, std::ios::binary);assert(file.good());file.seekg(0, std::ios::end);auto size file.tellg();std::ostringstream fmt;file.seekg(0, std::ios::beg);char *trtModelStream new char[size];assert(trtModelStream);file.read(trtModelStream, size);file.close();initLibNvInferPlugins(this-gLogger, );this-runtime nvinfer1::createInferRuntime(this-gLogger);assert(this-runtime ! nullptr);this-engine this-runtime-deserializeCudaEngine(trtModelStream, size);assert(this-engine ! nullptr);this-context this-engine-createExecutionContext();assert(this-context ! nullptr);cudaStreamCreate(this-stream);const nvinfer1::Dims input_dims this-engine-getBindingDimensions(this-engine-getBindingIndex(INPUT));this-in_size get_size_by_dims(input_dims);CHECK(cudaMalloc(this-buffs[0], this-in_size * sizeof(float)));this-context-setBindingDimensions(0, input_dims);const int32_t output0_idx this-engine-getBindingIndex(OUTPUT0);const nvinfer1::Dims output0_dims this-context-getBindingDimensions(output0_idx);this-out_sizes[output0_idx - NUM_INPUT].first get_size_by_dims(output0_dims);this-out_sizes[output0_idx - NUM_INPUT].second DataTypeToSize(this-engine-getBindingDataType(output0_idx));const int32_t output1_idx this-engine-getBindingIndex(OUTPUT1);const nvinfer1::Dims output1_dims this-context-getBindingDimensions(output1_idx);this-out_sizes[output1_idx - NUM_INPUT].first get_size_by_dims(output1_dims);this-out_sizes[output1_idx - NUM_INPUT].second DataTypeToSize(this-engine-getBindingDataType(output1_idx));const int32_t Reshape_1252_idx this-engine-getBindingIndex(Reshape_1252);const nvinfer1::Dims Reshape_1252_dims this-context-getBindingDimensions(Reshape_1252_idx);this-out_sizes[Reshape_1252_idx - NUM_INPUT].first get_size_by_dims(Reshape_1252_dims);this-out_sizes[Reshape_1252_idx - NUM_INPUT].second DataTypeToSize(this-engine-getBindingDataType(Reshape_1252_idx));const int32_t Reshape_1271_idx this-engine-getBindingIndex(Reshape_1271);const nvinfer1::Dims Reshape_1271_dims this-context-getBindingDimensions(Reshape_1271_idx);this-out_sizes[Reshape_1271_idx - NUM_INPUT].first get_size_by_dims(Reshape_1271_dims);this-out_sizes[Reshape_1271_idx - NUM_INPUT].second DataTypeToSize(this-engine-getBindingDataType(Reshape_1271_idx));const int32_t Concat_1213_idx this-engine-getBindingIndex(Concat_1213);const nvinfer1::Dims Concat_1213_dims this-context-getBindingDimensions(Concat_1213_idx);this-out_sizes[Concat_1213_idx - NUM_INPUT].first get_size_by_dims(Concat_1213_dims);this-out_sizes[Concat_1213_idx - NUM_INPUT].second DataTypeToSize(this-engine-getBindingDataType(Concat_1213_idx));const int32_t OUTPUT1167_idx this-engine-getBindingIndex(OUTPUT1167);const nvinfer1::Dims OUTPUT1167_dims this-context-getBindingDimensions(OUTPUT1167_idx);this-out_sizes[OUTPUT1167_idx - NUM_INPUT].first get_size_by_dims(OUTPUT1167_dims);this-out_sizes[OUTPUT1167_idx - NUM_INPUT].second DataTypeToSize(this-engine-getBindingDataType(OUTPUT1167_idx));for (int i 0; i NUM_OUTPUT; i) {const int osize this-out_sizes[i].first * out_sizes[i].second;CHECK(cudaHostAlloc(this-outputs[i], osize, 0));CHECK(cudaMalloc(this-buffs[NUM_INPUT i], osize));}if (warmup) {for (int i 0; i 10; i) {size_t isize this-in_size * sizeof(float);auto *tmp new float[isize];CHECK(cudaMemcpyAsync(this-buffs[0], tmp, isize, cudaMemcpyHostToDevice,this-stream));this-xiaoliziinfer();}}模型加载以后就可以送入数据进行推理 送入数据并推理 float height (float)image.rows;float width (float)image.cols;float r std::min(INPUT_H / height, INPUT_W / width);int padw (int)std::round(width * r);int padh (int)std::round(height * r);if ((int)width ! padw || (int)height ! padh) {cv::resize(image, tmp, cv::Size(padw, padh));} else {tmp image.clone();}float _dw INPUT_W - padw;float _dh INPUT_H - padh;_dw / 2.0f;_dh / 2.0f;int top int(std::round(_dh - 0.1f));int bottom int(std::round(_dh 0.1f));int left int(std::round(_dw - 0.1f));int right int(std::round(_dw 0.1f));cv::copyMakeBorder(tmp, tmp, top, bottom, left, right, cv::BORDER_CONSTANT,PAD_COLOR);cv::dnn::blobFromImage(tmp, tmp, 1 / 255.f, cv::Size(), cv::Scalar(0, 0, 0),true, false, CV_32F);CHECK(cudaMemcpyAsync(this-buffs[0], tmp.ptrfloat(),this-in_size * sizeof(float), cudaMemcpyHostToDevice,this-stream));this-context-enqueueV2(buffs.data(), this-stream, nullptr);for (int i 0; i NUM_OUTPUT; i) {const int osize this-out_sizes[i].first * out_sizes[i].second;CHECK(cudaMemcpyAsync(this-outputs[i], this-buffs[NUM_INPUT i], osize,cudaMemcpyDeviceToHost, this-stream));}cudaStreamSynchronize(this-stream); 推理以后就可以获取数据并进行解析 数据获取 cv::Mat matData(37, OUTPUT0w, CV_32F, pdata);matVec.push_back(matData);float *pdata1 nullptr;pdata1 static_castfloat *(this-outputs[2]);if (pdata1 nullptr) {return;}cv::Mat matData1(105, OUTPUT1w * OUTPUT1w, CV_32F, pdata1);matVec.push_back(matData1);float *pdata2 nullptr;pdata2 static_castfloat *(this-outputs[3]);if (pdata2 nullptr) {return;}cv::Mat matData2(105, Reshape_1252w * Reshape_1252w, CV_32F, pdata2);matVec.push_back(matData2);float *pdata3 nullptr;pdata3 static_castfloat *(this-outputs[4]);if (pdata3 nullptr) {return;}cv::Mat matData3(105, Reshape_1271w * Reshape_1271w, CV_32F, pdata3);matVec.push_back(matData3);float *pdata4 nullptr;pdata4 static_castfloat *(this-outputs[1]);if (pdata4 nullptr) {return;}cv::Mat matData4(Concat_1213w, 32, CV_32F, pdata4);matVec.push_back(matData4);float *pdata5 nullptr;pdata5 static_castfloat *(this-outputs[0]);if (pdata5 nullptr) {return;}cv::Mat matData5(32, OUTPUT1167w * OUTPUT1167w, CV_32F, pdata5);matVec.push_back(matData5);数据解析 首先是对数据进行分割处理并进行NMS获取box、lab以及mask相关信息 cv::Mat box; cv::Mat cls; cv::Mat mask; box temData.colRange(0, 4).clone(); cls temData.colRange(4, 5).clone(); mask temData.colRange(5, temData.cols).clone(); cv::Mat j cv::Mat::zeros(cls.size(), CV_32F); cv::Mat dst; cv::hconcat(box, cls, dst); // dst[A B] cv::hconcat(dst, j, dst); cv::hconcat(dst, mask, dst); std::vectorfloat scores; std::vectorcv::Rect boxes; pxvec dst.ptrfloat(0); for (int i 0; i dst.rows; i) {pxvec dst.ptrfloat(i);boxes.push_back(cv::Rect(pxvec[0], pxvec[1], pxvec[2], pxvec[3]));scores.push_back(pxvec[4]); } std::vectorint indices; xiaoliziNMSBoxes(boxes, scores, conf_thres, iou_thres, indices); cv::Mat reMat; for (int i 0; i indices.size() i max_det; i) {int index indices[i];reMat.push_back(dst.rowRange(index, index 1).clone()); } box reMat.colRange(0, 6).clone(); xiaolizixywh2xyxy(box); mask reMat.colRange(6, reMat.cols).clone(); 其次是获取mask相关数据 for (int i 0; i bboxes.rows; i) {pxvec bboxes.ptrfloat(i);cv::Mat dest, mask;cv::exp(-maskChannels[i], dest);dest 1.0 / (1.0 dest);dest dest(roi);cv::resize(dest, mask, frmae.size(), cv::INTER_LINEAR);cv::Rect roi(pxvec[0], pxvec[1], pxvec[2] - pxvec[0], pxvec[3] - pxvec[1]);cv::Mat temmask mask(roi);cv::Mat boxMask cv::Mat(frmae.size(), mask.type(), cv::Scalar(0.0));float rx std::max(pxvec[0], 0.0f);float ry std::max(pxvec[1], 0.0f);for (int y ry, my 0; my temmask.rows; y, my) {float *ptemmask temmask.ptrfloat(my);float *pboxmask boxMask.ptrfloat(y);for (int x rx, mx 0; mx temmask.cols; x, mx) {pboxmask[x] ptemmask[mx] 0.5 ? 1.0 : 0.0;}}vremat.push_back(boxMask);}最后是画出相关信息 cv::Mat bbox vremat[0];float *pxvec bbox.ptrfloat(0);for (int i 0; i bbox.rows; i) {pxvec bbox.ptrfloat(i);cv::rectangle(image, cv::Point(pxvec[0], pxvec[1]),cv::Point(int(pxvec[2]), int(pxvec[3])),cv::Scalar(0, 0, 255), 2);}for (int i 1; i vremat.size(); i) {cv::Mat mask vremat[i];int indx (rand() % (80 - 0)) 0;for (int y 0; y mask.rows; y) {const float *mp mask.ptrfloat(y);uchar *p image.ptruchar(y);for (int x 0; x mask.cols; x) {if (mp[x] 1.0) {p[0] cv::saturate_castuchar(p[0] * 0.5 COLORS[indx][0] * 0.5);p[1] cv::saturate_castuchar(p[1] * 0.5 COLORS[indx][1] * 0.5);p[2] cv::saturate_castuchar(p[2] * 0.5 COLORS[indx][2] * 0.5);}p 3;}}}3 核心代码 扫一扫关注并回复fastsamtrt获取核心代码 晓理紫爱学习爱记录爱分享

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/82615.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网站建设维修服务流程网站建设业务流程

1.2 简单输出 本章的后续部分,包含了一系列简单但典型的Awk程序样例,都是对前面的emp.data文件进行操作。为防遗忘,这里把emp.data文件再发一遍: Beth 21 0 Dan 19 0 Kathy 15.50 10 Mark 25 20 M…

专业人士怎样建网站商城平台

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 在图像处理中,解决了分割的问题之后,下面就是属性信息的提取。在这其中,有一种属性是非常重要的 ,那…

网站空间不够用怎么办网络体系结构

在大数据系统中,如无特别需要,建议 collation 指定为 utf8mb4_bin。 utf8mb4_bin是一种二进制的排序规则,比较字符串时直接比较字符串的二进制值,不需要进行复杂的字符比较和排序运算,这样可以有效减少CPU的使用&…

生物医药网站建设移动慧生活app下载

🌈个人主页:聆风吟 🔥系列专栏:网络奇遇记、Cpolar杂谈 🔖少年有梦不应止于心动,更要付诸行动。 文章目录 📋前言一. WampServer下载安装二. WampServer启动三. 安装cpolar内网穿透3.1 注册账号…

马鞍山网站建设兼职太湖县城乡建设局网站

前面给大家讲过一个借助小程序云开发实现微信支付的,但是那个操作稍微有点繁琐,并且还会经常出现问题,今天就给大家讲一个简单的,并且借助官方支付api实现小程序支付功能。 传送门:借助小程序云开发实现小程序支付功能…

宁波市网站建设正规的佛山网站建设

一、背景 老铁们如果是QA,想必也遇到过类似痛点吧: 业务逻辑复杂性决定测试场景复杂性,配置测试场景常常花费大量时间,导致测试效率降低新用户的测试场景,账号可能经常注销,协助debug时需要用userid,每次都得重新抓包。而且测试账号很多,来回切,即使在本地管理userid…

黄南州网站建设公司免费咨询皮肤医生

科目编号:[0471] 座位号 2017-2018学年度第二学期期末考试 畜牧学 试题 2017年 12 月 一、名词解释(本大题共5小题,每小题3分,共计15分) 1.限制性氨基酸 2.短期优饲 3.顶体反应 4&#xff0…

开个小网站要怎么做iis发布php网站

qwt的安装与使用安装好qt开发环境后,先去下载qwt库源代码。以我下载的qwt-6.0.1.zip为例,解压得到qwt-6.0.1。1.安装qwt-6.0.1执行下面的命令:1 cd qwt-6.0.12 qmake3 make4 make install这样就完成qwt-6.0.1的安装了,安装的路径是…

网站正能量晚上不用下载进入免费网站搭建平台流程

在处理数据时,我们经常会遇到线打断的问题,比如需要指定在线上某处打断线,或者新建网络数据集时需要在线的交点处打段线等等。现将桌面版中我所遇到的线打断的工具总结如下: 一、手工打断线 Editor工具条中的splittool。 使用该工…

wp网站模板网站建设ps模板

【问题描述】[简单] 【解答思路】 1. 排序 平方后排序 没有使用排序的特性 时间复杂度&#xff1a;O(NlogN) 空间复杂度&#xff1a;O(1) class Solution {public int[] sortedSquares(int[] A) {int[] ans new int[A.length];for (int i 0; i < A.length; i) {ans[i] …

免费网站制作 优帮云给你一个网站seo如何做

每当在 Android 移动设备上调试网页时&#xff0c;开发人员往往都会不自觉陷入调试的泥潭中去。《Android开发指南》提供了一个解决方案&#xff0c;却有点繁琐复杂。因此&#xff0c;许多 Web 开发人员会倾向于使用类似 Firefox Firebug 的或像 WebKit 的 Web Inspector 之类的…

宝思哲手表网站服务器维护中

前言&#xff1a;EventBus是上周项目中用到的&#xff0c;网上的文章大都一样&#xff0c;或者过时&#xff0c;有用的没几篇&#xff0c;经过琢磨&#xff0c;请教他人&#xff0c;也终于弄清楚点眉目&#xff0c;记录下来分享给大家。 相关文章&#xff1a; 1、《EventBus使用…

网站建设前期响应式网站下载

随着移动互联网的快速发展&#xff0c;UGC标签系统受到越来越多推荐应用&#xff0c;标签不但能反映用户的兴趣又能描述物品的本身特征。现有的标签推荐算法没有考虑用户的连续行为所产生的影响&#xff0c;于是人们提出了一种基于标签的个性化推荐算法。该算法将〈用户-标签-物…

成都青羊区建设局网站flash做网站轮播图

动画系统包含&#xff1a; 动画片段 Animation Clip&#xff0c;记录物体变化的信息&#xff0c;可以是角色的闪转腾挪&#xff0c;也可以是一扇门的开闭动画状态机 Animator Controller&#xff0c;根据设置切换动画片段动画组件 Animator&#xff0c;Animation替身 Avatar&a…

山西p2p网站建设app网站与普通网站的区别

JavaScript闭包 前言概念代码实例以及讲解闭包作用闭包缺点 前言 本文主要讲解JavaScript中的闭包&#xff0c;闭包是什么&#xff1f; 闭包&#xff08;closure&#xff09;是一个函数以及其捆绑的周边环境状态&#xff08;lexical environment&#xff0c;词法环境&#xff…

用wordpress建站会不会显得水平差培训网

3月1日是我回学校的第一天。经历了长达8个月在家的昏暗时刻&#xff0c;我这10天的感觉和在家的感觉发生了翻天覆地的变化&#xff0c;最明显的莫过于学习状态的改变。 倒不是说在家学的不好&#xff0c;而是说在学校&#xff0c;我对学习的整体感觉&#xff0c;以及专注程度&…

上海网站推广提供商广州做网站信科建设

参考&#xff1a;《C专家编程》 例子 void(*signal(int sig, void(*func)(int)))(int);分析&#xff1a;signal是一个函数&#xff0c;返回一个函数指针&#xff0c;它指向的函数接受int参数返回void。signal的参数是int和一个接受int的函数指针。 可以使用typedef进行简化&a…

ctoc的网站有哪些域名注册需要多少钱?

当调试windows程序的时候&#xff0c;有时候会需要一些符号文件。系统的公有符号文件微软都是提供的&#xff0c;只需在调试器中设置即可&#xff0c;在下次调试时&#xff0c;调试器会自动从网上下载需要的符号文件。可以使用符号文件的调试器有windbg等等。 符号服务器地址&a…

东莞免费模版网站建设企业网站建设市场报价

✨个人主页&#xff1a; 北 海 &#x1f389;所属专栏&#xff1a; MySQL 学习 &#x1f383;操作环境&#xff1a; CentOS 7.6 腾讯云远程服务器 &#x1f381;软件版本&#xff1a; MySQL 5.7.44 文章目录 1.MySQL 的清理与安装1.1查看是否存在 MySQL 服务1.2.卸载原有服务1.…

新乡网站优化国内时事新闻2023最新

保护性拷贝&#xff08;Defensive Copy&#xff09;是一种常见的编程实践&#xff0c;用于在传递参数或返回值时&#xff0c;创建副本以防止原始对象被意外修改。以下是一个例子&#xff0c;展示了何时进行保护性拷贝&#xff1a; mport java.util.ArrayList; import java.uti…