如何强制MATLAB在CPU而不是GPU上运行深度学习代码

8235人阅读
5min带你快速入门(3)
深度学习(3)
MatConvNet
深度学习入门级框架MatConvNet环境配置(Ubuntu14.04+Cuda7.5+Cudnn5+Matlab2014a)
最近深度学习开始入门,用到了深度学习框架MatConvNet。MatConvNet是一个基于matlab的简易入门级框架,可以帮助快速构建深度学习网络,而且支持GPU加速计算(只需一行代码”opts.train.gpus = 1”就可以搞定!完全不用去在意它是如何实现的)
网上没有太多中文资料,只好自己看官网教程和manual。由于没有任何经验,也遇到了不少问题。在这里记录并解决一下,以期能够帮到大家。推荐大家有问题可以去官网查看或者去Github主页上提问。
一、相关软件下载
(一)硬件配置:GeForce GTX 980 Ti
(二)本机系统:Ubuntu14.04,Matlab2014a(Windows版安装教程参考
(三)Cuda下载:,本人使用Cuda7.5,建议离线下载到百度云,再下会快一点。
(四)Cudnn下载:,本人使用Cudnn5。建议下载cuDNN v5 Library for Linux。很好的GPU加速运行库,亲测速度飙升。可以离线下载到百度云,再下会快一点(可能需要注册Nvidia账号)
(五)MatConvNet下载:
二、安装步骤
(一)安装Cuda
建议下载.deb,直接双击安装就好了。
sudo dpkg -i cuda-repo-ubuntu-local_7.5-18_amd64.deb
sudo apt-get update
sudo apt-get install cuda
接着配置环境变量,打开文件.profile(只对当前用户生效):
sudo gedit ~/.profile
在文件的末尾添加如下几行:
export CUDA_HOME=/usr/local/cuda-7.5
export LD_LIBRARY_PATH=${CUDA_HOME}/lib64
PATH=${CUDA_HOME}/bin:${PATH}
export PATH
接着重启电脑,配置生效,安装完毕。
如果已装cuda,可在matlab里使用命令gpuDevice获取toolkit版本信息。
详细步骤可参考
(二)安装MatConvNet
下载后解压到某路径即可,如/usr/local/MATLAB/R2014a/toolbox/matconvnet-master。
cudnn-7.5-linux-x64-v5.0-rc.tgz
-C /usr/local/MATLAB/R2014a/toolbox/matconvnet-master
可能需要修改文件夹权限,允许读取和修改。
chmod -R 777 /usr/local/MATLAB/R2014a/toolbox/matconvnet-master
(三)安装Cudnn
下载cuDNN v5 Library for Linux,建议先在MatConvNet里新建一个文件夹/usr/local/MATLAB/R2014a/toolbox/matconvnet-master/local,并将其解压在local目录下。最终路径为/usr/local/MATLAB/R2014a/toolbox/matconvnet-master/local/cudnn5,cudnn5下包括include和lib64两个文件夹。
(注意:Cudnn解压后文件夹名为cuda,为了方便以后区别,改名为cudnn5。解压到其他目录或者更改其他文件夹命名也是可以的,只需要在下面的编译代码里面改一下路径即可)
(四)编译MatConvNet
(1)安装gcc和g++编译器
编译时需要nvcc编译器和gcc、g++编译器。安装cuda时安装了nvcc编译器,gcc、g++如果以前没有安装的话,需要自己安装。我使用的是gcc4.7、g++4.7。
sudo apt-get
install gcc-4.7
sudo apt-get
install g++-4.7
如果有多个版本的gcc和g++,可通过如下代码来设置优先级。(我安装的时候,不支持gcc4.8、g++4.8,所以我装了两个版本)
sudo update-alternatives --config gcc
sudo update-alternatives --config g++
(2)编译对应的模式
首先运行/matlab/xtest/vlsetupnn.m,在matlab里面添加有关路径。然后就可以开始编译。
总共有CPU、GPU、GPU(with cuDNN support)三种模式,第一次使用前或者更改模式后需要编译对应的模式。
1,CPU模式
速度最慢,为传统的CPU计算方式。EnableImreadJpeg的意思是支持批量读入jpg文件。
vl_compilenn('EnableImreadJpeg','true')
速度一般,正常的GPU计算方式。
vl_compilenn('enableGpu',true)
3,GPU(with cuDNN support)
速度最快,推荐使用这种,可以省不少时间。
vl_compilenn('enableGpu',true,'cudaRoot','/usr/local/cuda-7.5','cudaMethod','nvcc','enableCudnn',true,'cudnnRoot','local/cudnn5')
可使用如下代码测试
run matlab/vl_setupnn
urlwrite('http://www.vlfeat.org/sandbox-matconvnet/models/imagenet-vgg-f.mat', ...
'imagenet-vgg-f.mat') ;
net = load('imagenet-vgg-f.mat') ;
im = imread('peppers.png') ;
im_ = single(im) ;
im_ = imresize(im_, net.normalization.imageSize(1:2)) ;
im_ = im_ - net.normalization.averageI
res = vl_simplenn(net, im_) ;
scores = squeeze(gather(res(end).x)) ;
[bestScore, best] = max(scores) ;
figure(1) ; imagesc(im) ;
title(sprintf('%s (%d), score %.3f',...
net.classes.description{best}, best, bestScore)) ;
也可以直接运行/example/里面的代码进行测试。
Final advice: MatConvNet使用matlab语言,非常容易入门。但如果大家想进一步发展,首先你最好要有个能支持cuda的GPU,否则纯CPU是很慢的,尤其是处理图像的问题。(参考:)
Theano(基于Python), 系列教材就是基于Theano工具的。它的最大优点是支持自动符号求导,避免了初学者很害怕的BP推导,有很多扩展包,比如keras等,支持各类模型。其实列举这一个就够了。因为,如果仔细的话,你会在这个网站看到无数的深度学习相关工作链接,足够慢慢扩展到深度学习的所有前沿研究和工具了。
Torch (),基于lua编程语言(类matlab)。用的人非常多,因此很多常见模块的实现都很全面。
DeepLearnToolbox (),基于matlab。代码逻辑清楚,适合跟着代码学习深度学习的每个细节。
Caffe (),纯c++,科学研究中很多学者常用的工具,文档也很齐全。做物体检测相关任务的话,非常推荐!
Cuda-convnet2 (),效率高,支持单机多卡。ImageNet2012年冠军Alex的作品!不过代码有点抽象难改,而且只支持GPU并且是特定的几款GPU(也就是说是Alex大神是做过特定GPU优化的)。做简单的分类、回归问题推荐!不支持RNN。
Cxxnet (),纯c++。优点:支持多机多卡训练,适合公司级的部署。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:42583次
排名:千里之外
评论:19条
(1)(1)(1)(1)(7)查看: 210326|回复: 227
《MATLAB计算机视觉与深度学习实战》和《MATLAB图像与视频处理实用案例详解》代码下载
签到天数: 12 天[LV.3]偶尔看看II
请注意《计算机视觉与深度学习实战》是原《MATLAB图像与处理实用案例详解》书籍的升级版本,即:
第二版:《MATLAB计算机视觉与深度学习实战》,新增了深度学习等5个图像处理案例,修正已知的错误,并对部分案例修改升级。
第一版:《MATLAB图像与视频处理实用案例详解》,只有 25个图像处理案例
第一版和第二版的大部分案例是通用的,但是部分案例进行了升级,因此不同书籍需要不同的代码。
《MATLAB图像与视频处理使用案例详解》内容简介
《MATLAB图像与视频处理实用案例详解》目录列表
《MATLAB图像与视频处理实用案例详解》程序源码
《MATLAB图像与视频处理实用案例详解》购买链接
《MATLAB图像与视频处理实用案例详解》答疑汇总
《MATLAB图像与视频处理实用案例详解》错误纠正
由于书籍源代码包含众多作者精心收集的素材,且每一个案例都是有具体的实用背景,所以很多网友对源代码都十分感兴趣。为了维护购买了正版《MATLAB图像与视频处理实用案例详解》书籍用户的权益,根据读者的意见,目前网站暂时取消代码自由下载。
请购买《MATLAB计算机视觉与深度学习实战》和《MATLAB图像与视频处理实用案例详解》书籍的读者联系作者索要代码(注意提供书籍的卡号和验证码),只要作者在线必定第一时间回复,另外作者每晚上也会统一处理。工作时间原因,如果没法及时回复,敬请大家谅解。
现在,并在电商网页进行详细评价,即可立即获赠《网络研讨会录制视频111期》,具体步骤如下:
(1)请到书籍;
(2)在电商的网页《MATLAB计算机视觉与深度学习实战》和《MATLAB图像与视频处理实用案例详解》做详细评价;
(3)联系管理员或者索取视频;
(4)我们将在第一时间将研讨会视频发送到您的邮箱,期待与您共同进步。
《MathWorks网络研讨会录制视频111期》目录
2003_宋宇_利用设计无线通信系统.swf
200407_林晓冷_使用Simulink 和Real-Time Workshop Embedded Coder.swf
_曾学刚_利用RF工具箱和RF模块集分析和设计无线通信系统.swf
_胡佳宁_使用MATLAB的預製圖形函數和廣受信赖的數值計算来支持你的C&C++編程.swf
_林惠宝_使用Matlab和Simulink来开发视频和图形处理系统.swf
_冯海华_使用Matlab进行信号处理.swf
_陈香如_Matlab于财务模型开发与程式分享之应用.swf
_叶宏_使用Matlab和Simulink进行定点信号处理.swf
_陈嵘_Simulink中的控制设计入门.swf
_金文思_在汽车电子系统开发中如何运用基于模型的设计方法.swf
_高飞_简介Simulink在信号处理和通信领域的应用.swf
_陈炜_如何運用MATLAB進行並行計算.swf
_张灵惠_使用Simulink进行嵌入式代码生成和验证.swf
_陈香如_应用MATLAB于衍生性金融商品之定价模型.swf
_徐正高_使用Embedded Matlab进行算法设计和代码生成.swf
_陈炜_MATLAB的应用发布.swf
_赵志宏_通过基于模型的设计来加速FPGA的实现.swf
_许维高_Simulink中被控对象多域建模技术在控制系统设计中的应用.swf
_杨虹_使用MATLAB进行图像处理.swf
_吴菁_系统的早期验证:提高产品质量的同时缩短开发周期.swf
_陈炜_基于模型设计的机电系统多域物理建模与仿真实现.swf
_金文思_使用基于模型的设计开发汽车电子控制系统.swf
_陈炜_盘点2008b中MATLAB和Simulink新特性.swf
_童元铮_运动系统的控制优化设计–以四连杆机构控制为例 .swf
_陈炜_Matlab并行计算:数据处理与算法开发实际应用 .swf
_陈建平_Matlab在信号处理上的应用.swf
_张灵惠_使用Simulink Fixed Point来进行定点建模与代码生成.swf
_陈炜_使用统计与曲线拟合工具箱进行数据分析.swf
_王燚_使用Matlab进行金融建模和部署:风险管理实例分析.swf
_陈炜_使用Matlab加速C和C++算法开发.swf
_吴菁_Simulink Design Optimization介绍.swf
_陈炜_使用Simscape产品实现Simulink环境中的多域物理系统建模和仿真.swf
_金文思_使用基于模型的设计方法开发混合动力总成系统.swf
_陈炜_使用MATLAB帮助Excel用户加速数据处理.swf
_王燚_计量经济工具箱介绍.swf
_吴菁_盘点2009:MATLAB和Simulink新特性.swf
_吴菁_Simulink快速入门.swf
_陈炜_Simulink平台下变速型风力发电机的建模与仿真实现.swf
_吴菁_轻松实现PID控制.swf
_陈炜_Matlab在现代教学中的应用.swf
_陈炜_MATLAB高级编程之性能加速:从代码优化到并行计算.swf
_陈_如何在MATLAB设计滤波器和应用FPGA进行设计验证.swf
_敖国强_深入浅出实现电池建模与仿真.swf
_王燚_使用MATLAB开发投资组合优化模型.swf
_陈建平_MATLAB面向对象编程入门.swf
_陈炜_风电场无功管理的建模与仿真.swf
_壮贺钧_利用MATLAB建立信用风险模型.swf
_陈建平_信号处理与通信系统的设计与验证:建模与仿真.swf
_敖国强_汽车动力系统建模与仿真优化.swf
_王燚_使用MATLAB和符号数学工具箱开发和分析金融模型.swf
_魏奋_使用MATLAB产品进行全局优化.swf
_徐正高_使用DSP和FPGA进行图像和视频处理.swf
_陈建平_使用MATLAB数模混合信号设计ADC&DAC.swf
_董淑成_ISO26262与基于模型的汽车电子软件设计.swf
_魏奋_运用并行计算加速Simulink仿真.swf
_陈炜_MATLAB数学教学应用与数学建模实践.swf
_吴菁_使用MATLAB和Simulink让控制系统的开发更轻松.swf
_魏奋_运用MATLAB开发高频交易算法.swf
_魏奋_运用MATLAB预测电力负荷.flv
_徐正高_使用MATLAB Coder从MATLAB生成C&C++代码.flv
_魏奋_运用SimRF进行射频接收器的系统级仿真.flv
_徐正高_使用MATLAB和Simulink加快FPGA原型设计和验证.flv
_董淑成_使用基于模型的设计开发AUTOSAR应用软件.flv
_吴菁_风电场并网建模.flv
_魏奋_运用MATLAB开发协调和配对交易策略.flv
_薛定宇_MATLAB语言在最优控制器设计中的应用.swf
_敖国强_采用xPC实现混合动力汽车控制系统的快速原型开发.swf
_杨虹_MATLAB用于图像处理和计算机视觉.swf
_魏奋_运用MATLAB开发信用风险模型.flv
_陈建平计算统计学:MATLAB统计分类初步.FLV
_崔丽_MATLAB数学建模与数学实践课程.flv
_韩轶奇利用基于模型的设计开发电机控制系统.FLV
_魏奋_MATLAB应用程序发布.swf
_Zaranek_MATLAB大型数据.FLV
_徐正高《使用HDL Coder和HDL Verifier加快FPGA的开发和验证》.FLV
_敖国强《高精度的锂离子电池建模与仿真》.FLV
_吴菁《Stateflow 快速入门》.FLV
_董浩《使用基于模型的设计开发符合ISO 26262标准的汽车电子软件》.FLV
_徐正高《数字滤波器设计》.FLV
_韩轶奇《利用基于模型的设计开发汽车新技术》.FLV
_魏奋《使用MATLAB进行风力数据分析》.FLV
_李春彦《基于MATLAB&Simulink平台的电力系统建模及控制系统设计》.FLV
_杨兴《使用SimMechanics进行多体动力学仿真》.FLV
_陈炜《符号数学功能在数学与物理课程中实际应用》.FLV
_叶健《Polyspace 代码验证器:将您从代码运行错误中解放出来》.FLV
_魏奋《MATLAB轻松实现金融建模》.FLV
_陈建平《MATLAB 大规模数据处理技巧》.FLV
_李春彦《Simulink R2012b建模技巧》.FLV
_叶健《应用MATLAB进行医学图像处理》.FLV
_吴菁《大规模模型的构建技巧》.FLV
_魏奋《面向Excel用户的MATLAB-以预测电力负荷为例》.FLV
_高莹《应用MATLAB进行发动机控制及诊断策略研》.FLV
_杨兴《基于Simscape的多域物理系统建模》.FLV
_程烨《运用MATLAB&Simulink连接低成本硬件实现基于项目的学习》.FLV
_董淑成《基于Simulink模型的嵌入式代码生》.FLV
_徐正高《MATLAB和Simulink定点设计的快速入门》.FLV
-卓金武《2012年竞赛试题分析与MATLAB实践经验交流》.FLV
_李春彦《MATLAB和Simulink在能源与电力行业的应用》.FLV
_李大玮《基于MATLAB构建量化投资策略案例分享》.FLV
_宋登《运用MATLAB和Simulink加快FPGA设计和速度以及面积优化》.FLV
_杨兴《基于实验数据搭建精确Simscape锂电池模型》.FLV
_单博《基于Simulink的树莓派开发板(Raspberry Pi)编程》.FLV
_杨兴《为工程车辆开发多物理域的系统级模型》.FLV
_周玲《加速Simulink仿真性能的建模技巧》.FLV
_卓金武《MATLAB程序设计技巧》.FLV
_卓金武《汽车行业MATLAB数据分析和处理》.FLV
_张延亮《移动机器人防撞的Simulink仿真》.FLV
_陈小挺《在FPGA上实现无线通信接收机》.FLV
_李春彦《使用Polyspace进行软件代码错误检查和运行时错误证明》.FLV
_魏奋《轻松实现MATLAB蒙特卡洛方法建模》.FLV
_董淑成《模型验证和优化》.FLV
好东西啊,就是贝壳不足
该用户从未签到
版主你好,已经购买了《MATLAB计算机视觉与深度学习实战》,但书背面的在线交流卡是空的。能否请版主将源码发给我,邮箱:,谢谢!
该用户从未签到
买了书,求源代码,发给我
该用户从未签到
买了书就可以,解压密码在书中。
京东购买页面:http://item.jd.com/.html
当当购买页面:ht ...
您好,我买了书,邮箱向您索要代码,但是您那边没有回复
该用户从未签到
什么时候可以下载?
该用户从未签到
发表于 6&天前
请发给我一份源代码,谢谢,京东上购的书,
网站官方,,,保证您有偿编程安全。
该用户从未签到
发表于 6&天前
我买了书,能给下代码吗,
签到天数: 1 天[LV.1]初来乍到
编者您好,我已购买书籍《MATLAB计算机视觉与深度学习实战》,书后有在线交流卡,但在网上没有找到程序源码下载,能否请您把书中源码发我邮箱:,谢谢。
网站官方,,,保证您有偿编程安全。
该用户从未签到
您好,我在淘宝购买了该书籍,请将源码发至,谢谢!
该用户从未签到
已购买书籍,麻烦您把源码发给我 ,谢谢。
网站官方,,,保证您有偿编程安全。
该用户从未签到
版主你好,已经购买了《MATLAB计算机视觉与深度学习实战》,但书背面的在线交流卡是空的。能否请版主将源码发给我,邮箱:[email],谢谢!
签到天数: 166 天[LV.7]常住居民III
该用户从未签到
版主你好,已经购买了《MATLAB计算机视觉与深度学习实战》,但书背面的在线交流卡是空的。能否请版主将源码发给我,邮箱:,谢谢!
该用户从未签到
你好已经在京东买书,需要源码资源,请发邮箱,谢谢
Powered by专访 | MATLAB更新R2017b:转换CUDA代码极大提升推断速度_乐投网-大数据、人工智能、金融科技第一干货网_创新TMT新媒体平台
专访 | MATLAB更新R2017b:转换CUDA代码极大提升推断速度
作者:乐投网
近日,Mathworks 推出了包含 MATLAB 和 Simulink 产品系列的 Release 2017b(R2017b),该版本大大加强了 MATLAB 对深度学习的支持,并简化了工程师、研究人员及其他领域专家设计、训练和部署模型的方式。
近日,Mathworks 推出了包含 MATLAB 和 Simulink 产品系列的 Release 2017b(R2017b),该版本大大加强了 MATLAB 对的支持,并简化了工程师、研究人员及其他领域专家设计、训练和部署模型的方式。该更新版本从数据标注、模型搭建、训练与推断还有最后的模型部署方面完整地支持开发流程。此外,MATLAB 这次更新最大的亮点是新组件 GPU Coder,它能自动将深度学习模型代码转换为 NVIDIA GPU 的 CUDA 代码,GPU Coder 转换后的 CUDA 代码可以脱离 MATLAB 环境直接高效地执行推断。经 MATLAB 内部基准测试显示,GPU Coder 产生的 CUDA 代码,比
的性能高 7 倍,比 Caffe2 的性能高 4.5 倍。
对此,小编采访了 MathWorks 中国资深应用工程师陈建平,陈建平从 MATLAB 中的数据标注开始沿着深度学习模型的开发、训练、调试到最后使用 GPU Coder 部署高性能模型,为我们介绍了 MATLAB 这一次更新针对深度学习所做的努力。本文将沿着 MATLAB 深度学习开发过程简要介绍这次更新的要点,同时重点向大家展示能自动将模型转化为 CUDA 代码的 GPU Coder 模块。
对于来说,Computer Vision System Toolbox 中的 Ground Truth Labeler app 可提供一种交互式的方法半自动地标注一系列图像。除了目标检测与定位外,该工具箱现在还支持语义分割,它能对图像中的像素区域进行分类。陈建平说:「我们现在的标注工具可以直接半自动地完成任务,它可以像 Photoshop 中的魔棒工具一样自动标注出像素层级的类别,我们选中图片后工具会自动将对象抠出来。在我们完成初始化的图像语义分割后,工具会使用自动化的手段把后续行驶过程中的其它元素都抠出来。因为中间和后续过程都是以机器为主导完成的,所以我们只需要在前期使用少量的人力就能完成整个标注过程。」
这种半自动方法确实可以大大提升标注的效率,特别是标注车道边界线和汽车边界框等视觉系统目标。在这种自动标注框架下,算法可以快速地完成整个数据集的标注,而随后我们只需要少量的监督与验证就能构建一个精确的数据集。如下所示,MATLAB 文档向我们展示了如何创建车道线自动标注。
我们可以使用不同的算法,如能自动检测车道线特征的 Auto Lane Detection、使用聚合通道特征(Aggregate Channel Features/ACF)检测车辆的 ACF Vehicle Detector 和使用 Kanade-Lucas_Tomasi(KLT)在小间隔内追踪一个或多个 ROI 的算法等。如果我们选择自动算法,那么接下来设置 ROI、最大车道数、车道线宽度等参数后就可以直接运行自动标注。若视频经过人工微调与校验,并达到不错的效果,我们就可以选择「Accept」完成标注任务。
在模型构建方面,Neural Network Toolbox 增加了对复杂架构的支持,包括有向无环图(DAG)和长短期记忆(LSTM)网络等,并提供对 GoogLeNet 等流行的预训练模型的访问方式。陈建平表示:「其实 MATLAB 在 2016 年的时候就已经支持一些深度学习模型,而现在不仅支持 VGGNet 和 GoogleNet 等流行的预训练模型,同时还支持使用 Caffe Model Importer 直接从 Caffe 中导入。」
因为我们可以直接从 Caffe Model Zoo 中导入各种优秀与前沿的模型,所以 MATLAB 在模型方面可以提供广泛的支持。但直接从 Caffe 中导入模型又会产生一个疑惑,即如果我们在 Python 环境下使用 Caffe 构建了一个模型,那么导入 MATLAB 是不是需要转写代码,会不会需要做一些额外的工作以完成导入?对此,陈建平解答到:「假设我们使用 Python 和 Caffe 完成了一个模型,并保存以 Caffe 格式,那么 Caffe Model Importer 会直接从保存的 Caffe 格式中读取模型。在这个过程中,Caffe 并不需要为 MATLAB 做额外的工作,所有的转换结果都是 MATLAB 完成的。」
在导入模型后,我们可以直接使用类似于 Keras 的高级 API 修改模型或重建模型。下面将简要介绍如何导入预训练 AlexNet,并修改完成迁移学习。
首先我们需要导入 AlexNet,如果 Neural Network Toolbox 中没有安装 AlexNet,那么软件会提供下载地址。
net =net.Layers
上面的语句将导入 AlexNet,并如下所示展示整个 CNN 的架构。其中 MATLAB 会展示所有的操作层,每一层都给出了层级名、操作类型和层级参数等关键信息。例如第二个操作层『conv1』表示一个卷积运算,该运算采用了 96 个卷积核,每一个卷积核的尺寸为 11&11&3、步幅为 4,该卷积运算采用了 padding。
这种描述不仅有利于我们了解整个神经网络的架构,同时还有助于调整架构以匹配特定的任务。由上可知最后的全连接层、softmax 层和分类输出层是与 ImageNet 任务相关联的配置,因此我们需要去除这三个层级并重新构建与当前任务相关联的层级。MATLAB 可以十分简洁地实现这一过程:
layersTransfer = net.Layers(1:end-3);numClasses = numel(categories(trainingImages.Labels))layers = [ layersTransfer fullyConnectedLayer(numClasses,'WeightLearnRateFactor',20,'BiasLearnRateFactor',20) softmaxLayer classificationLayer];
由上面的代码可知我们只提取了 AlexNet 预训练模型的前 22 层,而后依次新建了全连接层、softmax 层和分类输出层。完成整个层级重构后,剩下的就只需使用以下代码训练新的模型。其中 trainingImages 为当前任务的训练样本、layers 为前面修正的层级,而 options 是我们设置的一组训练参数,包括优化算法、最小批量大小、初始化学习率、绘制训练过程和验证集配置等设定。
netTransfer = trainNetwork(trainingImages,layers,options);
由上,我们发现 MATLAB 的深度学习代码非常简洁,调用高级 API 能快速完成模型的搭建。陈建平说:「MATLAB 上的高级 API 是一个完整的体系,它们完全是针对深度学习而设计的。当然我们还是会用基础的运算,因为 MATLAB 这么多年的累积可以充分体现在基础运算上,但是深度学习这一套高级 API 确实是新设计的。」
其实不只是 AlexNet,很多 Caffe 模型都能够导入到 MATLAB。那么,MATLAB 为什么会选择 Caffe 作为对接的深度学习框架,而不是近来十分流行的 TensorFlow?
陈建平解释说:「MATLAB 选择 Caffe 其实是有很多历史原因的,因为 Caffe 在 CNN 上做得非常好,传统上它在图像方面就是一个非常优秀的框架,从这个角度我们优先选择了 Caffe 作为支持的深度学习框架。当然,MATLAB 在很快也会有针对 TensorFlow 的导入功能。」
训练与推断
对于模型训练来说,最重要的可能就是能支持大规模分布式训练。因为目前的深度模型都有非常多的参数和层级,每一次正向或反向传播都拥有海量的矩阵运算,所以这就要求 MATLAB 能高效地执行并行运算。当然,我们知道 MATLAB 在并行运算上有十分雄厚的累积,那么在硬件支持上,目前其支持 CPU 和 GPU 之间的自动选择、单块 GPU、本地或计算机集群上的多块 GPU。此外,由于近来采用大批量 SGD 进行分布式训练的方法取得了十分优秀的结果,我们可以使用 MATLAB 调用整个计算机集群上的 GPU,并使用层级对应的适应率缩放(Layer-wise Adaptive Rate Scaling/LARS)那样的技术快速完成整个模型的训练。
在模型训练中,另外一个比较重要的部分就是可视化,我们需要可视化整个训练过程中的模型准确度、训练损失、验证损失、收敛情况等信息。当然 MATLAB 一直以来就十分重视可视化,在上例执行迁移学习时,我们也能得到整个训练过程的可视化信息。如下所示,上部分为训练准确度和验证准确度随迭代数的变化趋势,下部分为训练损失和验证损失随迭代数的变化趋势,该迁移学习基本上到第 3 个 epoch 就已经收敛。
陈建平说:「训练是十分重要的,尤其是对关注算法本身的研究者。但如果我们考虑模型部署,那么也许推断会变得更加重要。」
对于推断来说,新产品 GPU Coder 可自动将深度学习模型转换为 NVIDIA GPU 的 CUDA 代码。内部基准测试显示,GPU Coder 产生的 CUDA 代码,比 TensorFlow 的性能提高 7 倍,比 Caffe2 的性能提高 4.5 倍。
陈建平说:「其实我们将 MATLAB 和其它框架做了一些基准对比,MATLAB 在测试中比 TensorFlow 快 2.5 倍,比 Caffe 快 40% 左右。而我们还有一种方法让模型的推断速度变得更快,也就是使用 GPU Coder 将模型转化为脱离 MATLAB 环境的 CUDA 代码。我们已经在一台 GPU 工作站上测试 GPU Coder 的效果,基本上它要比 TensorFlow 的性能高 7 倍,比 Caffe2 的性能高 4.5 倍。实际上在转换代码时我们剔除了很多额外的交互过程。其实 GPU Coder 对产品部署是十分有用的,因为 CUDA 代码对需要考虑很多限制的嵌入式系统十分重要,例如 CUDA 代码能高效地控制嵌入式系统的功耗。」
下图展示了内部基准测试的结果:
该测试使用 TitanXP GPU 和 Intel(R) Xeon(R) CPU E5-1650 v4 @ 3.60GHz 对 AlexNet 的推断性能进行了内部基准测试。使用的软件版本或框架是 MATLAB(R2017b)、TensorFlow(1.2.0) 和 Caffe2(0.8.1)。每个软件或框架都是使用 GPU 加速版来进行基准测试,所有测试均在 Windows 10 上运行。
在 MATLAB 部署模型其实也很简单,MATLAB 很早就支持生成独立于其开发环境的其它语言,比如利用 MATLAB Coder 可以将 MATLAB 代码转换为 C 或 C++代码。而该最新版提供了新的工具 GPU Coder,我们能利用它将生成的 CUDA 代码部署到 GPU 中并进行实时处理,这一点对于应用场景是极其重要的。
GPU 代码生成其实在 MATLAB 中也十分简单,陈建平不仅利用车道线识别模型向我们演示了如何使用 GPU Coder 生成高效的 CUDA 代码,同时还展示了在脱离 MATLAB 环境下运行 CUDA 代码进行推断的效果。
陈建平说:「本质上车道线识别模型是通过迁移学习完成的,只不过在模型训练完成后,我们既不会直接在 CPU 上运行模型并执行推断,也不会单纯地通过 MATLAB 环境编译推断过程。因此我们可以通过 GPU Coder 和几行语句基于已训练的模型来产生 CUDA 代码。我们需要告诉 GPU Coder 各种信息,例如我们需要产生的外接包装是 C++、目标是产生一个 CUDA 库文件等。因为 C++ 需要定义严格的数据类型,所以在我们输入参数的信息后,Coder 会递归地推导输入所涉及的所有数据类型。最后 GPU Coder 会根据这些信息产生 CUDA 代码。」
左图为GPU Coder app,右图展示了生成的CUDA代码
如果 GPU Coder 能将模型转化为 CUDA 代码,那么它到底是如何将一个串行设计的模型转换为并行的 CUDA 代码?
陈建平解释说:「推断过程本质上是一个并行过程,而推断的每一步我们可以认为是一个独立循环体。而现在我们有办法将这种独立循环体展开成大量的 CUDA 并发线程,这一过程都是自动完成的。其实 MATLAB 有工具能判断 For 循环是不是独立的,如果是的话它就会将这些 For 循环自动并行化。所以 CUDA 其实就是一种超多线程的并发模型,而只有这种并行化才能充分利用 GPU 的计算资源以加快推断速度。」
最后,MATLAB 会自动完成代码的并行化,并转化为高效的 CUDA 代码,因此我们能脱离 MATLAB 环境来执行整个推断过程。
从数据源、模型构建、训练与推断到最终产品的部署,R2017B 补齐了整个开发链条。MathWorks 的 MATLAB 市场营销总监 David Rich 表示,「借助 R2017b,工程和系统集成团队可以将 MATLAB 拓展用于深度学习,以更好地保持对整个设计过程的控制,并更快地实现更高质量的设计。他们可以使用预训练网络,协作开发代码和模型,然后部署到 GPU 和嵌入式设备。使用 MATLAB 可以改进结果质量,同时通过自动化地真值标注 App 来缩短模型开发时间。」
转载请注明出处乐投网。
1.乐投网遵循行业规范,转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源;
从Pipenv到PyTorch,盘点2017年最受欢迎的十
拿下吴文俊奖,今日头条李磊谈AI如何实现内容
我们能否复制DeepMind的成功?
SWATS:自动由Adam切换为SGD而实现更好的泛化
2018年人工智能和机器学习路在何方? 听听美国
佛蒙特大学给机器人口述形态学,使其理解人类
上海纽约大学青年学者论坛:五大单元探究AI前
基于Apache MXNet,亚马逊NMT开源框架Sockeye

我要回帖

 

随机推荐