对于C/C++程序,编译主要分为三个步骤:

  1. 源文件进行预处理,这个过程主要是处理一些#号定义的命令或语句(如宏、#include、预编译指令#ifdef等),生成*.i文件
  2. 进行编译,这个过程主要是进行词法分析、语法分析和语义分析等,生成*.s的汇编文件;
  3. 进行汇编,这个过程比较简单,就是将对应的汇编指令翻译成机器指令,生成可重定位的二进制目标文件。

通常情况下,对函数库的链接是放在编译时期(compile time)完成的。所有相关的对象文件 (object file)与牵涉到的函数库(library)被链接合成一个可执行文件 (executable file)。 静态链接和动态链接两者最大的区别就在于链接的时机不一样,静态链接是在形成可执行程序前,而动态链接的进行则是在程序执行时。下面来详细介绍这两种链接方式。

静态链接

为什么要进行静态链接

阅读全文 »

DALI库是一个用于数据预处理以及数据读取的第三方加速库。最近因为调用这个库的时候会出问题,所以重新编译了一下,这里记录下编译的过程。

首先,DALI库的官方地址官方文档地址,因为我这里使用的是旧版本的DALI库——0.11版本,其编译文档可以在这里找到,一般来说,直接按照流程编译是没有问题的,但是对于没有Root权限情况下的编译,就有点麻烦了。下面介绍一下:

首先,下面的编译条件要满足,尤其是对于GCC版本,我编译的使用使用了GCC4.9.2。

image-20200620174055268

值得注意的是,对于上面的编译条件,有一个通常不满足,那就是FFmpeg库,按照官方文档里面的指示,可以从这里下载FFmpeg安装包,我这里将安装包放到了/data2/zhaodali/software下,然后执行下面操作:

阅读全文 »

本篇文章主要参考了TensorRT(1)-介绍-使用-安装,并加上了一些自己的理解。

简介

TensorRT是一个高性能的深度学习推理(Inference)优化器,可以为深度学习应用提供低延迟、高吞吐率的部署推理。TensorRT 之前称为GIE。

Training-vs-Inference-Graphic

由上图可以很清楚的看出,训练(training)和 推理(inference)的区别:

阅读全文 »

最近稍微学习了一下TensorRT,这里参考这很多博客,主要参考了如何使用TensorRT对训练好的PyTorch模型进行加速?。然后加上自己的一些注释。

现在训练深度学习模型主流的框架有TensorFlow,Pytorch,mxnet,caffe等。这个贴子只涉及Pytorch,对于TensorFlow的话,可以参考TensorRT部署深度学习模型,这个帖子是C++如何部署TensorRT。其实原理都是一样的,对于TensorFlow模型,需要把pb模型转化为uff模型;对于Pytorch模型,需要把pth模型转化为onnx模型;对于caffe模型,则不需要转化,因为tensorRT是可以直接读取caffe模型的;mxnet模型也是需要转化为onnx的。

对于TensorRT的安装,这里就不赘述了,之前我的博客有介绍过。

Python环境下Pytorch模型转化为TensorRT

Python环境下Pytorch模型转化为TensorRT有两种路径,一种是先把Pytorch的pt模型转化为onnx,然后再转化为TensorRT;另一种是直接把pytorch的pt模型转成TensorRT。

阅读全文 »

最近踩了一下从onnx导出到TensorRT的坑,在这记录一下。

安装TensorRT

官方地址下载合适版本的TensorRT,例如我这里下载的就是TensorRT-7.0.0.11.CentOS-7.6.x86_64-gnu.cuda-10.2.cudnn7.6.tar.gz

1
2
3
4
5
6
7
8
9
10
11
12
13
# 解压缩
# tar -xzvf TensorRT-7.0.0.11.CentOS-7.6.x86_64-gnu.cuda-10.2.cudnn7.6.tar.gz -C /指定你要的路径
# 比如
tar -xzvf TensorRT-7.0.0.11.CentOS-7.6.x86_64-gnu.cuda-10.2.cudnn7.6.tar.gz -C /data2/zhaodali/software

# 添加环境变量
vim ~/.bashrc
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/data2/zhaodali/software/TensorRT-7.0.0.11/lib
source ~/.bashrc

# 安装Python支持,选择对应python版本的whl进行安装
cd /data2/zhaodali/software/TensorRT-7.0.0.11/python
pip install tensorrt-7.0.0.11-cp37-none-linux_x86_64.whl

安装ONNX_tensorrt

阅读全文 »

详细的导出流程其实看官方文档就可以了。这里我主要是说明的是我感兴趣的几个参数以及我自己的一些疑惑。

主要参数

export_params:该参数默认为True,也就是会导出训练好的权重;若设置为False,则导出的是没有训练过的模型。

verbose:默认为False,若设置为True,则会打印导出onnx时的一些日志,便于分析网络结构。

opset_version:对于1.5.0的Pytorch,默认仍然是9,也就是对应当前onnx的最稳定的版本。

阅读全文 »

以下大部分内容来源于Pytorch源码编译简明指南,并加上自己踩得一些坑。

获取源代码

编译首先是要获取源代码。

官方获取源代码是最好的方式,从Pytorch的github官网可以下载最新的代码。

记住,从官方克隆最新的代码的时候要加入recursive这个参数,因为Pytorch本身需要很多的第三方库参与编译:

阅读全文 »

下面记录一下caffe2的一些基本概念。

Caffe2框架是一个静态的图框架。同大多静态图框架一样,它的应用程序一般会干两件事情,先是建立模型(即建图,主要使用Python等较友好的语言脚本或像caffe那样直接使用prototxt文件),然后则是迭代执行模型。

核心概念

Operator

可以看成是一个函数,输入一些数据,输出一些数据,如 layers、数值操作等。感觉与TensorFlow中的op是一个概念。

阅读全文 »

这里主要介绍两篇论文。

Polarimetric SAR Image Classification Using Deep Convolutional Neural Networks

基本信息

  • 文章名称:Polarimetric SAR Image Classification Using Deep Convolutional Neural Networks
  • 年份:2016
  • 期刊:IEEE Geoscience & Remote Sensing Letters
  • 标签:PolSAR
  • 数据:PolSAR图像数据

创新点

阅读全文 »

基本信息

  • 年份:2019
  • 期刊:arxiv
  • 标签:PolSAR, Complex
  • 数据:PolSAR图像数据

创新点

  1. 使用了复数域的卷积操作
  2. 为了利用少量标记样本实现精确定位和快速分类,提出了一种将Cs-CNN权重直接迁移到C-Dilated CNN中
  3. 设计了一种由C-Dilated CNN和复数域encoder-decoder网络组成的a pixel-refining parallel mapping network in the complex domain(CRPM-Net)来提取上下文语义特征,并对错误分类的训练像素进行纠正以获得更高的准确率。

创新点来源

阅读全文 »