import onnx
import numpy as np
import tvm
import tvm.relay as relay
from tvm.contrib.download import download_testdata
######################################################################
# Load pretrained ONNX model
# ---------------------------------------------
# The example super resolution model used here is exactly the same model in onnx tutorial
# http://pytorch.org/tutorials/advanced/super_resolution_with_caffe2.html
# we skip the pytorch model construction part, and download the saved onnx model
model_url = ''.join(['https://gist.github.com/zhreshold/',
'bcda4716699ac97ea44f791c24310193/raw/',
'93672b029103648953c4e5ad3ac3aadf346a4cdc/',
'super_resolution_0.2.onnx'])
model_path = download_testdata(model_url, 'super_resolution.onnx', module='onnx')
# now you have super_resolution.onnx on disk
onnx_model = onnx.load(model_path)
######################################################################
# Load a test image
# ---------------------------------------------
# A single cat dominates the examples!
from PIL import Image
img_url = 'https://github.com/dmlc/mxnet.js/blob/master/data/cat.png?raw=true'
img_path = download_testdata(img_url, 'cat.png', module='data')
img = Image.open(img_path).resize((224, 224))
img_ycbcr = img.convert("YCbCr") # convert to YCbCr
img_y, img_cb, img_cr = img_ycbcr.split()
x = np.array(img_y)[np.newaxis, np.newaxis, :, :]
######################################################################
# Compile the model with relay
# ---------------------------------------------
target = 'llvm'
input_name = '1'
shape_dict = {input_name: x.shape}
mod, params = relay.frontend.from_onnx(onnx_model, shape_dict)
with relay.build_config(opt_level=1):
intrp = relay.build_module.create_executor('graph', mod, tvm.cpu(0), target)
######################################################################
# Execute on TVM
# ---------------------------------------------
dtype = 'float32'
tvm_output = intrp.evaluate()(tvm.nd.array(x.astype(dtype)), **params).asnumpy()
######################################################################
# Display results
# ---------------------------------------------
# We put input and output image neck to neck
from matplotlib import pyplot as plt
out_y = Image.fromarray(np.uint8((tvm_output[0, 0]).clip(0, 255)), mode='L')
out_cb = img_cb.resize(out_y.size, Image.BICUBIC)
out_cr = img_cr.resize(out_y.size, Image.BICUBIC)
result = Image.merge('YCbCr', [out_y, out_cb, out_cr]).convert('RGB')
canvas = np.full((672, 672*2, 3), 255)
canvas[0:224, 0:224, :] = np.asarray(img)
canvas[:, 672:, :] = np.asarray(result)
plt.imshow(canvas.astype(np.uint8))
plt.show()
官网链接
TensorFlow Lite 是一种用于设备端推断的开源深度学习框架,该工具专注于模型优化和模型部署,使得tensorflow的整个生态更加完善,首先使用tensorflow训练好的模型,然后通过tflite进行模型加速,最终将其部署在android或者ios设备上。

上图展示了tflite的整个流程。首先需要选择一个合适的模型;然后使用Lite converter将模型转换为FlatBuffer格式;接着将.tflite文件部署到嵌入式设备中;最后进行模型量化操作。
添加链接描述
ncnn 是一个为手机端极致优化的高性能神经网络前向计算框架。ncnn 从设计之初深刻考虑手机端的部署和使用。无第三方依赖,跨平台,手机端 cpu 的速度快于目前所有已知的开源框架。基于 ncnn,开发者能够将深度学习算法轻松移植到手机端高效执行,开发出人工智能 APP,将 AI 带到你的指尖。ncnn 目前已在腾讯多款应用中使用,如 QQ,Qzone,微信,天天P图等。



官网链接
MNN是一个轻量级的深度神经网络推理引擎,在端侧加载深度神经网络模型进行推理预测。目前,MNN已经在阿里巴巴的手机淘宝、手机天猫、优酷等20多个App中使用,覆盖直播、短视频、搜索推荐、商品图像搜索、互动营销、权益发放、安全风控等场景。此外,IoT等场景下也有若干应用。
主要特点如下所示:


整体设计架构如下所示:

上图展示了MNN的整体设计架构。其支持的深度学习框架包括Tensorflow、Caffe、ONNX;Frontends包括Tensorflow、Caffe、ONNX;包含的图优化操作包括:融合操作、替换操作和调节操作;引擎包括图调度和CV处理;Backends包括CPU、Metal、OpenCL、Vulkan;底层的优化技术包括:Neon或者ASM、多线程、内存重复使用、异构计算等。
官网链接
openVIO是Intel官方针对Intel cpu推出的一款加速工具。该工具专注于边缘端的推理;用户可以使用该工具对Intel的CPU/GPU/FPGA等产品进行加速;可以直接调用优化好的Opencv和OpenVX包。

如上图所示,openVIO不仅可以用来执行基于深度学习的一些CV任务,而且可以用来执行一些传统的CV任务。除此之外,它还可以对特定的硬件进行加速。通过openVIO,你可以让你的算法在CPU端实现4~5倍的加速,它让你的算法运行在CPU端成为了可能,在很多应用场景下面会具有更高的性价比。
官网链接
Tengine是由开放式人工智能实验室开发的一个面向嵌入式设备的精简、高性能、模块化的推理引擎。Tengine引擎由六个模块组成core/operator/serializer/executor/driver/wrapper。
- core提供了系统的基本组件和功能;
- operator定义了运算符的模式,如卷积、relu、池化等操作;
- serializer用来加载保存的模型。该框架是可扩展的,可以支持不同的输入格式,包括自定义格式。caffe/onnx/tensorflow/mxnet和tengine模型可以由tengine直接加载;
- executor实现了运行graph和operators的代码。当前版本为多个A72核提供了高度优化的实现;
- driver是真实h/w的适配器,通过hal-api为设备执行器提供服务。单个驱动程序可以创建多个设备;
- wrapper为不同的框架提供了api包装。caffe api包装器和tensorflow api包装器现在都可以正常使用啦。
官网链接
ArmNN是Arm机构开源的基于arm嵌入式设备的inference框架,在Arm Cortex-A CPUs、Arm Mali GPUs、Arm Machine Learning processor都可以达到很高的加速效果。不过可惜的是,由于缺乏文档及教程,该框架在国内推广的程度不高,目前Github上star仅有359个。相对于其他竞品inference框架如NCNN、Tengine、Mace、MNN等等,ArmNN的知名度显得很小。不过笔者在项目的多次使用中,发现ArmNN是一个被低估的框架(在arm设备上的性能几乎都优于目前的前传框架),不亏是ARM家精心调教的SDK,对自家核心的性能调教到了极致。
ArmNN基于Arm的另外一个开源计算引擎ComputeLibrary做后端的核心计算,前端支持多种离线训练框架,如TensorFlow、TFLITE、CAFFE以及ONNX。从功能上来说,几乎实现了与市面上所有离线训练框架无缝对接。而且ArmNN在FP32、FP16及INT8上的加速非常可观,笔者在RK3399上做300x300的Mobilenet-SSD(depth_multiplier=1.0),效率可达90ms/ 帧,其余的框架大多在160ms左右徘徊。
官网链接
Plader Lite是Plader Mobile的更新版本,这是一个开源的深度学习框架,旨在使在移动、嵌入式和物联网设备上执行推理变得容易。它与飞桨和其他来源的预训练模型兼容。
- 轻量化。在移动设备上,由于我们的执行模块和分析模块是分离的,因此可以在没有第三方库的情况下部署执行模块。在arm v7上,只占用800kb,而在arm v8上,1.3mb占用了由paddle-lite提供的动态库中的80个操作符和85个内核。无需额外优化,桨叶式Lite即可实现即时推理。
- 高性能。Paddle lite支持设备优化内核,最大限度地提高arm cpu性能。它还支持使用桨叶模型压缩工具进行int8量化,从而减小模型的大小并提高模型的性能。在华为的npu和fpga上,性能也得到了提升。
- 高兼容性。硬件兼容性:Paddle Lite支持多种硬件——ARM CPU、Mali GPU、Adreno GPU、Huawei NPU和FPGA。在不久的将来,我们还将支持来自Cambricon和Bitmain的人工智能微芯片。模型兼容性:Paddle Lite与PaddlePaddle完全兼容。验证了18个模型(主要是cv模型和ocr模型)和85个算子的准确性和性能。今后,我们还将支持其他机型。框架兼容性:除了在PaddlePaddle上训练的模型之外,那些在Caffe和Tensorflow训练的模型也可以通过X2Palle转换成Paddle Lite。在未来,我们还将支持onnx格式的模型。

官网链接
FeatherCNN是腾讯人工智能平台部开发的一个高性能轻量级cnn推理库。功能cnn源于我们的《荣耀之王》游戏ai项目,我们的目标是为moba游戏ai建立一个神经模型并在移动设备上运行。FeatherCNN目前的目标是ARM CPU。我们将在不久的将来把它扩展到其它的架构上面。与其他库相比,feathercnn具有以下特点:
- 高性能。FeatherCNN在多种设备上提供最先进的推理计算性能,包括移动电话(iOS/Android)、嵌入式设备(Linux)以及基于ARM的服务器(Linux)。
- 轻松部署。FeatherCNN将所有内容打包在一个代码库中,以摆脱第三方依赖。因此,它有助于在移动平台上部署。
- 轻量级。编译的eatherCNN库是很小,只有数百kbs。
官网链接
深度神经网络库(dnnl)是一个用于深度学习应用的开源性能库。该库包括针对英特尔体系结构处理器和英特尔处理器图形优化的神经网络的基本构建块。dnnl是为有兴趣在intel cpu和gpu上提高应用程序性能的深度学习应用程序和框架开发人员而设计的。
官网链接-Model_Zoo-官方文档
Mobile AI Compute Engine (MACE) 是一个专为移动端异构计算平台(支持Android, iOS, Linux, Windows)优化的神经网络计算框架。 主要从以下的角度做了专门的优化:
- 性能-代码经过NEON指令,OpenCL以及Hexagon HVX专门优化,并且采用 Winograd算法来进行卷积操作的加速。 此外,还对启动速度进行了专门的优化。
- 功耗-支持芯片的功耗管理,例如ARM的big.LITTLE调度,以及高通Adreno GPU功耗选项。
- 系统响应-支持自动拆解长时间的OpenCL计算任务,来保证UI渲染任务能够做到较好的抢占调度, 从而保证系统UI的相应和用户体验。
- 内存占用-通过运用内存依赖分析技术,以及内存复用,减少内存的占用。另外,保持尽量少的外部 依赖,保证代码尺寸精简。
- 模型加密与保护-模型保护是重要设计目标之一。支持将模型转换成C++代码,以及关键常量字符混淆,增加逆向的难度。
- 硬件支持范围-支持高通,联发科,以及松果等系列芯片的CPU,GPU与DSP(目前仅支持Hexagon)计算加速。CPU模式支持Android, iOS, Linux等系统。
- 模型格式支持-支持TensorFlow, Caffe和ONNX等模型格式。
官网链接
SNPE是高通的一个神经网络框架,该平台具有广泛的异构计算功能,这些功能经过精心设计,可以在设备上运行经过训练的神经网络,而无需连接到云。Qualcomm®人工智能(AI)神经处理SDK旨在帮助开发人员在Snapdragon移动平台(无论是CPU,GPU还是DSP)上运行经过Caffe / Caffe2,ONNX或TensorFlow训练的一个或多个神经网络模型。
Qualcomm神经处理SDK旨在帮助开发人员节省时间和精力,以优化带有Snapdragon的设备上经过训练的神经网络的性能。它通过提供用于模型转换和执行的工具以及用于通过功能和性能配置文件来针对核心的API以匹配所需的用户体验来实现此目的。高通神经处理SDK支持卷积神经网络和自定义层。
Qualcomm神经处理SDK完成了在Snapdragon移动平台上运行神经网络所需的许多繁重工作,这可以帮助开发人员提供更多时间和资源来专注于构建新的创新用户体验。
为了使AI开发人员的生活更轻松,Qualcomm神经处理软件开发工具包没有定义另一个网络层库。取而代之的是,它使开发人员可以使用熟悉的框架自由设计和训练网络,并在发布时支持Caffe / Caffe2,ONNX和TensorFlow。开发工作流程如下:

Github链接
model-compression是一个基于Pytorch的模型压缩工具。该工具具有如下的特点:
- 量化:任意位数(16/8/4/2 bits)、三值/二值
- 剪枝:正常、规整、针对分组卷积结构的剪枝
- 分组卷积结构
- 针对特征(A)二值的BN融合
该项目当前支持的的功能如下所示:
- 普通卷积和分组卷积结构
- 权重W和特征A的训练中量化, W(FP32/16/8/4/2bits, 三/二值) 和 A(FP32/16/8/4/2bits, 二值)任意组合
- 针对三/二值的一些tricks:W二值/三值缩放因子,W/grad(ste、saturate_ste、soft_ste)截断,W三值_gap(防止参数更新抖动),W/A二值时BN_momentum(<0.9),A二值时采用B-A-C-P可比C-B-A-P获得更高acc
- 多种剪枝方式:正常剪枝、规整剪枝(比如model可剪枝为每层剩余filter个数为N(8,16等)的倍数)、针对分组卷积结构的通道剪枝(剪枝后仍保证分组卷积结构)
- batch normalization融合及融合前后model对比测试:普通融合(BN层参数 —> conv的权重w和偏置b)、针对特征(A)二值的融合(BN层参数 —> conv的偏置b)
Github链接
MediaPipe是一个用于构建多模式(如视频、音频、任何时间序列数据)、跨平台(即Android、iOS、web、边缘设备)应用ML管道的框架。使用MediaPipe,感知管道可以构建为模块化组件的图形,例如,包括推理模型(例如,TensorFlow、TFLite)和媒体处理功能。

Github链接
Glow是一个用于硬件加速器的机器学习编译器和执行引擎。它被设计成用作高级机器学习框架的后端。编译器的设计允许最先进的编译器优化和神经网络图的代码生成。它是一个类似于TVM的深度学习编译器。
Glow将传统的神经网络数据流图降为两相强类型中间表示(IR)。高级IR允许优化器执行特定于域的优化。较低级别的基于指令的仅地址IR允许编译器执行与内存相关的优化,例如指令调度、静态内存分配和副本消除。在最低级别,优化器执行特定于机器的代码生成,以利用专门的硬件功能。Glow具有一个降低阶段,通过消除在所有目标上实现所有运算符的需要,编译器可以支持大量输入运算符以及大量硬件目标。降低阶段旨在减少输入空间,并允许新的硬件后端集中于少量线性代数原语

Github链接
TNN是由腾讯优图实验室打造,移动端高性能、轻量级推理框架,同时拥有跨平台、高性能、模型压缩、代码裁剪等众多突出优势。TNN框架在原有Rapidnet、ncnn框架的基础上进一步加强了移动端设备的支持以及性能优化,同时也借鉴了业界主流开源框架高性能和良好拓展性的优点。
1、计算优化
针对不同架构在硬件指令发射、吞吐、延迟、缓存带宽、缓存延迟、寄存器数量等特点,深度优化底层算子,极致利用硬件算力;主流硬件平台(CPU: ARMv7, ARMv8, GPU: Mali, Adreno, Apple) 深度调优;CNN 核心卷积运算通过 Winograd,Tile-GEMM, Direct Conv 等多种算法实现,保证不同参数、计算尺度下高效计算;Op 融合:离线分析网络计算图,多个小 Op(计算量小、功能较简单)融合运算,减少反复内存读取、kernel 启动等开销。
2、低精度优化
支持 INT8, FP16 低精度计算,减少模型大小、内存消耗,同时利用硬件低精度计算指令加速计算;支持 INT8 Winograd 算法,(输入6bit), 在精度满足要求的情况下,进一步降低模型计算复杂度;支持单模型多种精度混合计算,加速计算同时保证模型精度。
3、内存优化
高效”内存池”实现:通过 DAG 网络计算图分析,实现无计算依赖的节点间复用内存,降低 90% 内存资源消耗;跨模型内存复用:支持外部实时指定用于网络内存,实现“多个模型,单份内存”。

Github链接
Tengine Lite 由 OPEN AI LAB 主导开发,该项目实现了深度学习神经网络模型在嵌入式设备上快速、高效部署。为实现众多 AIoT 应用中跨平台部署,本项目基于原有 Tengine 项目使用 C 语言进行重构,针对嵌入式设备资源有限的特点进行深度框架裁剪。同时采用完全分离的前后端设计,利于 CPU、GPU、NPU 等异构计算单元快速移植和部署。同时兼容 Tengine 框架原有 API 和 模型格式 tmfile,降低评估、迁移成本。
Tengine Lite 核心代码由 4 个模块组成:
- dev: NN Operators 后端模块,当前提供 CPU 代码,后续逐步开源 GPU、NPU 参考代码;
- lib:框架核心部件,包括 NNIR、计算图、硬件资源、模型解析器的调度和执行模块;
- op:NN Operators 前端模块,实现 NN Operators 注册、初始化;
- serializer:模型解析器,实现 tmfile 格式的网络模型参数解析。

Github链接
rknn是瑞芯微官方针对PC、RK3390Pro、 RK1806、RK1808、RV1109、RV1126提出的一套模型转换、模型推理与模型评估工具。这套工具支持将大多数框架训练生成的模型转换成瑞芯微官方支持的.rknn格式的int量化模型,具体包括:Caffe、DarkNet、Keras、Mxnet、Pytorch、Tensorflow、TFlite和ONNX格式。整个工具具有完整的文档与简单易用的教程,很适合新手入手。除此之外,该工具量化之后的int8模型的推理速度已经可以与Hisi设备进行媲美,建议大家自己去体验一下。
该工具主要支持以下的功能,具体包括:
- 模型转换:支持 Caffe、TensorFlow、TensorFlow Lite、ONNX、Darknet、Pytorch、MXNet 和Keras 模型转成 RKNN模型,支持RKNN模型导入导出,后续能够在Rockchip NPU平台上加载使用
- 量化功能:支持将浮点模型转成量化模型,目前支持的量化方法有非对称量化 (asymmetric_quantized-u8),动态定点量化(dynamic_fixed_point-8 和 dynamic_fixed_point-16)。
- 模型推理:能够在 PC上模拟Rockchip NPU 运行RKNN模型并获取推理结果;也可以将 RKNN模型分发到指定的NPU设备上进行推理。
- 性能评估:能够在 PC上模拟Rockchip NPU 运行RKNN模型,并评估模型性能(包括总 耗时和每一层的耗时);也可以将RKNN模型分发到指定NPU 设备上运行,以评估模型在实际设备上运行时的性能。
- 内存评估:评估模型运行时对系统和NPU内存的消耗情况。使用该功能时,必须将RKNN 模型分发到NPU 设备中运行,并调用相关接口获取内存使用信息。
- 模型预编译:通过预编译技术生成的 RKNN 模型可以减少在硬件平台上的加载时间。对 于部分模型,还可以减少模型尺寸。但是预编译后的RKNN模型只能在NPU设备上运行。
- 模型分段:该功能用于多模型同时运行的场景下,可以将单个模型分成多段在 NPU 上执 行,借此来调节多个模型占用 NPU 的执行时间,避免因为一个模型占用太多执行时间,而使其他模型得不到及时执行。
- 自定义算子功能:如果模型含有RKNN-Toolkit 不支持的算子(operator),那么在模型转 换阶段就会失败。
- 量化精度分析功能:该功能将给出模型量化前后每一层推理结果的欧氏距离或余弦距离, 以分析量化误差是如何出现的,为提高量化模型的精度提供思路。
- 可视化功能:该功能以图形界面的形式呈现RKNN-Toolkit 的各项功能,简化用户操作步骤。
- 模型优化等级功能:RKNN-Toolkit 在模型转换过程中会对模型进行优化,默认的优化选 项可能会对模型精度产生一些影响。
- 模型加密功能:RKNN-Toolkit 从 1.6.0 版本开始支持模型加密功能。
官网链接
Halide是一种编程语言,旨在使在现代机器上编写高性能图像处理代码变得更容易。Halide当前支持的目标包括:
- CPU架构:x86、ARM、MIPS、Hexagon、PowerPC
- 操作系统:Linux、Windows、Mac OS X、Android、iOS、高通Qurt
- gpu计算api:cuda、opencl、opengl、opengl计算着色器、apple metal、microsoft direct x 12
- Halide并不是一种独立的编程语言,Halide是嵌入在C++中。这意味着你可以编写C++代码,使用Halide的C++ API构建Halide管道的内存表示;然后可以将这个表示编译为一个对象文件,或者通过jit编译它并在同一进程中运行它。
官网链接
TACO是一个C++文库,它在稀疏和稠密张量上计算张量代数表达式。在稀疏张量代数和稀疏线性代数的广泛应用库中,它使用新的编译器技术来获得与手工优化的内核相竞争的性能。您可以使用TACO作为C++库,让您加载张量、从文件读取张量,并计算张量表达式。也可以使用TACO作为代码生成器,生成计算张量表达式的c函数。
官网链接
Weld是一种用于提高数据密集型应用程序性能的语言和运行时。它通过使用公共中间表示来表示库中的核心计算,并跨每个框架进行优化,从而跨库和函数进行优化。现代分析应用程序结合来自不同库和框架的多个功能来构建复杂的工作流。尽管单个功能可以单独实现高性能,但由于功能之间的大量数据移动,组合工作流的性能通常比硬件限制低一个数量级。Weld解决这个问题的任务是为整个工作流懒洋洋地建立一个计算,然后仅在需要结果时才对其进行优化和评估。
官网链接
ATLAS是一个android客户端容器化框架。我们称之为android动态组件框架。atlas的特性如下所示:
-ATLAS提供了分离、组件和动态支持。Atlas涵盖了项目编码期、APK运行期和后续运行维护中的各种问题
- 在项目期间,ATLAS使工程师能够独立开发、独立调试,因为他们的项目是物理隔离的。
- 在apk运行时,ATLAS具有完整的组件生命周期、类隔离等机制。
- 在运行和维护期间,Atlas提供快速增量更新和快速升级能力。
- ATLAS把工作尽可能的投入到项目期间,保证运行简单稳定,维护方便。
官网链接
TensorComprehensions(TC)是一个全功能的C++库,利用Halide、ISL和NVRTC或LLVM自动合成高性能的机器学习内核。TC还提供了与caffe2和pytorch的基本集成。具体的细节请看论文。这个库的设计是高度可移植的,机器学习框架不可知的,只需要一个简单的张量库,具有内存分配、卸载和同步功能。
官网链接
程序自动微调已在许多领域得到证明,以实现更好或更便携的性能。然而,autotuner本身在项目之间通常不是很容易移植的,因为使用域通知的搜索空间表示对于获得好的结果是至关重要的,并且因为没有一种单一的搜索技术对所有问题都表现得最好。
opentuner是一种新的领域专用多目标程序自动调谐框架。opentuner支持完全可定制的配置表示、允许特定于域的技术的可扩展技术表示,以及用于与优化程序通信的易于使用的接口。opentuner中的一个关键功能是同时使用各种不同的搜索技术,性能良好的技术将获得更大的测试预算,性能较差的技术将被禁用。
[1] MMdnn链接
[2] ONNX链接
[3] X2Paddle链接
[4] PocketFlow链接
[5] TensorRT链接
[6] distiller链接
[7] TVMl链接
[8] tflite链接
[9] ncnn链接
[10] MNN链接
[11] openVIO链接
[12] Tengine链接
[13] ARMNN链接
[14] Paddle-Lite链接
[15] FeatherCNN链接
[16] Halide链接
[17] TACO链接
[18] weld链接
[19] atlas链接
[20] FFTW链接
[21] TensorComprehensions链接
[22] opentuner链接
[23] DNNL官网链接
[24] MACE官网链接
[25] SNPE官网链接
[26] model-compression官网链接
[27]mediapipe官网链接
[28] Glow官网链接
[29] TNN官网链接
[30] Tengine Lite链接
[31] rknn链接
[1] 如果您对AI、自动驾驶、AR、ChatGPT等技术感兴趣,欢迎关注我的微信公众号“AI产品汇”,有问题可以在公众号中私聊我!
[2] 该博客是本人原创博客,如果您对该博客感兴趣,想要转载该博客,请与我联系(qq邮箱:1575262785@qq.com),我会在第一时间回复大家,谢谢大家的关注.
[3] 由于个人能力有限,该博客可能存在很多的问题,希望大家能够提出改进意见。
[4] 如果您在阅读本博客时遇到不理解的地方,希望您可以联系我,我会及时的回复您,和您交流想法和意见,谢谢。
[5] 本文测试的图片可以通过关注微信公众号AI产品汇之后找我索取!
[5] 本人业余时间承接各种本科毕设设计和各种小项目,包括图像处理(数据挖掘、机器学习、深度学习等)、matlab仿真、python算法及仿真等,有需要的请加QQ:1575262785详聊,备注“项目”!!!
翻译:wiige
近年来,基于Transformer的语言模型在神经机器翻译,自然语言推理,and 其他一揽子自然语言理解任务中取得了实质性进展。采用不同语言建模损失进行自监督的预训练,意味着模型可以通过大规模语料来..
点击上方“小白学视觉”,选择加"星标"或“置顶”重磅干货,第一时间送达编者荐语近年来,BERT 系列模型成了应用最广的预训练语言模型,随着模型性能的提升,其参数规模不断增大,推理速度也急剧提升,导致原始模型必须部署在高端的GPU 显卡上,甚至部分模型需要多块显卡才能正常运行。转载自丨博文视点Broadview前言 在移动智能终端品类越发多样的时代,为了让预训练语言模型可以顺利部署在算力和存储空间...
使用 Lite.AI.ToolKit C++工具箱来跑YOLO5Face人脸检测(带关键点)的一些案例
https://github.com/DefTruth/YOLO5Face.lite.ai.toolkit/blob/main/resources/YOLO5Face.png
更多详情、使用方法,请下载后阅读README.md文件
tflite2onnx-将TensorFlow Lite模型转换为ONNX
tflite2onnx将TensorFlow Lite(TFLite)模型( *.tflite )转换为ONNX模型( *.onnx ),并正确处理了数据布局和量化语义(有关详细信息,请*.onnx)。
如果您想将TensorFlow模型(冻结图*.pb , SavedModel或其他格式)转换为ONNX,请尝试 。 或者,您可以先将其为TFLite( *.tflite )模型,然后再将TFLite模型转换为ONNX。
微软在tf2onnx实现了另一个TensorFlow Lite至ONNX模型转换器(我们于2020年5月开源tflite2onnx )。 tf2onnx似乎能够像我们一样转换量化,并且似乎能够转换尚不支持的RNN网络。 如果tflite2onnx缺少任何功能,请尝试tf2onnx --t
Rockchip板载AI芯片,内置高能效NPU,拥有强劲算力,支持多种AI框架和AI应用开发SDK,易于开发,拥有面向AI应用的丰富接口,便于扩展,适用于语音唤醒、语音识别、人脸识别等功能应用场景。
模型加速越来越成为深度学习工程中的刚需了,最近的CVPR和ICLR会议中,模型的压缩和剪枝是受到的关注越来越多。毕竟工程上,算法工程师的深度学习模型是要在嵌入式平台跑起来,投入应用的。在模型的推理(inference)过程中,计算速度是很重要的。比如自动驾驶,如果使用一个经典的深度学习模型,很容易就跑到200毫秒的延时,那么这意味着,在实际驾驶过程中,你的车一秒钟只能看到5张图像,这当然是很危险的...
Tensorflow Lite:
mxnet - TVM RPC对接移动设备的框架
EAIDK 搭载了 OPEN AI LAB 的核心 AI 开发平台 AID;和②的目标多少有些类似,将面向移动端的接口全部封装。类似于树莓派、arduino甚至安卓将硬件可编程话,一定程度上的封装后,AI方向的需求也开始被封装了。
mxnet自带量化模块
ncnn腾讯的移动端开源框架:https://git...
在深度学习模型的搭建和部署中,我们需要考虑到模型的权重个数、模型权重大小、模型推理速度和计算量。本文将分享在Pytorch中进行模型压缩、裁剪和量化的教程。
MaixPy AI 硬件加速基本知识
1. 模型使用和硬件加速原理
前面我们知道了模型是一个数据机构以及很多参数, 最终以一个文件比如kmodel格式的文件的形式存在。 而这个模型要能在 MaixPy 的程序里面被使用, 首先需要程序能够理解kmodel这个文件的格式, 并且支持模型里面的算法,这样才能按照模型的描述将输入经过一些裂计算过程后得到输出。
所以,重点就是支持模型里面的算法,称算子, 理论上,我们可以用软件去实现这些算子, 就可以成功运行模型了, 而执行软件的物理器件是CPU, 神经网络模型的计
《原始论文:DistilBERT, a distilled version of BERT: smaller, faster, cheaper and lighter》
NLP预训练模型随着近几年的发展,参数量越来越大,受限于算力,在实际落地上线带来了困难,针对最近最为流行的BERT预训练模型,提出了DistilBert,在保留97%的性能的前提下,模型大小下降40%,inference运算速度快了60%。
一、模型蒸馏
Distill的意思是蒸馏,我们可以从字面上猜测,我们要从一个很大的模型,蒸馏成比较