赞
踩
视频链接: https://space.bilibili.com/1822828582
Github 链接: https://github.com/zjhellofss/KuiperInfer 欢迎star和PR
请配合视频课程一起看此教程
深度学习推理框架
用于对已训练完成的神经网络进行预测.
也就是说,深度学习推理框架
能够将深度训练框架例如Pytorch
,Tensorflow
中定义的算法移植到中心侧和端侧, 并高效执行. 与训练框架不同的是, 深度学习推理框架
没有梯度反向传播功能, 因为算法模型文件中的权重系数已经被固化, 推理框架只需要读取, 加载并完成对输入数据的预测即可.
训练完成的模型被放置在两个文件中, 一个是模型定义文件, 一个是权重文件.
模型由多个节点的定义和节点之间的数据流图
组成,节点定义模型中各节点的参数, 例如在卷积算子中的参数, 包括卷积核的大小, 步长以及输入输出特征图的尺寸大小等.
数据流图
阐述了节点之间数据流动的前后顺序和依赖关系. 所有节点在根据模型文件中的定义初始化完毕之后, 根据数据流图对他们进行一一串联, 形成一个有向无环图(DAG), 或称为计算图.
但是这个计算图是缺少权重的,只是一个外壳, 它只有网络的节点和节点之间的联通关系. 模型的权重则保存在权重文件中, 需要在完成计算图的初始化之后加载到模型中.
在DAG构建完成之后, 读取权重文件中各节点的weight
和bias
数据并依次填充到对应的算子当中. 去填充计算图(外壳)中的权重信息.
输入指的是由图片或者视频帧构建而成的RGB
数据,KuiperInfer
中数据的输入符合NCHW
格式,分别表示批次, 通道和高宽.
输出指的是模型对于特定的输入作出的判断,在下图中对于云层
图像的输出,模型给出的预测为cloud
类别,至此推理框架完成了一次预测过程.
课程节数 | 主要内容 | 进度 | 课程链接 |
---|---|---|---|
第一次课 | 整体框架解读和开发环境配置 | 完成 | https://www.bilibili.com/video/BV1HV4y1A7H8/ |
第二次课 | 张量Tensor类的解析和输入数据的内存排布 | 完成 | https://www.bilibili.com/video/BV1Ed4y1v7Gb/ |
第三次课 | 从CSV 文件中初始化张量Tensor 一个实例 | 完成 | https://www.bilibili.com/video/BV1Pg411J7V5/ |
第四次课 | 手写第一个算子Relu 并完成算子注册工厂类 | 完成 | https://www.bilibili.com/video/BV1bG4y1J7sQ/ |
第五次课 | Im2col 的原理和卷积算子的实现 | 未完成 | |
第六次课 | 照猫画虎, 完成MaxPooling 算子 | 完成 | https://www.bilibili.com/video/BV1m3411S7yy |
第七次课 | 图结构(PNNX )讲解和计算图初步 | 完成 | https://www.bilibili.com/video/BV1VW4y1V7vp |
第八次课 | 读取PNNX 并构建自己的计算图 | 未完成 | |
第二季课程待叙 | … | … |
ResNet 18
的推理PTQ
量化C++
基础, 默认大家都多少懂C++
或者C
语言开发环境
主项目地址:https://github.com/zjhellofss/KuiperInfer
Tips: 不要求大家全部掌握, 我会在以后的课程中分模块的解读, 欢迎大家点赞 star.
Ubuntu 22.04上armadillo
安装. armadillo
本质上提供了一个方便的接口, 背后调用Openblas
,
https://arma.sourceforge.net/docs.html. 安装之前, 使用Linux对应发行版的包管理器安装必要的组件
apt update
apt install cmake libopenblas-dev liblapack-dev libarpack2-dev libsuperlu-dev
mkdir build
# 在https://arma.sourceforge.net/docs.html下载armadillo数学库的代码
# cd armadillo文件夹
mkdir build
cd build
cmake ..
make -j8
make install
# 默认情况下armadillo头文件安装在:/usr/include/
# 默认情况下armadillo库文件安装在:/usr/lib/x86_64-linux-gnu
https://github.com/google/glog
mkdir build
cd build
cmake ..
make -j8
make install
# 默认情况下安装完成后库文件在:/usr/local/lib/
# 默认情况下安装完成后头文件:/usr/local/include/
# 如果发生库找不到的问题, 请可以自行试试增加库寻找路径, 如果还解决不了请添加交流群.
vim ~/.bashrc
# 末尾加 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
source ~/.bashrc
https://github.com/google/googletest
gtest安装过程与glog类似
Tips: 以上两个库在安装完成后, 头文件位于/usr/local/include/
, 库文件位于/usr/local/lib/
.
https://github.com/zjhellofss/KuiperCourse.git
git clone https://github.com/zjhellofss/KuiperCourse.git 拉取本次课程的代码
git checkout first 切换分支,第一节课程在first 这个branch当中
mkdir build
cd build
cmake ..
make -j8
国内git镜像地址:https://gitee.com/fssssss/KuiperCourse.git
需要注意的问题: armadillo
是列主序的. Y=AxX+bias
是一个矩阵相乘问题.
armadillo
关于矩阵乘和加的文档如下: 请按照文档, 自行编写test/test_first.cpp
中TEST(test_first, linear)
的代码来完成上述操作,
如果编写正确则通过单元测试,并输出Result Passed!
.
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。