深度学习算法训练和部署流程介绍--让初学者一篇文章理解算法训练和部署流程
目录
1 什么是深度学习算法
2 算法训练
2.1 训练的原理
2.2 名词解释
3 算法C++部署
3.1 嵌入式终端板子部署
3.3.1 tpu npu推理
3.3.2 cpu推理
3.2 服务器部署
3.2.1 智能推理
3.2.2 CPU推理
1 什么是深度学习算法
这里不去写复杂的概念,就用通俗的话说一下现在常用的分类和检测这种深度学习算法是怎么一回事,现在常用的分类和检测算法其实就用的卷积神经网络,神经网络的原理可以看这篇文章,我当初就是看了这篇文章:CNN笔记:通俗理解卷积神经网络_cnn卷积神经网络_v_JULY_v的博客-CSDN博客
其实我的理解深度学习算法就和教小孩认字一样,一个孩子你老是给他写1 2 3 4 5,然后跟他说这是1,这是2,这样孩子就学会1 2 3 4 5了,同样,比如一个猫狗分类的算法网络模型,你不断的用猫和狗的图片数据去训练,然后算法模型也就知道什么是猫,什么是狗了,这是简单理解。
然后初学者想知道深度学习的流程,其实流程可以分为
- 算法训练
- 算法部署
2 算法训练
算法训练就是用图片数据和深度学习框架在有显卡的服务器上进行训练,得到算法模型。下面解释下这句话。
2.1 训练的原理
这里也用通俗易懂的语言解释,不整学术名词,其实我们的算法模型不就是神经网络吗,那神经网络里面含有很多神经元,其实一个神经元就是一个方程
那么我们的算法模型是由很多个神经元组成的,一个神经元是一个方程,那其实我们的算法模型就是一个方程组,我们训练的过程其实就是用图片数据去求方程组的系数,求出系数后,你给模型一张图片,模型方程组根据系数就能算出来模型输出也就是图片推理结果,比如一张图片,带入到方程组中,计算发现,奥,这张图片是猫。
2.2 名词解释
图片数据:这个如果是在公司里面会有专门的数据人员,负责图片的采集和标注工作,然后如果采集不到数据集,那么你可以自己用puthon去网上自己下载一些图片用作训练。比如这个python脚本:利用python批量下载百度图片_陈 洪 伟的博客-CSDN博客
深度学习框架:这个有pytorch,TensorFlow,paddle,caffe,darknet等这些框架,训练的时候需要用这些框架去训练,首先要在电脑上安装相应框架需要的环境,然后才能去训练。
显卡:我们训练要在有显卡的服务器上进行训练,至于显卡的性能要求,那当然是性能越高越好,这样训练算法越快,那么没有显卡行不行,也行,那就是用CPU训练,但是很慢。当然还有一个选择,那就是现在网上出现了一些出租算力的,可以花钱租用算力用于训练自己的算法。
python:算法训练都是用python脚本去做的,所以需要先学习python,但是初学者如果你想快速入门你不用再从零学python,因为python语法很简单,初学者基本上也是修改python脚本,甚至不用自己写脚本,所以这时候先不学也行,会修改脚本,后面有时间再学。
其实初学者像更快的入门,那直接找一个算法训练的步骤文章,然后一步步的跟着跑一遍,也就更容易理解了,可以去github上搜yolov5然后跟着步骤做一遍,也可以看我的文章:https://cumtchw.blog.csdn.net/article/details/115064641
3 算法C++部署
前面我们得到了算法模型,那么我们要把模型部署到机器上,然后用他来做推理,完成工作,工程部署一般都是用C++做部署,那么部署分为服务器部署和嵌入式终端板子部署。
3.1 嵌入式终端板子部署
3.3.1 tpu npu推理
嵌入式板子有很多厂家,比如瑞芯微的,比特大陆的(BM1684),寒武纪的(思元220),华为的(HISI3559,Atlas系列),英伟达的(xavier),那么我们首先要把我们前面训练得到的模型转换成不同厂家的模型,这时候,每个厂家都会提供相应的转换工具或转换脚本,把我们的训练模型转成不同厂家格式的模型,然后再利用不同厂家提供的推理demo完成算法模型的C++推理。
比如我们以瑞芯微的为例吧,我们训练得到了算法模型,然后我们先在电脑上安装瑞芯微的模型转换工具toolkit,然后用python脚本把我们的模型转成xxxx.rnkk格式的模型,然后厂家还会提供C++demo,然后再用C++demo完成模型的推理。其他的比特大陆/寒武纪/华为/英伟达都一个道理,只不过转换和推理的工具包不一样。
例如瑞芯微的推理部署:https://blog.csdn.net/u013171226/category_11410227.html
例如英伟达xavier的推理:https://cumtchw.blog.csdn.net/article/details/118788059
3.3.2 cpu推理
其实上面说的tpu npu情况是说我们用了现在的一些智能芯片,这些芯片内部都有专门的做深度学习推理的npu/tpu,那么如果是我们一块普通的ARM板子能跑深度学习算法吗,也是可以的,那就是用cpu推理,只不过慢而已,cpu推理的流程就和上面不一样了,这时候我们需要利用onnx/mnn/ncnn框架,我们先把训练得到的算法模型转换成onnx/mnn/ncnn模型,然后利用onnx库区做推理。例如:https://cumtchw.blog.csdn.net/article/details/128249155
又或者在一个普通的安卓手机上,你可以用ncnn框架去部署有关算法。
3.2 服务器部署
3.2.1 智能推理
这里说的智能推理我是指,我们的服务器安装了相应的智能卡,这时候服务器部署的流程就和上面板子的tpu npu推理流程一样,比如你服务器上安装了英伟达的显卡,那么我们一般就用tensorRT(TensorRT 是由英伟达公司推出的一款用于高性能深度学习模型推理的软件开发工具包)做推理,这时候我们先把训练得到的模型转成TensorRT要求的模型格式,然后再用tensorRT做算法推理。其他厂家的比如比特大陆和寒武纪还有华为,他们也有针对服务器的板卡,把它插到服务器上,然后这些厂家也会提供一些推理的工具包,然后就可以做算法的推理部署。
3.2.2 CPU推理
同样的道理,我们就一个普通电脑,没有显卡,那么这时候我们想做算法推理怎么弄,可以用onnx,也是把模型转成onnx模型,然后利用onnx库做推理。例如:https://cumtchw.blog.csdn.net/article/details/128220318
以上介绍的东西基本都能在我的博客文章里面找到具体的介绍或操作步骤。
深度学习算法训练和部署流程介绍--让初学者一篇文章理解算法训练和部署流程相关推荐
- 获取分辨率函数是什么_使用深度学习来实现超分辨率的介绍
编辑:zero 关注 搜罗最好玩的计算机视觉论文和应用,AI算法与图像处理 微信公众号,获得第一手计算机视觉相关信息 本文转载自:公众号:AI公园 作者:Bharath Raj 编译:ronghuai ...
- 深度学习与计算机视觉(CV)介绍
深度学习与计算机视觉(CV)介绍 深度学习 学习⽬标 知道什么是深度学习 知道深度学习的应⽤场景 什么是深度学习 在介绍深度学习之前,我们先看下⼈⼯智能,机器学习和深度学习之间的关系: 机器学习是实现 ...
- 深度学习笔记第二门课 改善深层神经网络 第二周:优化算法
本文是吴恩达老师的深度学习课程[1]笔记部分. 作者:黄海广[2] 主要编写人员:黄海广.林兴木(第四所有底稿,第五课第一二周,第三周前三节).祝彦森:(第三课所有底稿).贺志尧(第五课第三周底稿). ...
- [深度学习] 自然语言处理 --- Self-Attention(一) 基本介绍
[深度学习] 自然语言处理 --- Self-Attention(一) 基本介绍_小墨鱼的专栏-CSDN博客https://zengwenqi.blog.csdn.net/article/detail ...
- 【计算机视觉】计算机视觉与深度学习-01-计算机视觉相关介绍-北邮鲁鹏老师课程笔记
计算机视觉与深度学习-01-计算机视觉相关介绍 前言 图像处理 vs 计算机视觉 图像处理 计算机视觉 相关课程 计算机视觉简介 计算机视觉顶级会议 计算机视觉的目标 图像中的信息 三维场景的结构信息 ...
- 深度学习优化函数详解(5)-- Nesterov accelerated gradient (NAG) 优化算法
深度学习优化函数详解系列目录 深度学习优化函数详解(0)– 线性回归问题 深度学习优化函数详解(1)– Gradient Descent 梯度下降法 深度学习优化函数详解(2)– SGD 随机梯度下降 ...
- 《深度学习进阶 自然语言处理》书籍介绍
写在开头 前面几篇文章介绍了图灵<深度学习入门>一书,接下来将继续带读作者的另一书籍:<深度学习进阶 自然语言处理>. 在这儿我觉得非常有必要解释一下,现在社会上有这么多NLP ...
- 【深度学习(deep learning)】花书第10章 序列建模:循环和递归网络 读书笔记
[深度学习(deep learning)]花书第10章 序列建模:循环和递归网络 读书笔记 第10章 序列建模:循环和递归网络 [深度学习(deep learning)]花书第10章 序列建模:循环和 ...
- 【深度学习(deep learning)】花书第12章 应用 读书笔记
[深度学习(deep learning)]花书第12章 应用 读书笔记 第12章 应用 [深度学习(deep learning)]花书第12章 应用 读书笔记 前言 一.大规模深度学习 1.快速的CP ...
最新文章
- mysql扩展中如何处理结果集_我们如何处理MySQL存储过程中的结果集?
- Pytorch的torch.cat实例
- matlab 学习之常用函数2
- python的for语句是否只有一种写法_跟老齐学Python之for循环语句
- 如何能让mediawiki实现共享
- html中contentEditable属性
- 推荐一些可以将QQ截取的gif图片修改为循环播放的软件
- lnmp mysql 远程访问_LNMP环境下 远程连接mysql数据库
- 【ElasticSearch】Es 源码之 Transport 和 TransportService 源码解读
- 计算机函数left的用法,excel中的left函数怎么使用呢?
- Swift网络开发之NSURLSession学习笔记
- 嵌入式系统——存储管理方案
- 论文赏析[AI18]更快的基于非二叉化自底向上策略的转移系统成分句法分析
- centos 6.5环境利用iscsi搭建SAN网络存储服务及服务端target和客户端initiator配置详解...
- css 都有哪些字体,css字体有哪些
- html左侧浮动广告代码,Html+CSS浮动的广告条实现分解
- APK改之理(APK IDE)修改APK简单的入门教程
- Linux命令之文件与文件夹的拷贝
- 一维优化 方法c语言,第三章一维优化方法
- 如何阅读一本专业书?
热门文章
- SM邀请码110211获取输入方式
- 猿创征文|【开发工具-我打辅助的】2022软件开发常用辅助工具
- 子序列问-匹配子序列的单词数
- vue增删改查_Vue的SSR技术选型
- 华硕主板BIOS 不能选择某个硬盘的启动项 的解决
- Efficient Batch Processing for Multiple Keyword Queries on Graph Data
- Ubuntu 安装 CUDA11.3
- 重磅!你们一直催的 PyEcharts教程来啦
- j-link “the connected j-link is defective“问题的解决
- Gesture Recognizers与触摸事件分发