• IIANews微官网
    sao描二维码 进入微官网
    IIANews微xin
    sao描二维码 关zhu微xin
    移dongke户端
  • English
2020第二届zhong国智能展lan会
传感器

  2020nian05月14日  

  如今,深度学习yizai商业领域普及,xian实zhong对训练好的推理mo型的应yong,yi可见于各行各业,但具ti应yong祄uengdaliang襩an狄恍ヾa公司祄u蚣芑虿贰K怯行﹖i供云端的接口,也有些ti供ji于安卓的智能终端上的 apk,换句hua说,核心其实并没有掌握zai自ji手里,想深度定制jiunan了。

  而能够自行采yong TensorRT、cuDNN 或 CUDA,或者利yong Intel MKL-DNN,you或者zhen对 ARM 的 Mali GPU 或 Neon 核实xian深度学习应yong祄o肫毡榇鎧ai的需qiu相比rengzai少数。

  原因可能是xia面zhong的一条或多条:

  缺乏有相关编程jing验的gong程shi
  mu标平台不能yong TensorRT,自jiji于 cuDNN 或原生 CUDA 写太nan了
  yong TensorRT huai能搞定 NVIDIA GPU,ARM 实zai无能wei力
  找来一套开源dai码,BUG 好多,dong不dongjiu死了,死了,了
  xing能不da标但liang化好坑,FP32 祅aP蛕huan FP16/INT8 可咋整
  有 Intel Xeon 处理器没 NVIDIA GPU,huaide学 MKL-DNN 框架

  【编者zhu:深度学习不仅训练要yong到daliang数据和算力,其推理也hen耗计算资源,因cizai蔰ao视ongzhong必须利yong如 MKL-DNN、CUDA、ARM Compute 等zai支持张liang计算的硬件如 Intel Xeon、NVIDIA GPU 和 ARM Mali 或 Neon 核上实xian才能获de满zu蔰ao室猶iu的xing能】

  na有没有办法you快you稳地zai不同mu标平台上yong C++ 轻松实xian训练好的推理mo型呢?

  眼见wei实,我们xiankan一个lizi。

  jiashe我们有一个训练好的 LSTM mo型,存储zai lstmnet.mat 文件zhong【编者zhu:它可以是zai开源框架zhong训练后按ONNX标zhun格式dao入MATLAB祄o部梢允莦aiMATLABzhong训羏an摹浚颐切戳艘桓 MATLAB 函数 lstmnet_predict.m 来调yong这个mo型进行推理,如xia:

  function out =lstmnet_predict(in)
  persistent mynet;
  if isempty(mynet)
      mynet =coder.loadDeepLearningNetwork('lstmnet.mat');
  end
  out = predict(mynet,in);

  采yong以xia脚本【编者zhu:或者通guo GPU Coder na个带xiangdaoti示的图形化 APP】,ji可wei上述推理函数产生 C++ dai码。

  % weidai码生成进衳in渲曼BR>  cfg = coder.gpuConfig('mex');
  cfg.TargetLang = 'C++';
  cfg.DeepLearningConfig = coder.DeepLearningConfig('cudnn');
  % 定义mu标函数的shu入瞱en?BR>  matrixInput = coder.typeof(double(0),[3 Inf],[falsetrue]);
  % Run the codegen command.
  codegen -configcfglstmnet_predict-args{matrixInput}-report

  自dong生成的 C++ dai码kan起来是xia面这个样zi祄o裹/P>

  事实上,通guo修gaidai码生成配置,也jiu是xia面这几行dai码,我们jiu可以wei不同祅a勘昶教ㄉ刹煌膁ai码了。

  % weidai码生成进衳in渲曼BR>  cfg = coder.gpuConfig('mex');
  cfg.TargetLang = 'C++';
  cfg.DeepLearningConfig = coder.DeepLearningConfig('cudnn');

  譬如,如果我们要ji于 TensorRT 来生成qian入式 GPU(如Jetson Nano)上跑的dai码:

  % weidai码生成进衳in渲曼BR>  cfg = coder.gpuConfig('lib');
  cfg.TargetLang = 'C++';
  cfg.GenCodeOnly = true;
  cfg.Hardware = coder.hardware('NVIDIA Jetson');
  cfg.DeepLearningConfig = coder.DeepLearningConfig('tensorrt');
  cfg.GpuConfig.ComputeCapability = '7.0';
  % cfg.DeepLearningConfig.DataType= 'fp16';
  % 定义mu标函数的shu入瞱en?BR>  matrixInput = coder.typeof(double(0),[3 Inf],[falsetrue]);
  % Run the codegen command.
  codegen -configcfglstmnet_predict-args{matrixInput}-report

  这里,我们可以指定硬件平台与兼容版本,shenzhi通guo增jia一行 DataType 的配置jiu可以从默认的 FP32 zhuan而生成 FP16 的推理dai码了。
 
  【编者zhu:zhuan成 INT8 shao微复杂一些,因weina不仅要fang止yi出,huai必须进行校验校zhun。以一个图xiang分类网络如 mobilenet v2 或 resnet-50 weili,如果要产生 INT8 的dai码,我们需要zhun备一个数据集yong来zaidai码生成时进行校验校zhun,但dai码生成时的配置其实也jiu是 3 行脚本:

  cfg.DeepLearningConfig.DataType ='int8';
  cfg.DeepLearningConfig.DataPath ='calib_dataset';
  cfg.DeepLearningConfig.NumCalibrationBatches = 50;

  另外,最xin的MATLAB R2020a有一个Deep Network Quantizer附jia功能可以yong来简化这一gong作。】

  再譬如,如果要zhen对 ARM Neon 生成 C++ dai码,脚本如xia:

  % weidai码生成进衳in渲曼BR>  cfg = coder.config('lib');
  cfg.TargetLang = 'C++';
  cfg.GenCodeOnly = true;
  dlcfg = coder.DeepLearningConfig('arm-compute');
  dlcfg.ArmArchitecture = 'armv7';
  dlcfg.ArmComputeVersion = '19.05';
  cfg.DeepLearningConfig = dlcfg;
  % cfg.Hardware =coder.hardware('Raspberry Pi');
  % 定义mu标函数的shu入瞱en?BR>  matrixInput = coder.typeof(double(0),[3 Inf],[falsetrue]);
  % Run the codegen command.
  codegen -configcfglstmnet_predict-args{matrixInput}-report

  这里yong到了 ARM Compute 库,我们不仅指定了 ARM 的架gou版本,huai指定了 Compute 库的版本。

  【编者zhu:Arm Compute Library 与 MATLAB 的版本最好按bang助文档的ti示进行对应,因weina是验证guo而且对应you化guo祄o鼙Vの榷▁ing和xing能最you;另外,由于编译器兼容xing的wen题,建议can考bang助文档,自行从源dai码编译安装 ARM Compute library 到你的qian入式硬件上。】

  给 ARM Neon 生成的dai码kan起来是这样zi祄o裹/P>

    【编者zhu#1e匀唬鼋錾 C++ dai码是瞙uai坏mo评韒o型huai含有数以bai万计祅an盗泛玫牟wen兀琻a肯定也是一并生成好了祄o襷ai生成的dai码zhong会自dong完成这些数据文件的jia载和瞱en鮯hi化,ninzai应yong程序zhong只需要对接口进行调yongji可】。

  【编者zhu#2:有些深度学习推理mo型的接口也hen复杂,生成后调yong起来也要搞清chuhen多东西才能玩dezhuan,能不能生成一个主程序给做个can考呀an餫n是肯定祄o憧梢园 MATLAB 里写祅a按砗秃蟠硪舶瑉aidai码生成zhong,然后再zaidai码生成配置zhong增jia这样一行ji可:cfg.GenerateExampleMain = 'GenerateCodeAndCompile';】。

  【编者zhu#3:自dong生成的文件这么多,能自dong产生 makefile 吗?必须能,不仅可以自dong产生 makefile,huai可以自dong通guo调yong开发机或者mu标机的编译器,以本地编译或交叉编译的方式进行编译,从而产生可zhi行文件、dong态库或静态库】

  MATLAB 都能wei深度学习推理mo型生成na些mu标平台的dai码呢?

  dang前 MATLAB R2020a 支持祅a勘昶教òǎ裹/P>

  ●NVIDIA GPU,支持 TensorRT 和 cuDNN,兼容 Windows、Linux 及ji于 Linux 的qian入式 GPU 平台(如 NVIDIA Jetson 系列和 Drive 系列)

  ●ARM Cortex-A 系列,含 Neon 核,支持 ARM Compute Library

  ●ARM Mali GPU,支持 ARM Compute Library

  ●Intel Xeon,AVX/SSE 指令集,支持 Intel MKL-DNN

标签:MathWorks MATLAB我要反馈
最xin视频
无需上电、一zhuanji可的gong控界神来之笔——PK压力传感器   
倒计时2天!Openlab Day带你一zhan式了解NI IC开放实验室!   
世强
MIR自主移dong机器人
福禄克
禹衡光学
zhuan题报道
2020第二届zhong国智能展lan会
2020第二届zhong国智能展lan会 2020nian4月16日,由智能网联he国际gong业自dong化、造车网共同打造的“线上云展”——2020第二届zhong国智能展lan会正式上线。本季展会wei期10天,ji续围绕“智能领跑,无xianwei来”的主题打造七daxu拟展厅,以强da祄u萍ji诵谋驹磜eican展商、投资商与展会观众之间筑建硓hong┩ǖ膞in息桥梁,助力zhong国制造业xin祅ao鯿hang。
企业通xun
菲ni克斯打印机组he方an
菲ni克斯打印机组he方an

菲ni克斯ti供quan面的gong襠ang晔洞蛴』鱳ei标识产品的打印平台。打印机采yong不同的打印技术:热zhuan印、pen墨打印,满zu不同标识产品、

3分钟了解 TI LED 驱dong器功能和选型
3分钟了解 TI LED 驱dong器功能和选型

LED 功能剖析及 TI LED 驱dong器选型謌ai稀Ⅻ/p>

zai线会议

社区