视觉工程师入门TensorFlow的项目与资源合集
如同学习其它任何新技能一样,掌握深度学习并无捷径可循。布满墨迹的A4纸张,屏幕上不断生长的代码,冒着呼呼热气的GPU,都是你成长道路上所付出努力的证明。
深度学习很复杂,涉及到的知识点范围跨度大,分布零散。从最基础的卷积算法到TensorFlow高阶API封装,每个知识点都仿佛一朵绽放的重瓣菊花,既可以向下深挖知识原理,又可以发散到不同的维度开启组合优化。新手入门,仿佛闯入布满镜子的迷宫,一眼望去到处是看不到尽头的知识,只知终点一定隐藏在迷宫深处。
但是,没有捷径并不意味着只能两眼一闭摸黑乱撞。走过迷宫的先驱者们或多或少都会留下探索的痕迹。跟随他们的脚印,踏实地走好每一步,是新手高效学习之光。
基础知识
不积跬步,无以至千里
什么是分辨率?什么是色彩?如何数字化一张图像?如果你对这些概念的含义还拿不准的话,请先观看计算机视觉入门视频。兵马未动,粮草先行。
这些视频的定位并非要实现全面无遗漏的介绍,而是希望从简单的概念着手,尽量避免使用生涩的专业词汇,力求让不具备专业背景知识的人也能够在看完视频后发出“哦,原来是这样!”的感叹。
所以,在视频表达方式的天平上,通俗易懂胜过专业严谨。不过不要担心,每段视频的发布页面会尽可能将视频中涉及到的专业参数的引用来源列出,供有需要的人士查询。
精选项目
临渊羡鱼,不如退而结网
跟随精选实战项目一步一步入门TensorFlow。本章节的每个项目都是从数据到模型的完整实现,知识点逐渐增加,难度逐渐上升。不要着急,慢慢来。
拯救火星邮局 - 你的第一个神经网络
MNIST是一个由人类手写数字图像构成的数据集。它的作者为Yann LeCun、Corinna Cortes与Christopher J.C. Burges。该数据集曾被用作分类算法的开发与评估。给定任一张图像,给出该图像对应的数字。深度学习的入门教程普遍以该任务为实例。它足够简单——包含10个类别的图像分类问题;同时又足够复杂——人类手写的数字可以非常潦草、难以辨认。
这篇教程同样以MNIST为实验内容载体。不过与其它教程不同的地方在于,你将真正意义上从零开始,一步一步实现一个功能完备的深度学习项目。
- 交互视频:拯救火星邮局
- 代码:MNIST_From_Zero_To_Hero
卷积神经网络
从超过20万张图像样本中学习人脸特征点的分布规律。学习TensorFlow Record文件的生成。掌握TensorFlow卷积层的使用方法,构建经典神经网络架构。克服姿态、光照、遮挡等不利因素,最终实现头部姿态的视频实时检测。
- 代码:https://github.com/yinguobing/cnn-facial-landmark
- 推荐阅读:Convolutional Neural Networks (Stanford)
- 背景故事:我为何要创作深度学习人脸特征点检测系列
卷积神经网络(进阶)
构建更加先进、复杂的神经网络架构。借用数据增强强化模型:随机旋转、翻转、缩放。掌握模型优化手段:剪枝与量化。
物体检测(专题)
向经典的物体检测方案学习,掌握关键核心概念:anchor,FPN。理解深度卷积神经网络在检测方案中扮演的角色。
人脸识别(专题)
揭开人脸识别原理的神秘面纱,了解技术链条中不同阶段的实现背景,获取98%+准确率的自有人脸识别模型。
迷你项目
细节决定成败
探索众多迷你项目,点亮技能点,为今后的实战项目做好准备。
深度学习有着大量的零散的知识点与技能。但是这些小小的技能点在关键时刻可以起到大用处。有空的时候来看看,也许会受到不一样的启发。
模型拼接
掌握构建模型的不同方式,在项目中灵活应用。
- 参考文档:The Sequential model
从OpenImages数据集中提取人脸图像
项目遇到数据短缺问题,如何从现有的公开数据集中获取资源。提取包含人脸的图像以及边界框的位置坐标。
读写自定义TFRecord文件
高效存储读取训练用文件,掌握TensorFlow Record文件的创建、读取与解析方法。
随机化大型数据集
使用大型数据集训练模型面临一个不可忽略的问题:如何有效地随机化数据。
使用Checkpoint保存训练进度
灵活使用Checkpoint,保存训练进度与自定义对象。
官方文档
在训练过程中保存模型预测的图像
如何在训练进行中直观地检查模型表现。
- 文章:如何在TensorBoard中记录图像
- 代码:https://github.com/yinguobing/facial-landmark-detection-hrnet/blob/master/callbacks.py
- 官方文档:Writing your own callbacks
模型剪枝(参数分布稀疏化)
如何大幅度减小模型体积,却只牺牲少量性能?
- 文章:https://yinguobing.com/tensorflow-model-pruning/
- 代码:https://github.com/yinguobing/facial-landmark-detection-hrnet/blob/master/pruning.py
- 官方文档:Weight pruning
模型量化(参数范围离散化)
将你的模型移植到特殊的硬件设备中运行。
- 文章:TensorFlow模型量化
- 代码:https://github.com/yinguobing/facial-landmark-detection-hrnet/blob/master/quantization.py
- 官方文档:Quantization
为Apple设备转换模型
为你的同事准备好一款让他们放心的模型。
- 代码:https://github.com/yinguobing/facial-landmark-detection-hrnet/blob/master/coreml_conversion.py
- 官方文档:coremltools User Guides and Examples
其它资源
我平时搜集的实用外部资源
GPU运算环境搭建
如果你希望使用图形界面:
如果你需要在无图形界面的远程服务器:
机器学习术语表
由Google整理发布的术语表,包含中文版本。
深度理解深度学习
通过可交互与可视化的方式深入理解深度学习。
无法测量就无法进步
深度学习视觉工程师技能树
查漏补缺,照猫画虎。
数据集
与以上项目相关的公开数据集。
调参经验
三人行必有我师。
开发者
一对一交流
Get in touch
有话想对我说?你可以选择以下几种方式。
- GitHub开issue。适合与项目代码相关的技术问题。我基本上每天都会查看GitHub,这是最快的方式。
- 发邮件给我。如果你不想让其他人看到你提出的问题。我会定期查阅邮件。
- 向“流浪AI”公众号发送信息,我都看得到。
如果你足够幸运,也许能找到我的个人微信。