国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

MATLAB更新R2017b:轉換CUDA代碼極大提升推斷速度

Corwien / 2102人閱讀

摘要:陳建平說訓練是十分重要的,尤其是對關注算法本身的研究者。代碼生成其實在中也十分簡單,陳建平不僅利用車道線識別模型向我們演示了如何使用生成高效的代碼,同時還展示了在脫離環境下運行代碼進行推斷的效果。

近日,Mathworks 推出了包含 MATLAB 和 Simulink 產品系列的 Release 2017b(R2017b),該版本大大加強了 MATLAB 對深度學習的支持,并簡化了工程師、研究人員及其他領域專家設計、訓練和部署模型的方式。該更新版本從數據標注、模型搭建、訓練與推斷還有最后的模型部署方面完整地支持深度學習開發流程。此外,MATLAB 這次更新較大的亮點是新組件 GPU Coder,它能自動將深度學習模型代碼轉換為 NVIDIA GPU 的 CUDA 代碼,GPU Coder 轉換后的 CUDA 代碼可以脫離 MATLAB 環境直接高效地執行推斷。經 MATLAB 內部基準測試顯示,GPU Coder 產生的 CUDA 代碼,比 TensorFlow 的性能高 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?

=

?alexnet

;

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 來縮短模型開發時間。」

歡迎加入本站公開興趣群

商業智能與數據分析群

興趣范圍包括各種讓數據產生價值的辦法,實際應用案例分享與討論,分析工具,ETL工具,數據倉庫,數據挖掘工具,報表系統等全方位知識

QQ群:81035754

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/4646.html

相關文章

  • 加強深度學習能力以簡化設計、訓練和部署模型

    摘要:此發行版還添加了新的重要的深度學習功能,可簡化工程師研究人員及其他領域專家設計訓練和部署模型的方式。內部基準測試顯示,在部署階段為深度學習模型產生的代碼,比的性能提高倍,比的性能提高倍。 MATLAB Release 2017b (R2017b) 今日正式推出,其中包括 MATLAB 和 Simulink 的若干新功能、六款新產品以及對其他 86 款產品的更新和修復補丁。此發行版還添加了新的...

    pf_miles 評論0 收藏0
  • 現代羅塞塔石碑:微軟提出深度學習框架的通用語言

    摘要:完整版地址我們的想法是創建一個深度學習框架的羅塞塔石碑假設你很了解某個深度學習框架,你就可以幫助別人使用任何框架。我們的目標是創建深度學習框架的羅塞塔石碑,使數據科學家能夠在不同框架之間輕松運用專業知識。 repo 1.0 完整版 GitHub 地址:https://github.com/ilkarman/DeepLearningFrameworks我們的想法是創建一個深度學習框架的羅塞塔石...

    ckllj 評論0 收藏0
  • YOLO v3有了PaddlePaddle實現 | 代碼+預訓練模型

    摘要:值得一提的是,基于百度自研的開源深度學習平臺的實現,參考了論文,增加了,等處理,精度相比于原作者的實現提高了個絕對百分點,在此基礎上加入最終精度相比原作者提高個絕對百分點。 YOLO作為目標檢測領域的創新技術,一經推出就受到開發者的廣泛關注。值得一提的是,基于百度自研的開源深度學習平臺PaddlePaddle的YOLO v3實現,參考了論文【Bag of Tricks for Imag...

    xavier 評論0 收藏0
  • 初學者怎么選擇神經網絡環境?對比MATLAB、Torch和TensorFlow

    摘要:本報告面向的讀者是想要進入機器學習領域的學生和正在尋找新框架的專家。其輸入需要重塑為包含個元素的一維向量以滿足神經網絡。卷積神經網絡目前代表著用于圖像分類任務的較先進算法,并構成了深度學習中的主要架構。 初學者在學習神經網絡的時候往往會有不知道從何處入手的困難,甚至可能不知道選擇什么工具入手才合適。近日,來自意大利的四位研究者發布了一篇題為《神經網絡初學者:在 MATLAB、Torch 和 ...

    yunhao 評論0 收藏0

發表評論

0條評論

Corwien

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<