《電子技術應用》
您所在的位置:首頁 > 可編程邏輯 > 業界動態 > 開源一年多的模型交換格式ONNX,已經一統框架江湖了?

開源一年多的模型交換格式ONNX,已經一統框架江湖了?

2018-11-30
關鍵詞: ONNX 華為 Frameworks

近日,微軟亞洲研究院和華為舉辦了 ONNX 合作伙伴研討會,這是 ONNX 開源社區成立以來首次在中國舉辦的活動。在研討會中,微軟、Facebook、華為和英特爾等的開發者介紹了他們在 ONNX 上的開源貢獻及思考。


在過去的一年多中,ONNX 這種「通用」的神經網絡交換格式已經有了很長遠的發展,用不同框架編寫的模型可以在不同的平臺中流通。在這次研討會中,我們確切地感受到了這一點,因為開源社區圍繞著 ONNX 介紹了很多優化工具和資源庫。


微軟上個月開源了 ONNX Runtime,其專為 ONNX 格式的模型設計了高性能推理引擎。Facebook 早兩個月前開源了 ONNXIFI,其為 ONNX 提供了用于框架集成的接口,即一組用于加載和執行 ONNX 計算圖的跨平臺 API。更早一些,英特爾在今年 3 月份就開源 nGraph,它能編譯 ONNX 格式的模型,并在 CPU 或 GPU 等硬件加速模型的運行。


而到了昨天,微軟又開源了 ONNX.JS,它是一種在瀏覽器和 Node.js 上運行 ONNX 模型的 JavaScript 庫。它部署的模型效率非常高,且能實現交互式的直觀推理。該開源項目給出了圖像分類的交互式演示,且在 Chrome 瀏覽器和 CPU 下比 TensorFlow.JS 快了近 8 倍,后文將詳細介紹這一開源庫。


當然除了這些開源工作,ONNX 社區還有更多的實踐,例如如何部署 ONNX 模型到邊緣設備、如何維護一個包羅萬象的 ONNX Model Zoo 等。本文主要從什么是 ONNX、怎樣用 ONNX,以及如何優化 ONNX 三方面看看 ONNX 是不是已經引領「框架間的江湖」了。


什么是 ONNX


很多開發者在玩 GitHub 的時候都有這樣「悲痛」的經歷,好不容易找到令人眼前一亮的項目,然而發現它使用我們不熟悉的框架寫成。其實我們會發現很多優秀的視覺模型是用 Caffe 寫的,很多新的研究論文是用 PyTorch 寫的,而更多的模型用 TensorFlow 寫成。因此如果我們要測試它們就必須擁有對應的框架環境,但 ONNX 交換格式令我們在同一環境下測試不同模型有了依靠。


簡而言之 ONNX 就是一種框架間的轉換格式,例如我們用 TensorFlow 寫的模型可以轉換為 ONNX 格式,并在 Caffe2 環境下運行該模型。


機器之心SyncedONNX小程序


項目地址:https://github.com/onnx/onnx


ONNX 定義了一種可擴展的計算圖模型、一系列內置的運算單元(OP)和標準數據類型。每一個計算流圖都定義為由節點組成的列表,并構建有向無環圖。其中每一個節點都有一個或多個輸入與輸出,每一個節點稱之為一個 OP。這相當于一種通用的計算圖,不同深度學習框架構建的計算圖都能轉化為它。


如下所示,目前 ONNX 已經支持大多數框架,使用這些框架構建的模型可以轉換為通用的 ONNX 計算圖和 OP。現階段 ONNX 只支持推理,所以導入的模型都需要在原框架完成訓練。

微信圖片_20181130192336.jpg


其中 Frameworks 下的框架表示它們已經內嵌了 ONNX,開發者可以直接通過這些框架的內置 API 將模型導出為 ONNX 格式,或采用它們作為推理后端。而 Converters 下的框架并不直接支持 ONNX 格式,但是可以通過轉換工具導入或導出這些框架的模型。


其實并不是所有框架都支持導入和導出 ONNX 格式的模型,有一些并不支持導入 ONNX 格式的模型,例如 PyTorch 和 Chainer 等,TensorFlow 的 ONNX 導入同樣也正處于實驗階段。下圖展示了各框架對 ONNX 格式的支持情況:

微信圖片_20181130192410.jpg


怎樣使用 ONNX


對于內建了 ONNX 的框架而言,使用非常簡單,只需要調用 API 導出或導入已訓練模型就可以了。例如對 PyTorch 而言,只需要幾個簡單的步驟就能完成模型的導出和導入。簡單而言,首先加載 torch.onnx 模塊,然后導出預訓練模型并查看模型結構信息,最后再將導出的 ONNX 模型加載到另外的框架就能執行推理了。


from torch.autograd import Variable
import torch.onnx
import torchvision

dummy_input = Variable(torch.randn(10, 3, 224, 224)).cuda()
model = torchvision.models.alexnet(pretrained=True).cuda()

input_names = [ "actual_input_1" ] + [ "learned_%d" % i for i in range(16) ]
output_names = [ "output1" ]

torch.onnx.export(model, dummy_input, "alexnet.onnx", verbose=True, input_names=input_names, output_names=output_names)


如上所示將導出 ONNX 格式的 AlexNet 模型,其中"alexnet.onnx"為保存的模型,input_names、output_names 和 verbose=True 都是為了打印出模型結構信息。同樣隨機產生的「圖像」dummy_input 也是為了了解模型結構,因為我們可以通過它理解輸入與每一層具體的參數維度。以下展示了 ONNX 輸出的簡要模型信息:


graph(%actual_input_1 : Float(10, 3, 224, 224)
      %learned_0 : Float(64, 3, 11, 11)
      %learned_1 : Float(64)
      # ---- omitted for brevity ----
      %learned_14 : Float(1000, 4096)
      %learned_15 : Float(1000)) {
  %17 : Float(10, 64, 55, 55) = onnx::Conv[dilations=[1, 1], group=1, kernel_shape=[11, 11], pads=[2, 2, 2, 2], strides=[4, 4]](%actual_input_1, %learned_0, %learned_1), scope: AlexNet/Sequential[features]/Conv2d[0]
  %18 : Float(10, 64, 55, 55) = onnx::Relu(%17), scope: AlexNet/Sequential[features]/ReLU[1]
  %19 : Float(10, 64, 27, 27) = onnx::MaxPool[kernel_shape=[3, 3], pads=[0, 0, 0, 0], strides=[2, 2]](%18), scope: AlexNet/Sequential[features]/MaxPool2d[2]
  # ---- omitted for brevity ----
  %output1 : Float(10, 1000) = onnx::Gemm[alpha=1, beta=1, broadcast=1, transB=1](%45, %learned_14, %learned_15), scope: AlexNet/Sequential[classifier]/Linear[6]
  return (%output1);
}


其實我們也可以借助 ONNX 檢查中間表征,不過這里并不介紹。后面加載另外一個框架并執行推理同樣非常簡單。如下所示,我們可以從 caffe2 中加載 ONNX 的后端,并將前面保存的模型加載到該后端,從而在新框架下進行推理。這里我們能選擇執行推理的硬件,并直接推理得出輸出結果。


import caffe2.python.onnx.backend as backend
import numpy as np
import onnx

model = onnx.load("alexnet.onnx")
rep = backend.prepare(model, device="CUDA:0") # or "CPU"
outputs = rep.run(np.random.randn(10, 3, 224, 224).astype(np.float32))


其實也就兩三行代碼涉及 ONNX 的核心操作,即導出模型、加載模型和加載另一個框架的后端。TensorFlow 或 CNTK 等其它框架的具體 API 可能不一樣,但主要過程也就這簡單的幾步。


怎樣優化 ONNX


前面就已經介紹了 Model Zoo、ONNX Runtime 和 ONNX.JS,現在,我們可以具體看看它們都是什么,它們怎樣才能幫助我們優化 ONNX 模型的選擇與推理速度。


Model Zoo


ONNX Model Zoo 包含了一系列預訓練模型,它們都是 ONNX 格式,且能獲得當前最優的性能。因此只要下載這樣的模型,我們本地不論是 TensorFlow 還是 MXNet,只要是只是能加載模型的框架,就能運行這些預訓練模型。


項目地址:https://github.com/onnx/models


更重要的是,這個 Model Zoo 不僅有調用預訓練模型的代碼,它還為每個預訓練模型開放了對應的訓練代碼。訓練和推理代碼都是用 Jupyter Notebook 寫的,數據和模型等都有對應的鏈接。


目前該 Model Zoo 主要從圖像分類、檢測與分割、圖像超分辨、機器翻譯和語音識別等 14 個方向包含 19 種模型,還有更多的模型還在開發中。如下展示了圖像分類中已經完成的模型,它們都是通用的 ONNX 格式。

微信圖片_20181130192456.jpg


此外在這次的研討會中,Model Zoo 的維護者還和大家討論了目前面臨的問題及解決方法,例如目前的預訓練模型主要集中在計算機視覺方面、ONNX 缺少一些特定的 OP、權重計算圖下載慢等。因此 Model Zoo 接下來也會更關注其它語音和語言等模型,優化整個 GitHub 項目的下載結構。


ONNX Runtime


微軟開源的 ONNX Runtime 推理引擎支持 ONNX 中定義的所有運算單元,它非常關注靈活性和推理性能。因此不論我們的開發環境是什么,Runtime 都會基于各種平臺與硬件選擇不同的自定義加速器,并希望以最小的計算延遲和資源占用完成推理。


文檔地址:https://docs.microsoft.com/en-us/python/api/overview/azure/onnx/intro


ONNX Runtime 可以自動調用各種硬件加速器,例如英偉達的 CUDA、TensorRT 和英特爾的 MKL-DNN、nGraph。如下所示,ONNX 格式的模型可以傳入到藍色部分的 Runtime,并自動完成計算圖分割及并行化處理,最后我們只需要如橙色所示的輸入數據和輸出結果就行了。

微信圖片_20181130192533.jpg


其實在實際使用的時候,開發者根本不需要考慮藍色的部分,不論是編譯還是推理,代碼都賊簡單。如下所示,導入 onnxruntime 模塊后,調用 InferenceSession() 方法就能導入 ONNX 格式的模型,并完成上圖一系列復雜的優化。最后只需要 session.run() 就可以進行推理了,所有的優化過程都隱藏了細節。


import onnxruntime

session = onnxruntime.InferenceSession("your_model.onnx") 
prediction = session.run(None, {"input1": value})


在研討會中,開發者表示 Runtime 的目標是構建高性能推理引擎,它需要利用最好的加速器和完整的平臺支持。只需要幾行代碼就能把計算圖優化一遍,這對 ONNX 格式的模型是個大福利。


ONNX.JS


ONNX.js 是一個在瀏覽器上運行 ONNX 模型的庫,它采用了 WebAssembly 和 WebGL 技術,并在 CPU 或 GPU 上推理 ONNX 格式的預訓練模型。


項目地址:https://github.com/Microsoft/onnxjs

Demo 展示地址:https://microsoft.github.io/onnxjs-demo


通過 ONNX.js,開發者可以直接將預訓練的 ONNX 模型部署到瀏覽器,這些預訓練模型可以是 Model Zoo 中的,也可以是自行轉換的。部署到瀏覽器有很大的優勢,它能減少服務器與客戶端之間的信息交流,并獲得免安裝和跨平臺的機器學習模型體驗。如下所示為部署到網頁端的 SqueezeNet:

微信圖片_20181130192613.jpg


如上若是選擇 GPU,它會采用 WebGL 訪問 GPU。如果選擇 CPU,那么其不僅會采用 WebAssembly 以接近原生的速度執行模型,同時也會采用 Web Workers 提供的「多線程」環境來并行化數據處理。該項目表明,通過充分利用 WebAssembly 和 Web Workers,CPU 可以獲得很大的性能提升。這一點在項目提供的 Benchmarks 中也有相應的展示:

微信圖片_20181130192635.jpg


以上微軟在 Chrome 和 Edge 瀏覽器中測試了 ResNet-50 的推理速度,其中比較顯著的是 CPU 的推理速度。這主要是因為 Keras.js 和 TensorFlow.js 在任何瀏覽器中都不支持 WebAssembly。


最后,從 ONNXIFI 到 ONNX.js,開源社區已經為 ONNX 格式構建出眾多的優化庫、轉換器和資源。很多需要支持多框架的場景也都將其作為默認的神經網絡格式,也許以后,ONNX 真的能統一神經網絡之間的江湖。


本站內容除特別聲明的原創文章之外,轉載內容只為傳遞更多信息,并不代表本網站贊同其觀點。轉載的所有的文章、圖片、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創文章及圖片等內容無法一一聯系確認版權者。如涉及作品內容、版權和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經濟損失。聯系電話:010-82306118;郵箱:aet@chinaaet.com。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          久久九九国产精品怡红院| 欧美淫片网站| 狠狠综合久久av一区二区小说| 亚洲一区二区三区在线观看视频| 韩国自拍一区| 欧美国产高清| 香蕉乱码成人久久天堂爱免费| 久久久久久久久蜜桃| 性色av一区二区三区红粉影视| 亚洲裸体在线观看| 亚洲区免费影片| 国产亚洲欧美色| 国产精品激情电影| 亚洲激情欧美| 在线免费观看视频一区| 国产偷国产偷亚洲高清97cao| 亚洲黄色三级| 国产日韩欧美自拍| 久久丁香综合五月国产三级网站| 日韩亚洲欧美高清| 亚洲手机成人高清视频| 亚洲高清不卡| 韩日成人av| 欧美日韩国产色综合一二三四| 美女日韩欧美| 亚洲区在线播放| 一区二区免费在线观看| 久久蜜桃资源一区二区老牛| 蜜桃av一区二区在线观看| 一本久道久久综合中文字幕| 欧美一级网站| 欧美经典一区二区三区| 国产精品无人区| 国产精品美女久久久久av超清| 久久综合五月天婷婷伊人| 久久躁日日躁aaaaxxxx| 国产精品视区| 久久成人在线| 亚洲国产日本| 一区二区三区欧美成人| 亚洲精品麻豆| 先锋a资源在线看亚洲| 欧美一激情一区二区三区| 亚洲丶国产丶欧美一区二区三区| 黄色一区二区在线观看| 欧美亚洲一区三区| 久久综合亚洲社区| 国产精品美女久久久免费| 国产精品一区二区久久久| 精品动漫3d一区二区三区免费| 亚洲一区二区三区乱码aⅴ蜜桃女| 欧美日韩免费| 欧美日韩在线精品一区二区三区| 亚洲国产精品v| 红桃视频成人| 在线午夜精品自拍| 日韩亚洲欧美一区| 国产免费成人| 在线播放视频一区| 亚洲免费在线播放| 国产精品乱子久久久久| 亚洲国产精品久久久久秋霞影院| 欧美日韩情趣电影| 欧美一级免费视频| 91久久久亚洲精品| 在线看日韩欧美| 免费成人av在线看| 日韩亚洲国产精品| 亚洲视频在线一区观看| 国产精品稀缺呦系列在线| 一区二区三区在线观看国产| 香蕉久久夜色精品| 国产麻豆日韩| 国产精品一区二区在线观看网站| 欧美日韩ab片| 国产精品一区毛片| 国产模特精品视频久久久久| 欧美国产亚洲精品久久久8v| 国产日韩一区二区| 欧美成人一区二区三区片免费| 亚洲二区在线| 国模套图日韩精品一区二区| 欧美国产高潮xxxx1819| 亚洲欧美成人一区二区在线电影| 美女国产一区| 亚洲福利免费| 亚洲国产精品嫩草影院| 亚洲美女尤物影院| 欧美在线免费观看视频| 欧美电影免费观看大全| 欧美影院久久久| 国产日韩亚洲欧美| 免费不卡在线视频| 久久精品视频va| 亚洲香蕉成视频在线观看| 欧美区二区三区| 国产精品入口日韩视频大尺度| 亚洲精品欧美日韩专区| 亚洲国产天堂久久综合| 欧美精品尤物在线| 鲁大师影院一区二区三区| 久久手机免费观看| 亚洲一区www| 国产精品福利久久久| 欧美一乱一性一交一视频| 久久人人97超碰人人澡爱香蕉| 亚洲精品国精品久久99热| 欧美激情片在线观看| 欧美视频日韩视频在线观看| 欧美aa国产视频| 在线免费观看成人网| 亚洲在线免费视频| 久久国产精品一区二区三区四区| 欧美亚洲一级片| 91久久中文字幕| 国产麻豆午夜三级精品| 欧美专区在线| 国内精品久久久久影院 日本资源| 国产亚洲精品一区二区| 欧美精品在线一区| 一区二区三区国产在线观看| 欧美日韩一区自拍| 一本久道久久综合中文字幕| 国产精品天天看| 欧美日韩国产美女| 国产精品高清免费在线观看| 欧美日韩国产综合视频在线观看中文| 国产精品草莓在线免费观看| 一区二区高清视频| 日韩亚洲国产欧美| 国产婷婷一区二区| 亚洲精选久久| 国产一区二区在线观看免费播放| 夜夜嗨av一区二区三区四季av| 欧美小视频在线| 久久精品亚洲乱码伦伦中文| 久久久久久有精品国产| 亚洲人成网站在线播| 欧美亚洲视频在线看网址| 国产日产欧产精品推荐色| 国产精品海角社区在线观看| 欧美1区2区| 国产精品二区影院| 精品不卡一区| 亚洲午夜精品久久久久久浪潮| 国产欧美日韩一区| 欧美日韩国产页| 国产精品日韩专区| 99re6热在线精品视频播放速度| 在线免费不卡视频| 国语自产精品视频在线看8查询8| 国产精品久久久久秋霞鲁丝| 国产精品国产三级国产aⅴ浪潮| 欧美成人69| 欧美一级黄色网| 亚洲免费小视频| 亚洲午夜在线观看| 久久九九国产精品怡红院| 亚洲国产精品成人一区二区| 亚洲国产精品va在看黑人| 性做久久久久久久久| 欧美激情在线有限公司| 一本久道久久综合狠狠爱| 欧美在线资源| 国产区在线观看成人精品| 亚洲午夜一区二区| 国产精品三级久久久久久电影| 亚洲一级网站| 久久综合伊人| 一区二区三区在线免费观看| 亚洲欧美日韩成人高清在线一区| 亚洲国产小视频在线观看| 久久精品一二三区| 在线成人激情| 蜜臀va亚洲va欧美va天堂| 国产乱肥老妇国产一区二| 欧美性淫爽ww久久久久无| 在线观看中文字幕不卡| 欧美性一区二区| 午夜精品久久久久| 伊人成人开心激情综合网| 久久久亚洲影院你懂的| 午夜日韩在线| 亚洲男同1069视频| 欧美视频国产精品| 国产精品二区在线观看| 久久国产精品99国产精| 亚洲精品日韩欧美| 亚洲免费福利视频| 欧美日韩国产成人在线| 欧美专区在线观看| 国产精品一区二区黑丝| 亚洲一区二区视频在线观看| 在线综合+亚洲+欧美中文字幕| 欧美精品1区| 欧美午夜不卡影院在线观看完整版免费| 亚洲国产成人在线播放| 欧美三级资源在线| 欧美一级电影久久| 欧美午夜久久久| 久久全球大尺度高清视频| 亚洲欧美国产日韩中文字幕| 久久久高清一区二区三区| 韩国女主播一区二区三区| 国产精品久久久久久久午夜| 狼狼综合久久久久综合网| 女女同性女同一区二区三区91| 国产精品任我爽爆在线播放| 亚洲国产专区校园欧美| 亚洲欧美韩国| 99国产一区二区三精品乱码| 老色鬼精品视频在线观看播放| 久久久久久久999精品视频| 激情懂色av一区av二区av| 国产精品国产三级国产| 国产精品国产三级国产aⅴ浪潮| 欧美韩日一区二区| 欧美日韩一区免费| 亚洲大黄网站| 欧美一区二区日韩| 欧美一级精品大片| 久久精品在线播放| 在线一区二区三区四区| 欧美亚洲在线| 欧美日韩国产二区| 欧美日韩精品高清| 久久久久国产一区二区三区| 午夜精品久久久久99热蜜桃导演| 有码中文亚洲精品| 久久视频在线视频| 欧美少妇一区| 久久精视频免费在线久久完整在线看| 国产精品久久一区二区三区| 久久精品亚洲| 先锋影音网一区二区| 欧美一乱一性一交一视频| 亚洲专区欧美专区| 国产精品一区二区久激情瑜伽| 欧美久久在线| 国产精品成人一区二区艾草| 欧美精品三级在线观看| av成人福利| 另类成人小视频在线| 在线看国产一区| 亚洲精品一区二区三区婷婷月| 欧美偷拍一区二区| 尤物99国产成人精品视频| 亚洲三级影院| 免费在线欧美黄色| 久久国产88| 亚洲欧美国产制服动漫| 亚洲二区三区四区| 国产精品九色蝌蚪自拍| 欧美成人免费va影院高清| 黄网站色欧美视频| 久久精品国产免费看久久精品| 久久色中文字幕| 91久久国产综合久久91精品网站| 欧美日韩一二三四五区| 久久国产福利国产秒拍| 欧美成年视频| 国产日韩在线看片| 国产亚洲欧美另类中文| 欧美日韩在线不卡一区| 欧美在线看片| 欧美午夜精品| 狠狠综合久久| 欧美一区二区三区免费在线看| 欧美三级乱人伦电影| 久久亚洲私人国产精品va媚药| 午夜精品一区二区三区在线视| 日韩一区二区精品| 欧美国产日韩亚洲一区| 亚洲国产精品激情在线观看| 欧美日韩岛国| 欧美三区免费完整视频在线观看| 国产欧美日韩综合精品二区| 欧美成人免费观看| 国内偷自视频区视频综合| 欧美成年人视频| 麻豆成人在线| 国产精品99免费看| 欧美国产日韩一区| 国内精品久久久久影院薰衣草| 国产精品一区久久久| 亚洲天堂av电影| 亚洲国产精品一区在线观看不卡| 羞羞答答国产精品www一本| 国产一区二区三区丝袜| 日韩视频在线播放| 另类专区欧美制服同性| 狠狠色综合网站久久久久久久| 欧美午夜片在线免费观看| 在线成人激情视频| 亚洲高清123| 欧美电影电视剧在线观看| 亚洲主播在线观看| 欧美高清不卡| 欧美黄色一区| 销魂美女一区二区三区视频在线| 久久精品99国产精品酒店日本| 国产精品久久999| 欧美激情视频在线播放| 一区二区三区在线高清| 欧美日韩国产一级片| 国产片一区二区| 免费亚洲电影在线| 久久久青草青青国产亚洲免观| 亚洲伦理在线观看| 欧美精品啪啪| 亚洲区国产区| 欧美在线日韩在线| 久久久人成影片一区二区三区观看| 狠狠色伊人亚洲综合网站色| 午夜影视日本亚洲欧洲精品| 亚洲国产日韩一区| 激情文学综合丁香| 欧美69视频| 日韩视频不卡中文| 亚洲成人原创| 欧美一区二区三区免费视频| 久久国产精品久久久久久| 亚洲视频一区二区免费在线观看| 激情小说另类小说亚洲欧美| 亚洲精品偷拍| av不卡在线看| 欧美在线播放视频| 国产伦精品一区二区三区照片91|