各算子库对CNN的支持

Openblas

简介

OpenBLAS 是一个优化的 BLAS 库,基于 GotoBLAS2 1.13 BSD 版本。
BLAS(Basic Linear Algebra Subprograms 基础线性代数程序集)是一个应用程序接口(API)标准,用以规范发布基础线性代数操作的数值库(如矢量或矩阵乘法)。该程序集最初发布于1979年,并用于建立更大的数值程序包(如LAPACK)。在高性能计算领域,BLAS被广泛使用。例如,LINPACK的运算成绩则很大程度上取决于BLAS中子程序DGEMM的表现。为提高性能,各軟硬件厂商则针对其產品对BLAS接口实现进行高度优化。

支持算法

内部实现了底层乘法运算,NN相关算法没有实现
内部实现的算法包括:

Level1: 标量操作、向量操作、向量-向量操作
Level2:矩阵-向量操作
Level3: 矩阵-矩阵操作

其它

  1. git 地址:https://github.com/xianyi/OpenBLAS (C实现)

CNN相关

  1. 只提供底层计算,不支持NN相关算法

MKL

简介

Intel数学核心函数库(MKL)是一套高度优化、线程安全的数学例程、函数,面向高性能的工程、科学与财务应用。英特尔 MKL 的集群版本包括 ScaLAPACK 与分布式内存快速傅立叶转换,并提供了线性代数 (BLAS、LAPACK 和Sparse Solver)、快速傅立叶转换、矢量数学 (Vector Math) 与随机号码生成器支持,常见NN算法如RN、CNN。

支持算法

  1. 官方文档:https://oneapi-src.github.io/oneDNN/index.html

  2. 解决大型计算问题,提供BLAS、LAPACK线性代数程序、快速傅里叶变换、矢量数学函数、随机数生成函数以及其它一些函数。 https://blog.csdn.net/zb1165048017/article/details/70144928?utm_medium=distribute.pc_relevant.none-task-blog-baidujs-3

  3. 数学核心函数库性能对比:https://software.intel.com/content/www/cn/zh/develop/articles/book-multicore-multithread-technology_mkl_math_kernel_library.html

CNN相关

  1. CNN使用实例:https://oneapi-src.github.io/oneDNN/cnn_inference_int8_cpp.html
  2. 通过cpp实现,实现代码:MKL-DNN/src/common/convolution.cpp
  3. 内部的封装有些复杂

其它

  1. git地址:https://github.com/oneapi-src/oneDNN(C++实现)

Tengine

简介

OPEN AI LAB开发了一款轻量级模块化的高性能神经网络推理引擎-Tengine,专门针对Arm嵌入式设备优化,提供超过所有已知开源框架的无与伦比的性能,可跨平台使用支持Android,Linux。
并且Tengine框架不依赖于专用AI芯片,现有的成熟芯片通过Tengine框架可以把算力挖掘出来,在本地进行一些AI应用的处理,从而提高了芯片性能,并降低成本。
Tengine同时还支持各类常见卷积神经网络,包括SqueezeNet,MobileNet,AlexNet,ResNet等,支持层融合、8位量化等优化策略。并且通过调用针对不同CPU微构架优化的HCL库,将Arm CPU的性能充分挖掘出来。

针对不同的模型,单独解析,最后推理

CNN相关

  1. 推理框架
  2. 实现了卷积计算,但是内部通过for循环实现(engine/source/Tengine/executor/operator/ref/kernel/convolution/ref_conv_int8.c)针对arm有汇编优化
  3. 内部代码封装很好,添加推理算法比较简单

其它

  1. git地址:https://github.com/OAID/Tengine/(C++实现)

NNCN

简介

ncnn 是一个为手机端极致优化的高性能神经网络前向计算框架。ncnn 从设计之初深刻考虑手机端的部署和使用。无第三方依赖,跨平台,手机端 cpu 的速度快于目前所有已知的开源框架。基于 ncnn,开发者能够将深度学习算法轻松移植到手机端高效执行,开发出人工智能 APP,将 AI 带到你的指尖。ncnn 目前已在腾讯多款应用中使用,如 QQ,Qzone,微信,天天P图等。

支持大部分常用的 CNN 网络
Classical CNN: VGG AlexNet GoogleNet Inception ...
Practical CNN: ResNet DenseNet SENet FPN ...
Light-weight CNN: SqueezeNet MobileNetV1/V2/V3 ShuffleNetV1/V2 MNasNet ...
Detection: MTCNN facedetection ...
Detection: VGG-SSD MobileNet-SSD SqueezeNet-SSD MobileNetV2-SSDLite ...
Detection: Faster-RCNN R-FCN ...
Detection: YOLOV2 YOLOV3 MobileNet-YOLOV3 YOLOV4...
Segmentation: FCN PSPNet UNet ...
针对不同的模型,单独解析,最后推理

CNN 相关

  1. 推理框架,手机端极致优化
  2. 和Tengine类似,卷积计算,针对arm有汇编优化(ncnn/src/layer/arm)

其它

  1. git地址:https://github.com/Tencent/ncnn(C++实现)

MindSpore

简介

MindSpore是一个新的开源深度学习训练/推理框架,可用于移动、边缘和云场景。MindSpore旨在为数据科学家和算法工程师提供友好设计和高效执行的开发经验,为Ascend AI处理器提供本地支持,以及软硬件协同优化。同时,MindSpore作为一个全球性的人工智能开源社区,旨在进一步推进人工智能软硬件应用的开发和丰富生态系统.MindSpore是一个新的开源深度学习训练/推理框架,可用于移动、边缘和云场景。

https://www.mindspore.cn/docs/zh-CN/master/operator_list.html

其它

  1. git地址:https://github.com/mindspore-ai/mindspore(Python实现)

傅里叶变换

  1. 为什么现在对图像边缘的处理大多数是用卷积而不是傅里叶变换?
    一是算法复杂度没有相比卷积没有优势,二是可能会引入高频分量干扰。
    参考:https://mangoroom.cn/algorithm/why-convolution-not-fft.html

你可能感兴趣的:(各算子库对CNN的支持)