【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创建相关推荐

  1. TensorRT(5)-INT8校准原理

    本次讲一下 tensorRT 的 INT8 低精度推理模式.主要参考 GTC 2017,Szymon Migacz 的PPT . 1 Low Precision Inference 现有的深度学习框架 ...

  2. 贤者之路, Caffe转TensorRT

    [引]将Caffe转TensorRT的时候,有很多自己设计的接口TensorRT库本身不支持.我们需要自己创建Plugin,本文介绍TensorRT的创建,如何自定义Plugin,和快速书写cuda函 ...

  3. TensorRT(6)-INT8 inference

    这一节通过官方例程 介绍 INT8 inference mode. 例程位于 /usr/src/tensorrt/samples/sampleINT8 ,是基于mnist的,大体流程是一致的. 流程同 ...

  4. Cocos2d学习之路三(使用Zwoptex创建精灵表单和CCAnimate动画)

    创建精灵表单: 创建动画先要把图片整合到一个图片上然后生成plist文件: 方法下载Zwoptex软件:http://www.zwopple.com/zwoptex/ 然后打开选择 create ne ...

  5. 【API进阶之路】因为不会创建云服务器,我被实习生摆了一道

    事情是这样的,公司成立了一个新项目,要给项目建官网,并搭建一个web服务器.按照我的习惯,搭建一个本地虚拟机就好了,部署简单方便还好配置,云服务器嘛,写了10年代码,还是不习惯那玩意儿. 我这刚开始动 ...

  6. 删库跑路如何预防?—— Oracle创建只读账号详细教程

    目录 需求说明 第一步:创建只读账号 第二步:赋予账号连接数据库等基本权限 第三步:获取原账号的查询权限 第四步:将原账号权限赋值为新账号 第五步:在新账号端创建同位显示表 第六步:查询结果在新账号端 ...

  7. Pytorch打怪路(三)Pytorch创建自己的数据集2

    前面一篇写创建数据集的博文--- Pytorch创建自己的数据集1 是介绍的应用于图像分类任务的数据集,即输入为一个图像和它的类别数字标签,本篇介绍输入的标签label亦为图像的数据集,并包含一些常用 ...

  8. java程序员的大数据之路(2):创建第一个Hadoop程序

    环境 Ubuntu 16.04 + Hadoop 2.7.4 + Intellij idea 2017.2 + jdk 1.8 创建过程 新建工程 新建一个工程 输入工程名 可以随便给工程起一个名字, ...

  9. 王亟亟的Python学习之路(二)-项目创建以及要点提及

    转载请注明出处王亟亟的大牛之路 首先,说一下上一篇为什么虽说我们是从3.X开始说起,那就要说明下2个版本的区别(上下版本几乎没关系) Python的3​​.0版本,常被称为Python 3000,或简 ...

最新文章

  1. WWDC上这个神级功能,一言不合又要改变未来购物趋势
  2. 盘点路由协议之RIP协议及IGRP协议
  3. CCNP精粹系列之三十二--BGP下一跳问题,推荐
  4. OpenCV基于ARM的Linux系统的交叉编译
  5. java double用法_Java Double doubleToLongBits()用法及代码示例
  6. (转)git遇到的问题之“Please make sure you have the correct access rights and the repository exists.”...
  7. @查看MySQL版本的方法
  8. Docker的Hadoop-Hbase的 Docker Hub文档
  9. android百度地图定位自定义图标,百度地图SDK集成及根据坐标实现定位(android studio开发)...
  10. VTK学习笔记(二十三)vtk空间几何变换
  11. 三国志战略版:求贤之我要换啥
  12. 手机QQ邮箱登录不上的解决办法
  13. 大数据小项目之电视收视率企业项目11
  14. 二维码被扫实时返回方案
  15. C/C++语言100题练习计划 88——猜数游戏(二分查找实现)
  16. 联通宽带在停电以后断网,重启猫还是没网,可能是设置出问题了
  17. 基于maxwell的反电动势波形导出处理
  18. 计算机图形学研究软件
  19. Unity-可编辑的星星特效
  20. 使用DESeq2进行两组间的差异分析

热门文章

  1. Lycn 2013 with SQL AlwaysOn 「一」建立AlwaysOn
  2. Arduino基础篇(七)-- 如何使用DS18B20数字温度传感器(基于OneWire和DallasTemperature库)
  3. LeetCode 764 题解
  4. 三分钟读懂什么是动作捕捉
  5. arduino声音传感器与二极管_怎样使用Arduino构建基于声音传感器的警报
  6. linux 旋转编码器,基于ARM_Linux的旋转编码器接口与驱动程序的设计
  7. 互联网小拼,这一生的故事,你要看看吗《打工人的那些事》
  8. 光场相机 标定微透镜阵列
  9. CentOS7-命令-创建用户(useradd)
  10. Poj 2965 The Pilots Brothers‘ refrigerator