程序员老潘的干货资源分享

恭喜你,终于找到这里了。

这里收集了老潘总结的深度原创文珍藏的资料,相信可以帮助到你。一定要看到文末,文末有惊喜哦。

成长的路上

列一下博客的关键词:深度学习、神经网络、模型部署落地、服务器推理、Pytorch、TensorRT、Caffe、Python、C++、算法等。

如果这里刚好有你需要的,能够帮助到你,我会非常开心(PS:内心无比激动~)。这里的每一篇文章都值得你精读,每周都会更新,有关算法工程师和模型部署工程师的学习路线在文末。

老潘本潘

老潘不是严格的算法工程师,虽然也训练一些模型,但是对模型部署产品落地更为感兴趣,也做过一些开发的工作,编程语言关键词如下:

  • C++|Python|Javascript|PHP|lua|C#|swift

个人最喜欢C++和Python,这两个也较为熟练一些。最初的我,对编程语言也会有一些奇怪的看法(例如:XX是世界上最好的语言!),久而久之发现:编程语言其实没有高低贵贱之分(嗯,编程语言也是有情绪的),每一门语言是为完成不同的任务所设计,各自完成不同的使命。我们不但要精通自己领域所擅长的语言,也更需勇于尝试和探索新的语言,发现它们的美。

编程语言其实都是有共通性的,学好任何一门编程语言(例如C),再去上手其他语言差不多是轻而易举的。大部分的项目都会需要各种语言去构建,各司其职,彼此搭配才能够完成的更好。

话说回来,如果你对如何成为算法工程师感兴趣,或者想了解模型部署落地开发的具体工作内容如何去开始,亦或是有一些其他编程方面的问题,欢迎到公众号私信我(相信你能找到我),有求必应。

以下几篇文章有一些自己之前的感悟(现在已经工作啦),希望能帮助到和我经历相似的童鞋们。

  • CV算法内卷严重,但是我们可以看看视觉算法工业部署及落地方面的技术知识
  • 深度学习快一年,作为研究生,谈谈自己的感受
  • 浅谈深度学习的落地问题
  • 个人关于CV算法秋招的感想(内有面经)

接下来也会整理一篇深度学习落地部署的文章,以及算法工程师的学习攻略,感兴趣的不要错过~

废话不多说,干货走起。

文章汇总:

创作不易,坚持周更,关注「oldpan博客」不错过推文。

  • 博客原址:oldpan.me

理论分析派

深度学习相关。

  • 解密Deepfake(深度换脸)-基于自编码器的(Pytorch代码)
  • 一文来了解目标检测/图像分割/coco数据集检测评价标准
  • (深度文)马尔科夫随机场(MRF)在图像处理中的应用-图像分割、纹理迁移
  • (深度文)扔掉anchor!真正的CenterNet——Objects as Points论文解读
  • 封藏的SSD(Single Shot MultiBox Detector)笔记
  • 如何根据训练/验证损失曲线诊断我们的CNN
  • 关于训练神经网路的诸多Trick(完全总结版)
  • 深度学习为什么需要那么多的数据?
  • 理解深度学习:神经网络的双胞胎兄弟-自编码器(上)
  • 浅谈深度学习:如何计算模型以及中间变量的显存占用大小
  • 再次浅谈Pytorch中的显存利用问题(附完善显存跟踪代码)
  • 深度学习中数据集很小是一种什么样的体验
  • 深度学习图像分割(一)—PASCAL-VOC2012数据集(vocdevkit、Vocbenchmark_release)介绍
  • 深度学习图像分割(二)——如何制作自己的PASCAL-VOC2012数据集
  • 浅谈深度学习中超参数调整策略

工程实战派

光有理论哪儿够,落地部署实战才是最重要的。

  • 让VScode和大型IDE一样牛逼?利用VScode和Cmake编译插件构建C++工程
  • 各种姿势的debug(从python一路debug到C++)
  • OpenVino初探(实际体验)

Pytorch篇

适合Pytorch进阶的文章:

  • 浅谈pytorch与torch的关系
  • 解密Deepfake(深度换脸)-基于自编码器的(Pytorch代码)
  • 一个Tensor的生命历程(Pytorch版)-上篇
  • 一个Tensor的生命历程(Pytorch版)-下篇
  • Pytorch的C++端(libtorch)在Windows中的使用
  • 利用Pytorch的C++前端(libtorch)读取预训练权重并进行预测
  • 如何在Pytorch中正确设计并加载数据集
  • Pytorch拓展进阶(一):Pytorch结合C以及Cuda语言
  • Pytorch拓展进阶(二):Pytorch结合C++以及Cuda拓展
  • 探讨pytorch中nn.Module与nn.autograd.Function的backward()函数
  • 在pytorch中实现与TensorFlow类似的"same"方式padding

TensorRT篇

很有质量的TensorRT文章:

  • 利用TensorRT对深度学习进行加速
  • 利用TensorRT实现神经网络提速(读取ONNX模型并运行)
  • 实现TensorRT自定义插件(plugin)自由!

TVM

TVM不多说了,自动调优神经网络编译器,神器。

  • 一步一步解读神经网络编译器TVM(一)——一个简单的例子
  • 一步一步解读神经网络编译器TVM(二)——利用TVM完成C++端的部署

Caffe

多么经典的Caffe。

  • 利用Caffe推理CenterNet(上篇)

  • 利用Caffe推理CenterNet(下篇)

编程技能篇

工欲善其事必先利其器。

C++

  • C++小知识系列之“父类指针”和dynamic_cast!
  • 写给大家看的设计模式(上)
  • 写给大家看的设计模式(中)
  • 写给大家看的设计模式(下)

Python

  • python提高效率的调试方法技巧(一)

实用工具工具

  • Mac mini M1使用简单体验(编程、游戏、深度学习)
  • 如何利用好FASTAI——新版本fastai-v1.0快速入门

关于显卡与深度学习装备

部分已过时,不过仍有参考意义!

  • 新显卡出世,我们来谈谈与深度学习有关的显卡架构和相关技术

  • 给你一份配置清单:机器学习、深度学习电脑显卡配置指南

有趣好玩的项目推荐

正在整理ing...

学习路线以及书籍资源:

如果你是新手,看完此攻略可以让你少走N段弯路~

深度学习学习路线

基本路线《统计学习方法》->《机器学习花书》->《深度学习花书》。课程可以看李宏毅和吴恩达的入门课。非常不建议只看书籍,最好配上项目实战,边学边做

有时间一定要需要看的书籍:

  • 程序员的数学系列,适合重温知识,回顾一些基础的线性代数、概率论。
  • 深度学习花书,总结类书,有基础知识的讲解,比较全面。
  • 统计学习方法,总结类书,篇幅不长,都是核心。
  • Pattern Recognition and Machine Learning,条理清晰,用贝叶斯的方式来讲解机器学习。
  • 机器学习西瓜书,适合当教材,内容较广但是不深。

另外推荐大家一本叫做《百面机器学习》的新书,2018年8月份出版的,其中包括了很多机器学习、深度学习面试过程中会遇到的问题,比较适合需要准备面试的机器学习、深度学习方面的算法工程师。

深度学习部署落地

老潘认为算法部署落地这个方向是比较踏实务实的方向,相比“设计模型提出新算法”,对于咱们这种并不天赋异禀的普通人(哈哈,咱们要谦虚)来说,只要你肯付出,收获是肯定有的(不像设计模型,那些巧妙的结果设计不出来就是设计不出来你气不气)。其实算法部署也算是开发了,不仅需要和训练好的模型打交道,有时候也会干一些粗活累活(也就是dirty work),自己用C++、cuda写算子(预处理、op、后处理等等)去实现一些独特的算子。算法部署最常用的语言是啥,当然是C++了,C++虽然复杂,但是由于优异的性能和各种特性(类对象、元编程等),被很多推理框架作为backbone的语言。

部署落地这方面需要学习需要做的事情还是蛮多的。最好还是以项目作为驱动,或者找一些开源的推理部署框架练练手,找一两个开源项目玩玩,找找感觉,自己也就逐渐有方向了。

例如NCNN(优秀)、MNN(牛逼)等框架(还有很多框架这里不一一列举了额),是针对移动端进行部署进行优化的推理引擎,对ARM核进行了优化,如果你想做和移动端或者嵌入式端有关系的,可以看看这两个框架的源码,跑一两个demo找找感觉,另外还有Openvino和TensorRT,分别是对应cpu和gpu端的首推框架(想详细了解可以参考我之前的文章),可以找相关的项目去做做。

部署的流程一般就是:

  • 训练一个模型,也可以是拿一个别人训练好的模型
  • 针对不同平台生成的模型进行转换,也就是俗称的parse、convert,前端解释器
  • 针对转化后的模型进行优化,这一步很重要,涉及到很多优化的步骤
  • 将转化好的模型运行在特定的平台(嵌入端或者服务端)

需要掌握什么技术,学好C++很重要,起码能看懂各种关于部署精巧设计的框架(再列一遍:Caffe、libtorch、ncnn、mnn、tvm、openvino、tensorrt,不完全统计,我就列过我用过的)。当然并行计算编程语言也可以学一个,针对不同的平台而不同,可以先学学cuda,资料更多一些,熟悉熟悉并行计算的原理,对以后学习其他并行语言都有帮助。

部署和落地的重要性...当然是很重要呃,对于硬件公司来说,需要将深度学习算法部署到性能低到离谱的开发板上,因为成本能省就省,这时就需要部署了。在算法层面优化模型是一方面,但更重要的是从底层优化这个模型,这就涉及到部署落地方面的各个知识(手写汇编算子加速、算子融合等等);对于软件公司来说,我们往往需要将算法运行到服务器上,当然服务器可以是布满2080TI的高性能CPU机器,但是如果QPS请求足够高的话,需要的服务器数量也是相当之大的。这个要紧关头,如果我们的模型运行的足够快...可以省机器又可以腾一些buffer上新模型岂不很爽,这个时候也就需要优化模型了,其实优化手段也都差不多,只不过平台从arm等嵌入式端变为gpu等桌面端了。

系统的知识嘛,有是有,不过实际中都是用到啥再看啥,有项目在push你,个人建议直接上手项目,没有自己找找,按需学习。

这里简单总结下可以选择上手:

  • 好用的开源推理框架:caffe NCNN、MNN、TVM
  • 好用的开源推理框架:Openvino、TensorRT(infer不开源)
  • 好用的开源服务器框架:triton-server
  • 好用又不好用的编程语言:C++、CUDA、python

基础知识:计算机原理 编译原理等

后记

以上的路线介绍可能不够详细,更多详细的路线会单独发文,请关注~

书籍路线

作为程序员,相关技能书籍是必不可少的,敲代码累的时候看看书轻松一下(???)也是极为不错的。

书不可贪多,贪多嚼不烂,切记切记。

书籍路线正在完善中,完善后发布~

推荐一个看书神器

看书神器如下,不光是看书,看论文都舒服多了:

看书神器电纸书

上述是国产文石BOOX-MAX2电纸书,相当于大号Kindle,看论文pdf文档绝配!关于此书的评价可以看:

  • 文石Boox-Max2电纸书开箱评价

PS:老潘自己收集了很多书籍,但是苦于没有整理,公众号回复666可获得已经整理好的书籍和视频资料。其余的正在逐步整理中。

公众号

公众号名称是oldpan博客oldpan博客oldpan博客!重要的事情说三遍。

如果你不满足于上述,请直接公众号私信联系我,不要害羞兄弟!有问必答。

交流群

进交流群的请私信公众号,回复“加群”即可。

交流一下吗?

如果你与我志同道合于此,老潘很愿意与你交流;如果你喜欢老潘的内容,欢迎关注和支持。博客每周更新一篇深度原创文,关注「oldpan博客」不错过最新文章。老潘也会整理一些自己的私藏,希望能帮助到大家,在公众号回复相应code即可:

  • 回复"888"获取学习路线资料与文章汇总
  • 回复"666"获取老潘整理好的必看编程书籍和视频资料
  • 回复"001"获取机器学习经典论文集
  • 回复"002"获取面试宝典秘籍
  • 回复"004"获取人工智能必看经典论文合集
  • 回复"005"获取人工智能入门视频
  • 回复"006"获取CUDA珍藏笔记
  • 回复"007"获取CS231N经典课件汇总

如果不想错过老潘的最新推文,请点击神秘链接。

你可能感兴趣的:(程序员老潘的干货资源分享)