精华内容
下载资源
问答
  • 模型转换、模型压缩、模型加速工具汇总

    千次阅读 多人点赞 2019-08-18 11:20:06
      在现实场景中,我们经常会遇到这样一个问题,即某篇论文的结果很棒,但是作者提供的训练模型使用pytorch训练的,而我自己却比较擅长tensorflow,我想要使用模型做一些其它的项目。那么很多人就...

    一、场景需求解读

      在现实场景中,我们经常会遇到这样一个问题,即某篇论文的结果很棒,但是作者提供的训练模型是使用pytorch训练的,而我自己却比较擅长用tensorflow,我想要使用该模型做一些其它的项目。那么很多人就会采取一种方式,去阅读别人的论文、理解别人的代码,然后使用自己熟悉的工具进行代码重现、重新训练一个模型。这个阶段会耗用大量的人力和物力,最终还不能保证一定能得到论文的效果。本文即将介绍的几个模型转换的工具就可以很好的帮你解决你的这个问题,比较有名的包括mmdnn、onnx等
      除此之外,我们的目的是将深度学习模型应用到现实场景中的任务中,但是现实场景中的硬件五花八门,包含着大多数的算力不足的设备,以ARM处理处居多。那么这里面就涉及到了一个问题,即使你说你的模型有多牛逼,但是如果你的模型比较大,需要大量的算力才能跑起来,那么对于应用场景而言,你这个算法其实没有多少利用价值的。为了将使用N卡的GPU训练出来的模型成功的部署在这些低功耗的设备上面,我们通常需要对这些模型进行模型压缩和模型加速操作,比较有名的几个工具包括TensorRT、PocketFlow、TVM等

    二、模型转化工具汇总

    1、模型转换工具的作用

      简而言之,模型转换工具的作用是:将使用不同训练框架训练出来的模型相互联系起来,用户可以进行快速的转换,节省了大量的人力和物力花销

    2、模型转换工具简介

    1、MMdnn

    官网链接
    在这里插入图片描述  上图展示了MMdnn的主要功能。MMDNN是一套帮助用户在不同的深度学习框架之间进行交互操作的工具。例如,模型转换和可视化。转换caffe、keras、mxnet、tensorflow、cntk、pytorch onnx和coreml之间的模型。 简而言之,通过这个工具,我们可以方便的将某一个框架训练出来的模型转换成另外一个框架所支持的模型,图中基本上包含了当前所有主流的深度学习训练框架,包括Tensorflow、Pytorch、Caffe、MxNet等。除此之外,图中包含了一个关键的概念,那就是Intermediate Representation-中间表示,即这个工具首先将输入框架的模型转换为IR,然后通过IR转换成另外一个框架所支持的模型。
    在这里插入图片描述
      上图展示了MMdnn工具当前所支持的模型。上面的对号表示的是你可以随意的在不同框架之间进行该模型的转换。

    # 将Tensorflow的resnet_v2_152模型转换为Pytorch支持的模型
    mmdownload -f tensorflow -n resnet_v2_152 -o ./
    mmconvert -sf tensorflow -in imagenet_resnet_v2_152.ckpt.meta -iw imagenet_resnet_v2_152.ckpt --dstNodeName MMdnn_Output -df pytorch -om tf_resnet_to_pth.pth
    

      上面展示了一个简单的使用案例,通过简单的两行指令就可以将Tensorlfow的模型转换为pytorch所支持的模型,是不是很方便呢!

    2、 ONNX

    官网链接
      ONNX是一个开放的生态系统,它使人工智能开发者能够随着项目的发展选择正确的工具。ONNX为人工智能模型提供了一种开源格式,包括深度学习和传统的ML。它定义了一个可扩展的计算图模型,以及内置运算符和标准数据类型的定义。目前,我们关注的是推断(评分)所需的能力。
      ONNX得到了广泛的支持,它可以应用到很多框架、工具和硬件中。它可以实现不同框架之间的相互转换,并加速研究到产品的速度。
    在这里插入图片描述
      上图展示了ONNX所支持的一些深度学习框架,图中包括了一些主流的框架,但是并不完善,tensorflow的身影竟然没有出现。
    在这里插入图片描述
      上图展示了该工具所支持的一些Converters,不仅包括深度学习框架Tensorflow、Keras等,而且包括ML工具Scikit-learn、Xgboost、LibSVM等。
    在这里插入图片描述
      上图展示了该工具所支持的一些Runtimes(运行时),它更偏向模型的部署端,图中包含了多个大厂,包括NVIDIA、Qualcomm、Tencent、synppsys等。
    在这里插入图片描述
      上图展示了该工具所支持的底层编译器,包括了大名鼎鼎的TVM,下面会对该工具进行详细的介绍。除此之外,包含了一些可视化网络模型的工具,NETRON工具相当好用,具体的细节请看这里

    3、 X2Paddle

    官网链接
    X2Paddle支持将其余深度学习框架训练得到的模型,转换至PaddlePaddle模型。一个比较小众的工具,感兴趣的请在官网查看具体的细节,这里不再祥述。

    三、模型压缩和加速工具汇总

    1、模型压缩加速工具的作用

      简而言之,模型压缩加速工具的作用是:将训练好的模型进行压缩和加速,然后将其部署到一些特定的设备上去,从而满足现实场景的需求

    2、模型压缩加速工具简介

    1、PocketFlow

    官网链接
      PocketFlow是一个开源框架,可以使用最少的人力压缩和加速深度学习模型。深度学习广泛应用于计算机视觉、语音识别、自然语言翻译等各个领域。然而,深度学习模型通常计算成本很高,这限制了在计算资源有限的移动设备上的进一步应用。
    PocketFlow旨在为开发人员提供一个易于使用的工具包,以提高推理效率,而不会降低或降低性能。开发人员只需要指定所需的压缩比或加速比,然后PocketFlow将自动选择适当的超参数来生成高效的压缩模型以进行部署。
    在这里插入图片描述
      上图展示了PocketFlow的整个框架。该框架主要由两类算法组件组成,即学习器和超参数优化器,如上图所示。给定一个未压缩的原始模型,学习模块使用随机选择的超参数组合生成一个候选压缩模型。然后对候选模型的精度和计算效率进行评估,并将其作为反馈信号,用于确定学习模块要探索的下一个超参数组合。经过几次迭代,所有候选模型中最好的一个输出为最终的压缩模型。
    在这里插入图片描述
      上图展示了该工具中所包含的压缩方法。主要包括3大类:裁剪、权重稀疏和量化。

    # 对网络进行裁剪操作
    ./scripts/run_seven.sh nets/resnet_at_cifar10_run.py \
        --learner channel \
        --cp_prune_option uniform \
        --cp_uniform_preserve_ratio 0.5
    # 对网络进行权重稀疏操作
    ./scripts/run_local.sh nets/resnet_at_cifar10_run.py \
        --learner weight-sparse \
        --ws_prune_ratio_prtl uniform \
        --data_disk hdfs
    # 对网络进行量化操作
    ./scripts/run_local.sh nets/resnet_at_cifar10_run.py \
        --learner uniform \
        --uql_use_buckets \
        --uql_bucket_type channel \
        --data_disk hdfs
    

      上面分别展示了一个网络裁剪、网络权重稀疏、网络量化的实例。整个工具操作起来比较简单,用户仅仅需要确定自己需要的压缩比或者加速比即可,工具可以通过强化学习算法来帮你找到一个最优的结果。

    2、TensorRT
    官网链接
      Nvidia Tensorrt™是一个高性能深度学习推理平台。它包括一个深度学习推理优化器和运行时,为深度学习推理应用程序提供低延迟和高吞吐量。在推理过程中,基于Tensorrt的应用程序的执行速度比仅使用CPU的平台快40倍。使用Tensorrt,您可以优化在所有主要框架中训练的神经网络模型,高精度校准低精度,最后部署到超尺度数据中心、嵌入式或汽车产品平台。
      Tensorrt建立在Nvidia的并行编程模型CUDA上,使您能够利用CUDA-X人工智能、自主机器、高性能计算和图形中的库、开发工具和技术,优化所有深度学习框架的推理。
      Tensorrt为深度学习推理应用程序(如视频流、语音识别、推荐和自然语言处理)的生产部署提供了int8和fp16优化。降低的精度推断显著降低了应用程序延迟,这是许多实时服务、自动和嵌入式应用程序的一项要求。
    在这里插入图片描述
      上图展示了TensorRT的整体框架。输入到整个tensorRT中的是一个训练好的神经网络,该工具中包含了多个优化工具,具体包括精度矫正、动态张量内存、层/张量融合、内核自动微调、多级流执行等,通过这些操作,我们可以对原始的输入模型进行快速的压缩和加速,从而满足我们的需求。但是细心的你可能注意到了该工具只适合应用在NVIDIA显卡上,在CUDA的基础上进行优化,通用性较差!!!

    3、distiller

    官网链接
      Distiller是一个用于神经网络压缩研究的开源python包。网络压缩可以减少神经网络的内存占用,提高其推理速度,节约能源。Distiller为原型制作和分析压缩算法提供了一个pytorch环境,如稀疏诱导法和低精度算法。

    # 显示网络的稀疏度
    python3 compress_classifier.py --resume=../ssl/checkpoints/checkpoint_trained_ch_regularized_dense.pth.tar -a=resnet20_cifar ../../../data.cifar10 --summary=sparsity
    

    在这里插入图片描述
      上图展示了使用该工具来显示某个网络的稀疏度。执行命令之后会输出一个文本表,详细说明参数张量的各种稀疏性。第一列是参数名,后面是它的形状、密集模型和稀疏模型中非零元素的数量(nnz)。下一组列显示列、行、通道、内核、过滤器和元素的稀疏度。概括起来就是元素绝对值的标准差、平均值和平均值。
    在这里插入图片描述
      上图展示的是裁剪敏感性分析图。该图可以辅助你在模型压缩的过程中快速的定位到不同网络层对裁剪的敏感程度,然后有针对性的执行一些操作。

    4、TVM

    官网链接
      TVM是一个针对CPU、GPU和专用加速器的开放式深度学习编译器堆栈。它旨在缩小以生产力为中心的深度学习框架与以性能或效率为导向的硬件后端之间的差距。TVM提供以下主要功能:

    • 将keras、mxnet、pytorch、tensorflow、coreml、darknet中的深度学习模型编译为各种硬件后端上可部署的最小模块。
    • 自动生成和优化更多后端上的张量运算符并提高性能的基础结构。

      TVM提供两个级别的优化。执行高级操作员融合、布局转换和内存管理等任务的计算图优化。然后是张量运算符优化和代码生成层,用于优化张量运算符
    在这里插入图片描述
      上图展示了TVM工具的整体框图。整个工具具有如下的优势:

    1. 其输入时任意一个深度学习框架输出的模型,即该工具不挑模型,全部通吃!!! 其输出是针对现实场景中的各种硬件,具体包括Intel的CPU/GPU、NVIDIA的GPU、ARM的CPU\GPU、树莓派、FPGA、ASCI等,即该工具也不挑部署设备,基本上全部通吃。
    2. TVM中包含了多级模型优化机制,具体包括高级的IR优化和低级的图优化。除此之外,还有一个强大的工具就autotvm,这个工具可以通过一些ML算法寻找到针对不同硬件最优的一种卷积层实现方式,从而实现进一步的压缩和加速。
    3. TVM不想TensorRT那么局限,它几乎可以很好的支持市面上所有的硬件设备,这是它的一个强大之处。主要通过LLCM来支持Intel和ARM CPU等一些设备;通过Opencl来支持ARM的MailGPU;通过CUDA来支持NVIDIA的设备;通过Metal来支持苹果的设备;通过VTA来很好的支持FPGA和ASCI(即自己设计的芯片)。
      在这里插入图片描述
    4. TVM的众多优势之一在于它对多种平台和语言的丰富支持。我们提供了框架的两个组件:包含完整优化库以生成优化机器代码的编译器堆栈和轻量级的运行时,它提供了在不同平台上部署编译模块所需的可移植性。**TVM目前支持Python和C++接口到嵌入式编译器堆栈。**我们设计了具有最大重用的框架,以便编译器堆栈的改进可以在Python和C++组件之间互换应用。我们还提供了一个轻量级运行时,它可以直接运行在诸如JavaScript、Java、Python和C++等平台上的TVM编译代码,这些平台包括Android、IOS、树莓PI和Web浏览器

    TVM装载ONNX模型并执行模型优化的简单案例

    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()
    

    5、tflite

    官网链接
      TensorFlow Lite 是一种用于设备端推断的开源深度学习框架,该工具专注于模型优化和模型部署,使得tensorflow的整个生态更加完善,首先使用tensorflow训练好的模型,然后通过tflite进行模型加速,最终将其部署在android或者ios设备上
    在这里插入图片描述
      上图展示了tflite的整个流程。首先需要选择一个合适的模型;然后使用Lite converter将模型转换为FlatBuffer格式;接着将.tflite文件部署到嵌入式设备中;最后进行模型量化操作。

    6、ncnn

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

    7、MNN

    官网链接
      MNN是一个轻量级的深度神经网络推理引擎,在端侧加载深度神经网络模型进行推理预测。目前,MNN已经在阿里巴巴的手机淘宝、手机天猫、优酷等20多个App中使用,覆盖直播、短视频、搜索推荐、商品图像搜索、互动营销、权益发放、安全风控等场景。此外,IoT等场景下也有若干应用。
    主要特点如下所示:
    在这里插入图片描述
    在这里插入图片描述
    整体设计架构如下所示:
    在这里插入图片描述
      上图展示了MNN的整体设计架构。其支持的深度学习框架包括Tensorflow、Caffe、ONNX;Frontends包括Tensorflow、Caffe、ONNX;包含的图优化操作包括:融合操作、替换操作和调节操作;引擎包括图调度和CV处理;Backends包括CPU、Metal、OpenCL、Vulkan;底层的优化技术包括:Neon或者ASM、多线程、内存重复使用、异构计算等。

    8、OpenVIO

    官网链接
      openVIO是Intel官方针对Intel cpu推出的一款加速工具。该工具专注于边缘端的推理;用户可以使用该工具对Intel的CPU/GPU/FPGA等产品进行加速;可以直接调用优化好的Opencv和OpenVX包。
    在这里插入图片描述
      如上图所示,openVIO不仅可以用来执行基于深度学习的一些CV任务,而且可以用来执行一些传统的CV任务。除此之外,它还可以对特定的硬件进行加速。通过openVIO,你可以让你的算法在CPU端实现4~5倍的加速,它让你的算法运行在CPU端成为了可能,在很多应用场景下面会具有更高的性价比。

    9、Tengine

    官网链接
      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包装器现在都可以正常使用啦。

    10、ARMNN

    官网链接
      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左右徘徊。

    11、Paddle Lite

    官网链接
      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格式的模型。
      在这里插入图片描述

    12、FeatherCNN

    官网链接
      FeatherCNN是腾讯人工智能平台部开发的一个高性能轻量级cnn推理库。功能cnn源于我们的《荣耀之王》游戏ai项目,我们的目标是为moba游戏ai建立一个神经模型并在移动设备上运行。FeatherCNN目前的目标是ARM CPU。我们将在不久的将来把它扩展到其它的架构上面。与其他库相比,feathercnn具有以下特点:

    • 高性能。FeatherCNN在多种设备上提供最先进的推理计算性能,包括移动电话(iOS/Android)、嵌入式设备(Linux)以及基于ARM的服务器(Linux)。
    • 轻松部署。FeatherCNN将所有内容打包在一个代码库中,以摆脱第三方依赖。因此,它有助于在移动平台上部署。
    • 轻量级。编译的eatherCNN库是很小,只有数百kbs。

    13、DNNL

    官网链接
      深度神经网络库(dnnl)是一个用于深度学习应用的开源性能库。该库包括针对英特尔体系结构处理器和英特尔处理器图形优化的神经网络的基本构建块。dnnl是为有兴趣在intel cpu和gpu上提高应用程序性能的深度学习应用程序和框架开发人员而设计的。

    14、MACE

    官网链接-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等模型格式。

    15、SNPE

    官网链接
      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。开发工作流程如下:
    在这里插入图片描述

    16、model-compression

    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)

    17、MediaPipe

    Github链接
      MediaPipe是一个用于构建多模式(如视频、音频、任何时间序列数据)、跨平台(即Android、iOS、web、边缘设备)应用ML管道的框架。使用MediaPipe,感知管道可以构建为模块化组件的图形,例如,包括推理模型(例如,TensorFlow、TFLite)和媒体处理功能。
    在这里插入图片描述

    18、Glow

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

    19、TNN

    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% 内存资源消耗;跨模型内存复用:支持外部实时指定用于网络内存,实现“多个模型,单份内存”。
    在这里插入图片描述

    20、Tengine Lite

    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 格式的网络模型参数解析。
      在这里插入图片描述

    21、rknn与rknpu

    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 版本开始支持模型加密功能。

    四、其它加速工具

    1、Halide

    官网链接
      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编译它并在同一进程中运行它。

    2、TACO

    官网链接
      TACO是一个C++文库,它在稀疏和稠密张量上计算张量代数表达式。在稀疏张量代数和稀疏线性代数的广泛应用库中,它使用新的编译器技术来获得与手工优化的内核相竞争的性能。您可以使用TACO作为C++库,让您加载张量、从文件读取张量,并计算张量表达式。也可以使用TACO作为代码生成器,生成计算张量表达式的c函数。

    3、weld

    官网链接
      Weld是一种用于提高数据密集型应用程序性能的语言和运行时。它通过使用公共中间表示来表示库中的核心计算,并跨每个框架进行优化,从而跨库和函数进行优化。现代分析应用程序结合来自不同库和框架的多个功能来构建复杂的工作流。尽管单个功能可以单独实现高性能,但由于功能之间的大量数据移动,组合工作流的性能通常比硬件限制低一个数量级。Weld解决这个问题的任务是为整个工作流懒洋洋地建立一个计算,然后仅在需要结果时才对其进行优化和评估。

    4、ATLAS

    官网链接
      ATLAS是一个android客户端容器化框架。我们称之为android动态组件框架。atlas的特性如下所示:
    -ATLAS提供了分离、组件和动态支持。Atlas涵盖了项目编码期、APK运行期和后续运行维护中的各种问题

    • 在项目期间,ATLAS使工程师能够独立开发、独立调试,因为他们的项目是物理隔离的。
    • 在apk运行时,ATLAS具有完整的组件生命周期、类隔离等机制。
    • 在运行和维护期间,Atlas提供快速增量更新和快速升级能力。
    • ATLAS把工作尽可能的投入到项目期间,保证运行简单稳定,维护方便。

    5、TensorComprehensions

    官网链接
      TensorComprehensions(TC)是一个全功能的C++库,利用Halide、ISL和NVRTC或LLVM自动合成高性能的机器学习内核。TC还提供了与caffe2和pytorch的基本集成。具体的细节请看论文。这个库的设计是高度可移植的,机器学习框架不可知的,只需要一个简单的张量库,具有内存分配、卸载和同步功能。

    6、opentuner

    官网链接
      程序自动微调已在许多领域得到证明,以实现更好或更便携的性能。然而,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] 该博客是本人原创博客,如果您对该博客感兴趣,想要转载该博客,请与我联系(qq邮箱:1575262785@qq.com),我会在第一时间回复大家,谢谢大家的关注.
    [2] 由于个人能力有限,该博客可能存在很多的问题,希望大家能够提出改进意见。
    [3] 如果您在阅读本博客时遇到不理解的地方,希望您可以联系我,我会及时的回复您,和您交流想法和意见,谢谢。
    [4] 本文测试的图片可以通过该链接进行下载。网盘链接- 提取码:w81b。
    [5] 本人业余时间承接各种本科毕设设计和各种小项目,包括图像处理(数据挖掘、机器学习、深度学习等)、matlab仿真、python算法及仿真等,有需要的请加QQ:1575262785详聊,备注“项目”!!!

    展开全文
  • KenLM语言模型工具

    千次阅读 2019-10-22 21:47:38
    生成[语言模型]的同时,一定注意生成的模型文件及路径是否正确,防止覆盖之前的模型 2. 使用xz解压.xz文件 自己训练语言模型(language model): kenlm 工具使用kenlm构建语言模型教程: 参考链接1 参考链接2 ...

    KenLM生成[语言模型] 的整理
    PS:1.生成[语言模型]的同时,一定要注意生成的模型文件及路径是否正确,防止覆盖之前的模型
    2. 使用xz解压.xz文件

    自己训练语言模型(language model):
    kenlm
    工具包
    使用kenlm构建语言模型教程:
    参考链接1
    参考链接2
    参考链接3
    参考链接4
    参考链接5
    kenlm的-help
    训练语言模型的步骤:
    先进入kenlm/build文件夹

    用-o 5 训练成.arpa格式的文件
    可用:bin/lmplz -o 5 --verbose header --text mytext/19-01-au.txt mylmmodel/log3.arpa
    可用:bin/lmplz -o 3 --verbose header --text mytext/19-01-au.txt --arpa mylmmodel/log3.arpa
    可用:bin/lmplz -o 5 --prune 0 1 1 1 1 --text mytext/19-01-au.txt --arpa mylmmodel/log3.arpa

    在en.00(没有预处理的)上进行训练,修剪模型
    可用:bin/lmplz -o 5 --prune 0 1 1 1 1 --text mytext/lm_text/en.00.deduped --arpa mylmmodel/en.arpa
    但:Special word is not allowed in the corpus. I plan to support models containing in the future. Pass --skip_symbols to convert these symbols to whitespace.
    跳过空白字符:–skip_symbols
    可用:bin/lmplz -o 5 --skip_symbols --prune 0 1 1 1 1 --text mytext/lm_text/en.00.deduped --arpa mylmmodel/en.arpa

    不修剪模型:
    bin/lmplz -o 5 mytext/lm_text/en.00.deduped mylmmodel/en.arpa

    将生成的.arpa改成trie文件格式,并采用量化和指针压缩,也放到mylmmodel文件夹下
    可用:bin/build_binary trie -a 22 -q 8 -b 8 mylmmodel/log3.arpa mylmmodel/log3.binary

    将arpa文件改为.klm文件
    可用:bin/build_binary trie -a 22 -q 8 -b 8 mylmmodel/log3.arpa mylmmodel/log3.klm
    可用:bin/build_binary trie -a 22 -q 8 -b 8 mylmmodel/en.arpa mylmmodel/en.klm

    !!!在生成.arpa文件的时候,必须加上–arpa 使用txt文件的时候,也需要加上–text

    klm是kenlm定义的二进制格式,klm格式占用空间更少。
    参考链接1

    采用log4.arpa语言模型先把deepspeech2的语言模型执行完再说
    生成log4.arpa文件
    可用:bin/lmplz -o 5 --prune 0 1 1 1 1 --text mytext/19-01-au.txt --arpa mylmmodel/log4.arpa
    可用:bin/lmplz -o 5 --skip_symbols --prune 0 1 1 1 1 --text mytext/19-01-au.txt --arpa mylmmodel/log4.arpa
    使用–skip_symbols得到的模型才能被deepspeech2的sh run_infer.sh使用

    生成二进制文件.klm
    可用:bin/build_binary trie -a 22 -q 8 -b 8 mylmmodel/log3.arpa mylmmodel/log3.klm
    可用:bin/build_binary trie -a 22 -q 8 -b 8 mylmmodel/log4.arpa mylmmodel/log4.klm

    xz的使用
    压缩的时候保留源文件的方式:xz -k file.txt
    解压的时候保留源文件的方式:xz -d -k sources-19-01.txt.xz

    展开全文
  • 使用CPN Tools工具做简单的登录模型(初学者)

    千次阅读 热门讨论 2017-04-18 16:39:58
    使用CPN Tools工具做一个登录模型先安装CPN工具,点击这里可以进行下载。CPN的工具是需要JAVA环境的,所以记得提前配好JAVA环境程序才能正常运行。登录内容:只有在用户名是3,登录密码是three时才登录成功提示...

    使用CPN Tools工具做一个登录模型

    先安装CPN工具,点击这里可以进行下载。CPN的工具是需要JAVA环境的,所以记得提前配好JAVA环境程序才能正常运行。

    登录内容:只有在用户名是3,登录密码是three时才登录成功提示success,否则提示fail。

    1.首先打开CPN Tools程序

    这里写图片描述
    点击右键选择New Net
    这里写图片描述
    这样就新建了一个Net
    这里写图片描述
    把工具箱中的Create和Simulation拖到面板上
    这里写图片描述

    2.画place和transition及其连接

    这里写图片描述
    在左侧Declarations下定义声明,右击Declarations新建decl
    这里写图片描述
    新建红色框里的decl(前后顺序不能乱)
    这里写图片描述
    给place和transition中写上名字send,p1,receive。
    这里写图片描述
    选中send点击键盘上的Tab键把出现的UNIT改成INTxData,然后同样选中receive点击键盘上的Tab键把出现的UNIT改成DATA.
    这里写图片描述
    点击第一条带箭头的线,把expr改成(n,p),点击第二条带箭头的线,把expr改成if n=3 andalso p=”three” then “success” else “fail”(这句话的意思是如果用户名是3,密码是three则登录成功显示success,否则登录失败fail)
    这里写图片描述

    3.初始化数据

    选中send点击键盘上的Tab键两下,把出现的INIT MARK改成

    1`(1,"one")++
    1`(2,"two")++
    1`(3,"three")++
    1`(4,"four")++
    1`(5,"five")

    这里写图片描述
    点击Sim工具中的箭头运行
    这里写图片描述
    运行的结果
    这里写图片描述

    至此一个简单的登录模型就完成了,我把做的登录模型上传了,点击这里可以下载,如果有疑问可以联系我。

    展开全文
  • 模型检测工具汇总

    千次阅读 2017-02-01 13:08:00
    http://www.yingzinanfei.com/2017/02/01/moxingjiancegongjuhuizong/面向形式化规格语言的模型检测工具SMV(Symbolic Model Verifier) 符号模型检测工具SMV以检测一个有限状态系统是否满足CTL公式。 它的建模方式...

    来源自我的博客

    http://www.yingzinanfei.com/2017/02/01/moxingjiancegongjuhuizong/

    1. 面向形式化规格语言的模型检测工具

      1. SMV(Symbolic Model Verifier) 符号模型检测工具

        • SMV用以检测一个有限状态系统是否满足CTL公式。
        • 它的建模方式是以模块为单位,模块可以同步或异步组合,模块描述的基本要素包括非确定性选择,状态转换和并行赋值语句。
        • 其模型检测的基本方法是以二叉图表示状态转换关系,以计算不动点的方法检测状态的可达性和其所满足的性质。
        • > http://www.cs.cmu.edu/~modelcheck/smv.html
      2. NuSmv(New Symbolic Model Verifier) 新符号模型检测工具

        • 对SMV重构的一个模型检测工具
        • 支持计算树逻辑CTL和线性时序逻辑LTL描述的所有规范
        • 整合了以SAT为基础的有界模型检测技术
        • > http://nusmv.fbk.eu/
      3. nuXmv 分析同步有限状态和无限状态系统的新符号模型检测工具

        • 扩展于NuSMV
        • 对于有限状态的情形,nuXmv特点是基于SAT算法的有效验证引擎
        • 对于无限状态的情形,nuXmv特点是基于SMT的验证技术,与MathSAT5紧密集成
        • > https://nuxmv.fbk.eu/
      4. Uppaal(Uppsala University & Aalborg University) 时间自动机的模型检测工具

      5. STeP(Stanford Temporal Prover) 斯坦福时间验证器

        • 用模型检测器处理子系统的验证问题
        • 用定理证明器将结果汇总处理
        • 不限于有限状态系统
        • 用推论方式联合模型检测应用于更广泛的系统,包括无限数据域的程序
        • > http://www-step.stanford.edu/
      6. CWB(Concurrency Workbench) 适用于并发系统操作与分析的自动化工具

        • 可以检测系统模型之间的等价关系、FRE-ORDER关系和系统是否能够满足$\mu$-演算的公式
        • 建模方法使用CCS语言或LOTOS语言的子集

        - 能分析给定程序的状态空间及检测多种语义的等价性和序列性

      7. VIS(Verification Interacting with Synthesis) 用于形式验证、综合和模拟有限状态系统的工具

    2. 面向源程序语言的模型检测工具

      1. SPIN(Simple Promela Interpreter) 显式模型检测工具

        • SPIN用以检测一个有限状态系统是否满足PLTL公式及其他一些性质,包括可达性和循环。
        • 建模方式是以进程为单位,进程异步组合,进程描述的基本要素包括赋值语句,条件语句,通讯语句,非确定性选择和循环语句。
        • 基本方法是以自动机表示各进程和PLTL公式,以计算这些自动机的组合可接受的语言是否为空的方法检测进程模型是否满足给定的性质。
        • 建模语言为PROMELA(PROcess MEta LAnguage),基于进程结构,有类似C语言的结构
        • > http://spinroot.com/spin/whatispin.html
      2. BLAST(Berkeley Lazy Abstraction Software Verification Tool) C程序的时序安全属性自动验证工具

      3. SLAM C程序模型检测工具

      4. JPF(Java Path Finder) Java程序验证工具

      5. VeriSoft 直接测试C源代码

      6. Eraser 能够检测Java代码
      7. Jchecker C程序模型检测工具
        • 基于谓词抽象理论
        • 采用基于谓词抽象的反例引导的抽象求精框架
        • 能够针对C程序源码抽象出模型并完备地搜索其状态空间,以此验证程序的安全属性
        • 最大限度缩减状态空间
      8. Bandera 并发Java程序的模型检测工具

      9. Klocwork InsightPro 可以检测多种语言类型的多种质量缺陷和安全漏洞

      10. CMC 可以检测C语言程序在执行时OS层级的调度
      11. MaceMC 用于检测分布式系统
      12. Chess 用于检测多线程的Windows程序

      13. FDR

      14. Murphi 一种枚举显示状态的模型检测器,针对C语言

      15. MoonWalker 针对.NET应用的模型检测工具

      16. XMC 对JAVA程序中同步操作算法检测
      17. FLAVERS(FLow Analysis for VERification of Systems 针对ADA语言的工具

      18. Mocha 针对C语言的模型检测工具

      19. CBMC 针对C语言/C++的模型检测工具

      20. MAGIC(Modular Analysis of proGrams In C) 针对C语言的模型检测工具

    3. 其他模型检测工具

      1. OFMC 一种用于安全协议的符号模型检测工具
      2. CoPS 持久安全性检测器
      3. Rational Tau
      4. F-Soft
      5. IMPACT
      6. Astree analysis tool
      7. Saturn
      8. Calysto
      9. Terminator
      10. SATABS
      11. Terminator
      12. mCRL2(micro Common Representation Language) 并发系统检测工具
      13. LTSA(Labeled Transition System Analyzer) 并发系统检测工具
      14. Maude 基于逻辑语义的工具
      15. ISP MPI程序的检测工具
      16. CHIC(Checker for Interface Compatibility) 模块行为兼容性的验证工具
      17. MRMC(Markov Reward Model) 对离散和连续时间的马尔可夫激励模型
      18. UMLChecker UML模型检测工具
      19. BACH(Bounded ReachAblity CHecker) 用于分析线性混成自动机有界可达性分析
      20. LDPChecker 针对正环闭合自动机(Positive Loop-closed Automata)检验线性时段性质
      21. QRDChecker 针对时段时序逻辑QRDC(Quantified Restrictred Duration Calculs)的检验工具
      22. Kronos
      23. HyTech
      24. AUTOABS
      25. FeaVer
      26. 3VMC
      27. aSpin
    4. 其他分类方式

      • 结合模型检测与定理证明
        • STeP
      • 符号模型检测
        • 用有序二叉图OBDDs(Ordered Binary Decision Diagrams)描述状态迁移图
        • 用布尔逻辑公式描述系统属性
      • 定界模型检测技术(bounded model checking)
        • 依赖于布尔可满足性问题(boolean satisfiability problem, SAT)的求解器
        • 在限定步数k内,确定系统是否满足性质。
        • 若不能确定,则增加k值,重新进行验证
    5. 其他分类方式

      • 基于自动机理论
        • SPIN
      • 基于不动点定理
        • SMV
    6. 其他分类方式

      • 针对实时系统的模型检测工具
        • UPPAAL, Kronos, STeP
      • 针对并发系统的模型检测工具
        • Spin, JPF, Verisoft
      • 针对混成系统的模型检测工具
        • HyTech, HySAT, BACH, LDPChecker
    7. 模型检测的步骤:

      1. 抽象出系统的数学模型
        • 迁移系统
        • 马尔可夫链
        • Kripke结构
      2. 给出能够描述该系统性质的语言
        • 线性时序逻辑LTL
          • 关心系统的任意一次运行中的状态以及它们之间的关系
        • 分支时序逻辑CTL
          • 分叉时序逻辑,用来描述状态的前后关系和分支情况
        • $\mu$-演算
          • 关心系统的动作与状态之间的关系
    展开全文
  • SMV 模型检测工具使用

    千次阅读 2018-12-30 11:49:12
    SMV是一个符号验证工具,是一个特别经典的形式化验证工具。本博文就关于如何安装smv一些介绍。 SMV安装 linux 源码安装 wget http://www.cs.cmu.edu/~modelcheck/smv/smv.r2.5.4.tar.gz tar -xvf smv.r.2.5.4.tar....
  • 在线转模型工具

    千次阅读 2018-08-02 14:06:59
    在线转模型工具 网络地址 挺好使的一款工具,不用下载,直接在线转即可。 四、json格式化 json在线格式化 使用他的主要是什么呢?一美观,其二看数据格式方面 ...
  • 使用kenlm工具训练统计语言模型

    万次阅读 热门讨论 2018-03-14 20:46:05
    统计语言模型工具有比较多的选择,目前使用比较好的有srilm及kenlm,其中kenlm比srilm晚出来,训练速度也更快,而且支持单机大数据的训练。现在介绍一下kenlm的使用方法。 二、使用kenlm训练 n-gram 1.工具主页:...
  • 模型可视化工具

    千次阅读 2019-05-28 14:37:30
    Backto PyTorch Index TensorBoard(X) NN SVG: 在线交互,成图美观,表意可以,灵活性差。 Netron: LaTex 生成工具,看...论文中卷积神经网络常见的示意图用什么软件来画比较容易? - 李佳骏的回答 - 知乎 https:/...
  • 我想要做一个应用程序,能够显示3D人体模型的,并能输入参数对模型进行变换的。 比如,选择男性,得到一个男性的标准模型,然后用户输入该男性的身高、腿长等,然后模型进行相应的变换。 那么,请问: 1.用什么开发...
  • SRILM语言模型工具

    千次阅读 2014-02-19 17:51:33
    最近学习了一下SRILM的源...笔记的主要内容使用starUML及其逆向工程工具绘制,主要针对SRILM的训练(ngram-count),内含5个jpg文件: 类图--与ngram-count相关的主要类的静态图;ngram-count--从语料训练出模型的主要
  • 开源机器学习模型管理工具DVC介绍

    千次阅读 2020-06-05 18:23:41
    算法工程师往往在使用算法的过程中不断地调整参数去找到最好的效果,俗称“调参民工”。在不断的调参过程中,会产生各种各样的模型,如何记录好这些参数与模型效果对应的关系,往往另算法工程师很头疼。所以大家都...
  • caffe模型可视化工具

    千次阅读 2018-04-20 14:12:45
    caffe模型可视化工具,将caffe模型复制到网页中按shift+Enter显示网络结构http://ethereon.github.io/netscope/quickstart.html
  • 万能模型可视化工具

    万次阅读 2020-01-11 11:19:13
    https://lutzroeder.github.io/netron/
  • 模型检测工具汇总(比较全)

    千次阅读 2019-09-23 17:09:21
    面向形式化规格语言的模型检测工具 SMV(Symbolic Model Verifier) 符号模型检测工具 SMV以检测一个有限状态系统是否满足CTL公式。 它的建模方式是以模块为单位,模块可以同步或异步组合,模块描述的基本...
  • 利用斯坦福主题模型工具(stanford TMT)LDA

    千次阅读 热门讨论 2014-05-06 22:04:12
    LDA模型是主题模型(topic model)的一种
  • 我是如何生成ER模型图,无脑加小白生成ER模型,还画ER模型图吗,直接导入,数据库视图直接导入查看。 Freedgo(自由行走) Design 一款在线ER模型生成的工具,可以针对MySQL的DDL文件在线生成ER模型图表。 支持导入...
  • MMdnn:微软模型转换工具

    千次阅读 2019-06-03 17:13:25
    简介 深度学习火了,一同热的还有深度学习框架。当然经过了几年的淘汰(比如theano),目前最火的大概有Tensorflow、PyTorch以及Caffe了。他们各有所长,开发时...MMdnn就是这样的一个模型转换工具,而且是微软出品...
  • 数据库模型建模工具PDMan

    千次阅读 2019-03-14 13:48:01
    PDMan是一款开源免费的数据库模型建模工具,是PowerDesigner之外另一种更好的选择。支持Windows,Mac,Linux等操作系统,具有上手容易,使用简单的特点。 主要支持的功能如下: 数据库建模 生成DDL脚本并执行 支持...
  • 数据仓库模型设计与工具

    千次阅读 2020-04-01 10:09:57
    什么大多数企业,数仓都重建,这不仅仅是业务拓展、发展迅速,很大一部分是因为模型建的很烂。 一、基本概念 维度建模,是数据仓库大师Ralph Kimball提出的,是数据仓库工程领域最流行的数仓建模经典。 ...
  • 使用 matlab 深度学习工具训练模型

    千次阅读 2020-04-24 19:26:04
    都可弹出 matlab 的深度学习工具,如图所示: 这样,在这个工具里面就可以向搭积木一样,搭建自己的深度学习网络。同时可以在 matlab 的附加功能源管理器中,导入训练好的网络,如VGG16,Alexnet,研究学习前辈的...
  •  这两个工具的定位是不同的,SLM是用来训练大数据的,正如官方所说的,如果只是训练几百个句子,杀鸡就不用牛刀了,我们可以选择 Sphinx Knowledge Base Tool,这个工具简单,易用,你所要做的只是给他提供语料,...
  • 使用netron工具可视化pytorch模型

    千次阅读 2019-11-08 16:41:28
    由于不支持默认的pytorch模型格式(.pth),因此需要存为onnx,庆幸pytorch支持! import torch import torch.nn as nn import torch.nn.functional as F import torch.onnx import netron class model(nn....
  • c++对象内存模型分析工具

    千次阅读 2016-07-27 23:43:53
    本文介绍了vs内存模型分析工具使用方法,以及用途
  • gazebo是ROS中的一个实现物理仿真的工具包,...1.使用gazebo加载机器人模型类似于rviz工具,在gazebo工具中也可以加载机器人模型。 加载的步骤: (1)安装gazebo工具包 (2)新建工程,将包的路径位置加入到环境变
  • 游戏模型提取工具NinjaRipper

    千次阅读 2017-05-23 19:35:38
    游戏模型提取工具NinjaRipper是一款用于3d游戏中的模型提取工具,不过NinjaRipper仅限于DX 8/9/11,操作也很简单 功能介绍 1、用于截取3D遊戲中的模型,贴图和著色器(仅限DirectX 8,DirectX 9和DirectX 11...
  • 倾斜摄影模型ArcGIS工具

    千次阅读 2019-06-12 15:51:55
    笔者写了一个针对ArcGIS软件平台的工具集,主要是为了处理倾斜模型i3s服务,截图如下 下载链接如下,有配套的教程文档指导使用,如果觉得工具不错,记得点赞!!! 链接:...
  • polygon模型去切CV曲线的工具

    千次阅读 2016-04-18 21:53:35
    项目需要,在人头上把头发CV曲线多余的部分切掉,所以需要开发一个polygon模型去切CV曲线的工具。 可以通过Polygon -> Subdiv模型,然后Sbudiv模型去切曲线,这个在maya里已经集成了。 我纯数学的方法写...
  • 语言模型(一) 工具使用简介

    千次阅读 2015-08-30 21:13:58
    一、常用工具 1. Kenlm https://kheafield.com/code/kenlm/ C++版本,最大特点是速度快、占用内存少 2. Srilm http://www.speech.sri.com/projects/srilm/ SRI(Standford ResearchInstitute)开发,使用比较广泛...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 783,426
精华内容 313,370
关键字:

做模型要用什么工具