贤者之路,Tensorrt的int8 calibration创建
【INT8 Calibration】
无论哪块GPU计算板卡都能够支持Int8的加速,但需要事先生成 calibration文件,下面是.h .cpp分别继承IInt8EntropyCalibrator类,用于创建Int8 table文件
#pragma once
#include "NvInfer.h"
#include "NvCaffeParser.h"
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include "util.h"using namespace nvinfer1;
using namespace nvcaffeparser1;class YoloInt8 : public IInt8EntropyCalibrator
{
public:YoloInt8() {}virtual ~YoloInt8() {};// ======================== 初始化实现 ==============================//int init(const char* inDir, const char* outDir, int batch, int maxBatch);// ======================== 基类函数重写实现 ======================= // int destroy();int getBatchSize() const override;bool getBatch(void* bindings[], const char* names[], int nbBindings) override;const void* readCalibrationCache(size_t& length) override;void writeCalibrationCache(const void* cache, size_t length) override;int readStringFromTxt(std::string dir, std::vector<std::string> &files);// ======================= 图像处理的辅助函数 ==================== //int convMat2Buf_32FC3(float* h_buff, cv::Mat& mat);int convMat2Buf_8UC3(uchar* h_buff, cv::Mat& srcMat); public:std::vector<std::string> _fileContainer;// 基础参数int _width = 608;int _height = 416;int _channel = 3; int MAXBATCH;int _fullsize = _width * _height * _channel;// + net_width * net_height / 2;int _singlesize = _width * _height;// + net_width * net_height / 2;// getbatch处理时的cpu内存,gpu内存地址void* _d_buff;void* _h_buff;// batch变量int _batch = 0;int _batchIdx = 0;std::string _outDirInt8; //filename to save the generated calibration table};
【关键】
关键是要实现getBatchSize()函数和getBatch()
bool YoloInt8::getBatch(void* bindings[], const char* names[], int nbBindings)
{if (_batch == 0){printf("【error】:please init jlYoloInt8 first\n");return false;}if (_batchIdx >= MAXBATCH)return false;float* buffOffset = nullptr;cv::Mat src;cv::Mat tmp(cv::Size(608, 416), CV_32FC3);cv::Mat res;for (int nPic = 0; nPic < _batch; nPic++) {int random = rand() % _fileContainer.size();src= cv::imread(_fileContainer[random]);cv::resize(src, tmp, cv::Size(608, 416), 0, 0, CV_INTER_CUBIC);tmp.convertTo(res,CV_32FC3);buffOffset = (float*)_h_buff + _fullsize * nPic; convMat2Buf_32FC3(buffOffset, finalMat); }_batchIdx += _batch;cudaMemcpy(_d_buff, _h_buff, _fullsize * _batch * sizeof(float), cudaMemcpyHostToDevice);assert(!strcmp(names[0], JL_YOLO_INPUT_BLOB_NAME));bindings[0] = _d_buff;return true;
}
贤者之路,Tensorrt的int8 calibration创建相关推荐
- TensorRT(5)-INT8校准原理
本次讲一下 tensorRT 的 INT8 低精度推理模式.主要参考 GTC 2017,Szymon Migacz 的PPT . 1 Low Precision Inference 现有的深度学习框架 ...
- 贤者之路, Caffe转TensorRT
[引]将Caffe转TensorRT的时候,有很多自己设计的接口TensorRT库本身不支持.我们需要自己创建Plugin,本文介绍TensorRT的创建,如何自定义Plugin,和快速书写cuda函 ...
- TensorRT(6)-INT8 inference
这一节通过官方例程 介绍 INT8 inference mode. 例程位于 /usr/src/tensorrt/samples/sampleINT8 ,是基于mnist的,大体流程是一致的. 流程同 ...
- Cocos2d学习之路三(使用Zwoptex创建精灵表单和CCAnimate动画)
创建精灵表单: 创建动画先要把图片整合到一个图片上然后生成plist文件: 方法下载Zwoptex软件:http://www.zwopple.com/zwoptex/ 然后打开选择 create ne ...
- 【API进阶之路】因为不会创建云服务器,我被实习生摆了一道
事情是这样的,公司成立了一个新项目,要给项目建官网,并搭建一个web服务器.按照我的习惯,搭建一个本地虚拟机就好了,部署简单方便还好配置,云服务器嘛,写了10年代码,还是不习惯那玩意儿. 我这刚开始动 ...
- 删库跑路如何预防?—— Oracle创建只读账号详细教程
目录 需求说明 第一步:创建只读账号 第二步:赋予账号连接数据库等基本权限 第三步:获取原账号的查询权限 第四步:将原账号权限赋值为新账号 第五步:在新账号端创建同位显示表 第六步:查询结果在新账号端 ...
- Pytorch打怪路(三)Pytorch创建自己的数据集2
前面一篇写创建数据集的博文--- Pytorch创建自己的数据集1 是介绍的应用于图像分类任务的数据集,即输入为一个图像和它的类别数字标签,本篇介绍输入的标签label亦为图像的数据集,并包含一些常用 ...
- java程序员的大数据之路(2):创建第一个Hadoop程序
环境 Ubuntu 16.04 + Hadoop 2.7.4 + Intellij idea 2017.2 + jdk 1.8 创建过程 新建工程 新建一个工程 输入工程名 可以随便给工程起一个名字, ...
- 王亟亟的Python学习之路(二)-项目创建以及要点提及
转载请注明出处王亟亟的大牛之路 首先,说一下上一篇为什么虽说我们是从3.X开始说起,那就要说明下2个版本的区别(上下版本几乎没关系) Python的3.0版本,常被称为Python 3000,或简 ...
最新文章
- WWDC上这个神级功能,一言不合又要改变未来购物趋势
- 盘点路由协议之RIP协议及IGRP协议
- CCNP精粹系列之三十二--BGP下一跳问题,推荐
- OpenCV基于ARM的Linux系统的交叉编译
- java double用法_Java Double doubleToLongBits()用法及代码示例
- (转)git遇到的问题之“Please make sure you have the correct access rights and the repository exists.”...
- @查看MySQL版本的方法
- Docker的Hadoop-Hbase的 Docker Hub文档
- android百度地图定位自定义图标,百度地图SDK集成及根据坐标实现定位(android studio开发)...
- VTK学习笔记(二十三)vtk空间几何变换
- 三国志战略版:求贤之我要换啥
- 手机QQ邮箱登录不上的解决办法
- 大数据小项目之电视收视率企业项目11
- 二维码被扫实时返回方案
- C/C++语言100题练习计划 88——猜数游戏(二分查找实现)
- 联通宽带在停电以后断网,重启猫还是没网,可能是设置出问题了
- 基于maxwell的反电动势波形导出处理
- 计算机图形学研究软件
- Unity-可编辑的星星特效
- 使用DESeq2进行两组间的差异分析
热门文章
- Lycn 2013 with SQL AlwaysOn 「一」建立AlwaysOn
- Arduino基础篇(七)-- 如何使用DS18B20数字温度传感器(基于OneWire和DallasTemperature库)
- LeetCode 764 题解
- 三分钟读懂什么是动作捕捉
- arduino声音传感器与二极管_怎样使用Arduino构建基于声音传感器的警报
- linux 旋转编码器,基于ARM_Linux的旋转编码器接口与驱动程序的设计
- 互联网小拼,这一生的故事,你要看看吗《打工人的那些事》
- 光场相机 标定微透镜阵列
- CentOS7-命令-创建用户(useradd)
- Poj 2965 The Pilots Brothers‘ refrigerator