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

制作企业网站平坝网站建设

制作企业网站,平坝网站建设,企信网证书寄来要钱的吗,海盐网站建设一、Topic#xff1a;数据处理 这次我们来一段NCNN应用代码中#xff0c;除了推理外最重要的一部分代码#xff0c;数据处理#xff1a; ncnn::Mat in ncnn::Mat::from_pixels_resize(bgr.data, ncnn::Mat::PIXEL_BGR, bgr.cols, bgr.rows, 227, 227);const float mean_v…一、Topic数据处理 这次我们来一段NCNN应用代码中除了推理外最重要的一部分代码数据处理 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);这一部分代码由两部分组成 from_pixels_resize将cv::Mat数据转换到ncnn::Mat同时进行resize操作substract_mean_normalize这个就是减均值除方差 二、from_pixels_resize 先看名字from_pixels_resize由两部分组成 from_pixels从unsigned char* 的数组转换到 ncnn::Matresizeunsigned char* 的数据下进行resize 源码中是先进行resize再进行from_pixels。 A、resize 这个代码支持三种图像类型单通道的GRAY、三通道的RGB和BGR、四通道的RGBA。源码使用的都是bilinear插值这里我们挑个简单的单通道GRAY的来看看函数名字很直观就叫做resize_bilinear_c1后面的c1就是chennel 1的意思。具体的代码在mat_pixel.cpp的第1414行这个我就不细说了大家可以去看这个文章这个虽然写的是TNN的但仔细看下来会发现其实跟NCNN的实现是一样的变量名也一样。 这个大体流程就是 先算x、y方向上插值点的位置索引xofs和yofs再算x、y方向上插值点左右的两个插值稀疏iapha和ibeta遍历插值x方向上的插值用xofs和ialpha得到y方向上的插值用yofs和ibeta得到 这个计算的细节还是很多的大家感兴趣的可以去仔细研究一下这里就不细写了ncnn的代码为例效率可能写的不是特别美观。 B、from_pixels 这个就很简单了就是开辟一块ncnn::Mat的内存然后遍历数组一个一个填进去就好了同样的这里支持单通道、三通道、四通道而且一些颜色转换RGB2BGR、RGB2GRAY这些都是实现支持的我们挑一个典型的RGB2GRAY的实现来看源码在mat_pixel.cpp的第539行函数名就是from_rgb2gray。 static Mat from_rgb2gray(const unsigned char* rgb, int w, int h) {const unsigned char Y_shift 8;//14const unsigned char R2Y 77;const unsigned char G2Y 150;const unsigned char B2Y 29;Mat m(w, h, 1);if (m.empty())return m;float* ptr m;int size w * h;int remain size;for (; remain 0; remain--){*ptr (rgb[0] * R2Y rgb[1] * G2Y rgb[2] * B2Y) Y_shift;rgb 3;ptr;}return m; }这个代码很直观前面就是定义了转换时R、G、B对应要乘的系数这里作者用的是整数乘法所以系数放大了28后面算结果那里要右移回去。后面就是一个暴力for循环全部遍历把数据塞进去ncnn::Mat就完了。但这里我还想放一下GRAY2RGB的代码看下很值得注意的细节。 static Mat from_gray2rgb(const unsigned char* gray, int w, int h) {Mat m(w, h, 3);if (m.empty())return m;float* ptr0 m.channel(0);float* ptr1 m.channel(1);float* ptr2 m.channel(2);int size w * h;int remain size;for (; remain0; remain--){*ptr0 *gray;*ptr1 *gray;*ptr2 *gray;gray;ptr0;ptr1;ptr2;}return m; }从这个可以看出来获取ncnn::Mat的三个通道的数据是要用channel索引出来的这里就是一个需要留意的点ncnn::Mat的数据存储channel间的需要对齐不一定是连续的也就是不要理所当然的用channel(0)的指针自己加加加想去访问其他channel的数据很容易翻车我就因为这个翻车过这个我们后面有时间可以好好写一写ncnn的数据排布。 三、substract_mean_normalize substract_mean_normalize的源码在mat.cpp的第25行这个代码是支持只mean不norm只norm不meanmean和norm都做得由于这些都大同小异我就直接贴都做mean和norm的代码了 void Mat::substract_mean_normalize(const float* mean_vals, const float* norm_vals) {int size w * h;for (int q 0; q c; q){float* ptr data cstep * q;const float mean mean_vals[q];const float norm norm_vals[q];int remain size;for (; remain 0; remain--){*ptr (*ptr - mean) * norm;ptr;}} }上面比较核心的就一句 *ptr (*ptr - mean) * norm;就是遍历Mat的所有数据给他减mean乘norm要注意这里是乘norm不是一般说的除方差方差的倒数才是这里的norm。 参考致谢 https://zhuanlan.zhihu.com/p/456238585
http://www.yayakq.cn/news/4561/

相关文章:

  • 网站流量怎么做乡1万做一个手机app大概需要多少钱
  • 泉州住房和城乡建设网站策划与设计一个电子商务网站
  • 珠海做网站找哪家公司个人网站建设目标
  • 做网站用的字体是什么所有浏览器大全图片
  • dw做网站需要数据库么免费咨询服务协议
  • 医疗器械外贸网站建设网站前台功能介绍
  • 做包装盒效果图的网站做外贸网站流程
  • 培训网站建设方案模板微商城网站建设怎么样
  • 做网站企业logo 图标 设计
  • 北京企业网站seo平台网络服务器搭建配置与管理 下载
  • 网站建设有哪些软件有哪些wordpress怎么pjax
  • 网站提示404error近期的重大新闻
  • 企业网站备案材料网站主办者是谁
  • 网站建设技术方面论文天津建设工程信息网 招标发布软件
  • 如何做旅游网站的思维导图基于多站点的网站内容管理平台的管理与应用
  • 网站搭建多少钱logo修改wordpress如何添加备案号代码
  • 无锡企业建站模板做网站天通苑
  • 设计网站推荐 猪抖音代运营赚钱吗
  • wap网站建设设计农业网站建设费用预算
  • 建个官方网站要多少钱电商类网站
  • 思明区建设局官网站邢台网站建设公司哪家好一点
  • 万州哪里有做网站的网站建设两个方面
  • 做网站的出路建设机械网站公司
  • 外贸网站运营工作内容启闭机闸门的网站建设
  • 东莞 外贸网站设计百度seo推广
  • 网站建设设计思想简单介绍家乡网页html代码
  • vps网站空间wordpress的模板
  • 东莞网站建设找谁长沙网页美工培训
  • 怎么做冒牌网站如何看网站是不是织梦做的
  • 家居网站建设渠道广州城乡建设网站