Skip to content

Commit

Permalink
feat: add Summary of Lightweight Network Models doc
Browse files Browse the repository at this point in the history
  • Loading branch information
HarleysZhang committed Nov 10, 2022
1 parent ab11481 commit 5af0c48
Show file tree
Hide file tree
Showing 9 changed files with 45 additions and 12 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,9 @@

## 1,介绍

虽然已经出现了 `MobileNetv1/v2/v3``ShuffleNetv1/v2` 这种为移动端(CPU)设计的轻量级网络,但是它们所采用的基础技术-深度可分离卷积技术并不适用于 `NPU` 芯片(基于专用集成电路 (ASIC) 的边缘计算系统)。
虽然已经出现了 `MobileNetv1/v2/v3``ShuffleNetv1/v2` 这种为移动端(`CPU`)设计的轻量级网络,但是它们所采用的基础技术-深度可分离卷积技术并不适用于 `NPU` 芯片(基于专用集成电路 (`ASIC`) 的边缘计算系统)。

CSPNet 和不同 backbone 结合后的效果如下图所示。
`CSPNet` 和不同 `backbone` 结合后的效果如下图所示。

![和分类backbone结合后的效果](../../data/images/CSPNet/和分类backbone结合后的效果.png)

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
## 目录
- [目录](#目录)
- [1、相关工作](#1相关工作)
- [标准卷积](#标准卷积)
- [分组卷积](#分组卷积)
Expand All @@ -14,6 +15,8 @@
- [3、实验](#3实验)
- [4、结论](#4结论)
- [5、基准模型代码](#5基准模型代码)
- [个人思考](#个人思考)
- [后续改进-MobileDets](#后续改进-mobiledets)
- [参考资料](#参考资料)

> `MobileNet` 论文的主要贡献在于提出了一种**深度可分离卷积架构(DW+PW 卷积)**,先通过理论证明这种架构比常规的卷积计算成本(`Mult-Adds`)更小,然后通过分类、检测等多种实验证明模型的有效性。
Expand Down Expand Up @@ -270,11 +273,26 @@ if __name__ == "__main__":
程序运行结果如下:
> Model output size is torch.Size([1, 1000])
## 个人思考

在降低 `FLOPs` 计算量上,`MobileNet` 的网络架构设计确实很好,但是 `MobileNet` 模型在 `GPU``DSP``TPU` 硬件上却不一定性能好,原因是不同硬件进行运算时的行为不同,从而导致了 **`FLOPs`少不等于 `latency`**的问题。

如果要实际解释 `TPU``DSP` 的运作原理,可能有点麻烦,可以参考下图,从结果直观地理解他们行为上的差异。考虑一个简单的 `convolution`,在 `CPU``latency` 随着 `input``output``channel` 上升正相关的增加。然而在 `DSP` 上却是阶梯型,甚至在更高的 `channel` 数下存在特别低`latency` 的甜蜜点。

![Convolution在CPU与DSP的行为差异](../../data/images/mobilenetv1/Convolution在CPU与DSP的行为差异.png)

在一定的程度上,网络越深越宽,性能越好。宽度,即通道(`channel`)的数量,网络深度,即 `layer` 的层数,如 `resnet18``18` 个卷积层。注意我们这里说的和宽度学习一类的模型没有关系,而是特指深度卷积神经网络的(**通道**)宽度。

- **网络深度的意义**:CNN 的网络层能够对输入图像数据进行逐层抽象,比如第一层学习到了图像边缘特征,第二层学习到了简单形状特征,第三层学习到了目标形状的特征,网络深度增加也提高了模型的抽象能力。
- **网络宽度的意义**:网络的宽度(通道数)代表了滤波器(3 维)的数量,滤波器越多,对目标特征的提取能力越强,即让每一层网络学习到更加丰富的特征,比如不同方向、不同频率的纹理特征等。
## 后续改进-MobileDets

## 参考资料

1. [Group Convolution分组卷积,以及Depthwise Convolution和Global Depthwise Convolution](https://www.cnblogs.com/shine-lee/p/10243114.html)
2. [理解分组卷积和深度可分离卷积如何降低参数量](https://zhuanlan.zhihu.com/p/65377955)
3. [深度可分离卷积(Xception 与 MobileNet 的点滴)](https://www.jianshu.com/p/38dc74d12fcf)
4. [MobileNetV1代码实现](https://www.cnblogs.com/linzzz98/articles/13453810.html)
5. [Depthwise卷积与Pointwise卷积](https://zhuanlan.zhihu.com/p/80041030)
6. [【CNN结构设计】深入理解深度可分离卷积](https://mp.weixin.qq.com/s/IZ-nbrCL8-9w32RSYeP_bg)
6. [【CNN结构设计】深入理解深度可分离卷积](https://mp.weixin.qq.com/s/IZ-nbrCL8-9w32RSYeP_bg)
7. [MobileDets: FLOPs不等于Latency,考量不同硬体的高效架构](https://medium.com/ai-blog-tw/mobiledets-flops%E4%B8%8D%E7%AD%89%E6%96%BClatency-%E8%80%83%E9%87%8F%E4%B8%8D%E5%90%8C%E7%A1%AC%E9%AB%94%E7%9A%84%E9%AB%98%E6%95%88%E6%9E%B6%E6%A7%8B-5bfc27d4c2c8)
9 changes: 9 additions & 0 deletions 5-deep_learning/轻量级网络论文解析/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
## 轻量级网络模型总结

最近复习了下以前看的 `mobilenet` 系列、`MobileDets``shufflenet` 系列、`cspnet``vovnet``repvgg` 等模型,做了以下总结:
1. 低算力设备-手机移动端 cpu 硬件,考虑 mobilenetv1(深度可分离卷机架构-低 FLOPs)、shuffletnetv2(低 FLOPs 和 MAC)
2. 专用 asic 硬件设备-npu 芯片(地平线x3/x4等、海思3519、安霸cv22等),目标检测问题考虑cspnet网络(减少重复梯度信息)、repvgg(直连架构-部署简单,量化后有掉点风险)
3. 英伟达gpu硬件-t4 芯片,考虑 repvgg 网络(类 vgg 卷积架构-高并行度带来高速度、单路架构省显存/内存)
4. 在大多数的硬体上,`channel` 数为 `8` 的倍数比较有利高效计算。

以上,均是看了轻量级网络论文总结出来的一些**高效模型设计思路**,实际结果还需要自己手动运行测试。
Original file line number Diff line number Diff line change
Expand Up @@ -192,13 +192,17 @@ Table 7: Performance on COCO object detection. The input image size is 800 1200.

## 5、结论

我们建议对于轻量级网络设计应该考虑直接 `metric`(例如速度 speed),而不是间接 metric(例如 `FLOPs`)。本文提出了实用的原则和一个新的网络架构-ShuffleNet v2。综合实验证了我们模型的有效性。我们希望本文的工作可以启发未来的网络架构设计可以更重视平台特性和实用性。

我们建议对于轻量级网络设计应该考虑**直接** `metric`(例如速度 `speed`),而不是间接 `metric`(例如 `FLOPs`)。本文提出了实用的原则和一个新的网络架构-ShuffleNet v2。综合实验证了我们模型的有效性。我们希望本文的工作可以启发未来的网络架构设计可以更重视平台特性和实用性。
> 这里的直接 `metric`,可以是inference time or latency,也可以是模型推理速度 `speed`,其意义都是一样的。
>
## 6,个人思考

分析模型的推理性能得结合具体的推理平台(常见如:英伟达GPU、移动端ARM CPU、端侧NPU芯片等),目前已知影响推理性能的因素包括: 算子计算量 FLOPs(参数量 Params)、算子内存访问代价(访存带宽)。
分析模型的推理性能得结合具体的推理平台(常见如:英伟达 `GPU`、移动端 `ARM CPU`、端侧 `NPU` 芯片等),目前已知影响**推理性能**的因素包括: 算子计算量 `FLOPs`(参数量 `Params`)、算子内存访问代价(访存带宽)。但相同硬件平台、相同网络架构条件下, `FLOPs` 加速比与推理时间加速比成正比。

举例:对于 `GPU` 平台,`Depthwise` 卷积算子实际上是使用了大量的低 `FLOPs`、高数据读写量的操作。这些具有高数据读写量的操作,加上 `GPU` 的访存带宽限制,使得模型把大量的时间浪费在了从显存中读写数据上,导致 `GPU` 的算力没有得到“充分利用”。结论来源知乎文章-[FLOPs与模型推理速度](https://zhuanlan.zhihu.com/p/122943688)

最后,目前 `AI` 训练系统已经有了一个公认的评价标准和平台-`MLPerf`,但是 `AI` 推理系统的评估,目前还没有一个公认的评价指标。`Training` 系统的性能可以使用“达到特定精度的时间”这个简单的标准来衡量。但 `Inference` 系统却很难找到一个简单的指标,`Latency``Throughput``Power``Cost` 等等,哪个指标合适呢?目前没有统一的标准。

举例:对于 GPU 平台,Depthwise 卷积算子实际上是使用了大量的低 FLOPs、高数据读写量的操作。这些具有高数据读写量的操作,加上 GPU 的访存带宽限制,使得模型把大量的时间浪费在了从显存中读写数据上,导致GPU 的算力没有得到“充分利用”。结论来源这里。
## 参考资料

1. [Group Convolution分组卷积,以及Depthwise Convolution和Global Depthwise Convolution](https://www.cnblogs.com/shine-lee/p/10243114.html)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@

- `MAC` 对能耗的影响超过了计算量 `FLOPs` [28]
- 卷积层输入输出通道数相等时,`MAC` 取得最小值。
- 即使模型参数量一致,只要 MAC 不同,那么模型的运行时间也是不一致的(ShuffleNetv2 有实验证明)。
- 即使模型参数量一致,只要 `MAC` 不同,那么模型的运行时间也是不一致的(ShuffleNetv2 有实验证明)。

> 论文 [28] Designing energy-efficient convolutional neural networks using energyaware pruning.
Expand Down
5 changes: 3 additions & 2 deletions 6-computer_vision/计算机视觉知识点汇总.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@
2. [Jetson Zoo](https://developer.nvidia.com/embedded/community/jetson-projects#fruit_quality_control)
3. [ModelZOO](https://modelzoo.co/)
4. [MediaPipe 框架](https://google.github.io/mediapipe/)
5. [Deci's Hardware Aware Model]()
5. [Deci's Hardware Aware Model](https://deci.ai/)
> 1. `Papers with code` 是由 `Meta AI Research` 团队主导的一个开放资源的社区,汇集了深度学习论文、数据集、算法代码、模型以及评估表。
> 2. `Jetson Zoo`,是一个开源目录,其中包含在 `NVIDIA Jetson` 硬件平台上开发指南以及**参考案例**分享汇总。模型库资源里包括图像分类、目标检测、语义分割和姿势估计等方向的实践分享,提供**开源代码**和开发指南文章的链接。
> 3. `Model Zoo` 包含了机器学习各领域的算法框架及预训练模型资源汇总,其中包括 `TensorFlow``PyTorch``Keras``Caffe`等框架,作者是 `Google` 的机器学习研究员的`Jing Yu Koh`构建。
Expand Down Expand Up @@ -135,7 +135,8 @@
1. [ROC和AUC介绍以及如何计算AUC](http://alexkong.net/2013/06/introduction-to-auc-and-roc/ "ROC和AUC介绍以及如何计算AUC")
2. [COCO目标检测测评指标](https://www.jianshu.com/p/d7a06a720a2b "COCO目标检测测评指标")
3. [如何评测AI系统?](https://zhuanlan.zhihu.com/p/37098055)

4. [PLASTER:一个与深度学习性能有关的框架](https://zhuanlan.zhihu.com/p/38315051)
5. [The Correct Way to Measure Inference Time of Deep Neural Networks](https://towardsdatascience.com/the-correct-way-to-measure-inference-time-of-deep-neural-networks-304a54e5187f)
## 语义分割

1. [2019年最新基于深度学习的语义分割技术讲解](https://mp.weixin.qq.com/s/ektiUl_H_JlUJdaba-NGsw)
Expand Down
5 changes: 3 additions & 2 deletions 8-model_deploy/推理框架/TensorRT基础笔记.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@

延迟和吞吐量的一般解释:

+ 延迟 (`Latency`): 指执行一个操作所花的时间
+ 吞吐量 (`Throughput`): 在单位时间内,可执行的运算次数
+ 延迟 (`Latency`): 人和机器做决策或采取行动时都需要反应时间。延迟是指**提出请求与收到反应之间经过的时间**。大部分人性化软件系统(不只是 AI 系统),延迟都是以**毫秒**来计量的
+ 吞吐量 (`Throughput`): 在给定创建或部署的深度学习网络规模的情况下,可以传递多少推断结果。即在一个时间单元(如:一秒)内网络能处理的最大输入样例数
## 二,TensorRT 工作流程

在描述 `TensorRT` 的优化原理之前,需要先了解 `TensorRT` 的工作流程。首先输入一个训练好的 `FP32` 模型文件,并通过 `parser` 等方式输入到 `TensorRT` 中做解析,解析完成后 `engin` 会进行计算图优化(优化原理在下一章)。得到优化好的 `engine` 可以序列化到内存(`buffer`)或文件(`file`),读的时候需要反序列化,将其变成 `engine`以供使用。然后在执行的时候创建 `context`,主要是分配预先的资源,`engine``context` 就可以做推理(`Inference`)。
Expand All @@ -28,3 +28,4 @@
1. [内核融合:GPU深度学习的“加速神器”](https://www.msra.cn/zh-cn/news/features/kernel-fusion-20170925)
2. [高性能深度学习支持引擎实战——TensorRT](https://zhuanlan.zhihu.com/p/35657027)
3. 《NVIDIA TensorRT 以及实战记录》PPT
4. https://www.tiriasresearch.com/wp-content/uploads/2018/05/TIRIAS-Research-NVIDIA-PLASTER-Deep-Learning-Framework.pdf
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit 5af0c48

Please sign in to comment.