AI模型部署落地綜述(ONNX/NCNN/TensorRT)


導(dǎo)讀

費盡心血訓(xùn)練好的深度學(xué)習(xí)模型如何給別人展示毛雇?只在服務(wù)器上運行demo怎么吸引別人的目光?怎么才能讓自己的成果落地汹胃?這篇文章帶你進入模型部署的大門砰逻。

0 前言

模型部署的步驟:

  1. 訓(xùn)練一個深度學(xué)習(xí)模型;
  2. 使用不同的推理框架對模型進行推理轉(zhuǎn)換昼牛;
  3. 在應(yīng)用平臺運行轉(zhuǎn)換好的模型术瓮。

步驟看起來比較簡單,但是牽扯的到的知識還是比較多贰健。在實際應(yīng)用過程中胞四,我們使用的模型通常不會太簡單,因為要確保模型的精度伶椿。但是辜伟,實際應(yīng)用場景往往需要模型速度與精度能達(dá)到一個較好的平衡。因此這就需要在算法(剪枝脊另,壓縮等)與底層(手寫加速算作)去優(yōu)化模型导狡。但是,我們現(xiàn)在可以站在巨人的肩膀上去眺望世界偎痛,因此旱捧,該文章會給大家介紹一些常用的開源推理框架,大家一起參考學(xué)習(xí)踩麦。畢竟大牛團隊做出來的好用一些枚赡。

1 ONNX、NCNN谓谦、OpenVINO贫橙、 TensorRT、Mediapipe模型部署那家強反粥?

1.1 ONNX

簡介:

開放神經(jīng)網(wǎng)絡(luò)交換ONNX(Open Neural Network Exchange)是一套表示深度神經(jīng)網(wǎng)絡(luò)模型的開放格式卢肃,由微軟和Facebook于2017推出疲迂,然后迅速得到了各大廠商和框架的支持。通過短短幾年的發(fā)展莫湘,已經(jīng)成為表示深度學(xué)習(xí)模型的實際標(biāo)準(zhǔn)尤蒿,并且通過ONNX-ML,可以支持傳統(tǒng)非神經(jīng)網(wǎng)絡(luò)機器學(xué)習(xí)模型逊脯,大有一統(tǒng)整個AI模型交換標(biāo)準(zhǔn)优质。ONNX定義了一組與環(huán)境和平臺無關(guān)的標(biāo)準(zhǔn)格式,為AI模型的互操作性提供了基礎(chǔ)军洼,使AI模型可以在不同框架和環(huán)境下交互使用巩螃。硬件和軟件廠商可以基于ONNX標(biāo)準(zhǔn)優(yōu)化模型性能,讓所有兼容ONNX標(biāo)準(zhǔn)的框架受益匕争,簡單來說避乏,ONNX就是模型轉(zhuǎn)換的中間人。

使用場景:
圖片

無論你使用什么樣的訓(xùn)練框架來訓(xùn)練模型(比如TensorFlow/Pytorch/OneFlow/Paddle)甘桑,你都可以在訓(xùn)練后將這些框架的模型統(tǒng)一轉(zhuǎn)為ONNX存儲拍皮。ONNX文件不僅存儲了神經(jīng)網(wǎng)絡(luò)模型的權(quán)重,還存儲了模型的結(jié)構(gòu)信息跑杭、網(wǎng)絡(luò)中各層的輸入輸出等一些信息铆帽。目前,ONNX主要關(guān)注在模型預(yù)測方面(inferring)德谅,將轉(zhuǎn)換后的ONNX模型爹橱,轉(zhuǎn)換成我們需要使用不同框架部署的類型,可以很容易的部署在兼容ONNX的運行環(huán)境中窄做。

使用方法:

[代碼示例]在 ONNX 模型上運行形狀推理:https://github.com/onnx/onnx

import onnx  
from onnx import helper, shape\_inference  
from onnx import TensorProto  
  
   \# 預(yù)處理:創(chuàng)建一個包含兩個節(jié)點的模型愧驱,Y是未知的  
node1 = helper.make\_node\("Transpose", \["X"\], \["Y"\], perm=\[1, 0, 2\]\)  
node2 = helper.make\_node\("Trans  
                           
                           
                           
                         pose", \["Y"\], \["Z"\], perm=\[1, 0, 2\]\)  
  
graph = helper.make\_graph\(  
    \[node1, node2\],  
    "two-transposes",  
    \[helper.make\_tensor\_value\_info\("X", TensorProto.FLOAT, \(2, 3, 4\)\)\],  
    \[helper.make\_tensor\_value\_info\("Z", TensorProto.FLOAT, \(2, 3, 4\)\)\],  
\)  
  
original\_model = helper.make\_model\(graph, producer\_name="onnx-examples"\)  
   \# 檢查模型并打印Y的信息  
onnx.checker.check\_model\(original\_model\)  
print\(f"Before shape inference, the shape info of Y is:\\n\{original\_model.graph.value\_info\}"\)  
   \# 在模型上進行推理  
inferred\_model = shape\_inference.infer\_shapes\(original\_model\)  
   \# 檢查模型并打印Y的信息  
onnx.checker.check\_model\(inferred\_model\)  
print\(f"After shape inference, the shape info of Y is:\\n\{inferred\_model.graph.value\_info\}"\) 

1.2 NCNN

簡介:

ncnn 是一個為手機端極致優(yōu)化的高性能神經(jīng)網(wǎng)絡(luò)前向計算框架,也是騰訊優(yōu)圖實驗室成立以來的第一個開源項目椭盏。ncnn 從設(shè)計之初深刻考慮手機端的部署和使用组砚,無第三方依賴,跨平臺掏颊,手機端 CPU 的速度快于目前所有已知的開源框架糟红。基于 ncnn乌叶,開發(fā)者能夠?qū)⑸疃葘W(xué)習(xí)算法輕松移植到手機端高效執(zhí)行改化,開發(fā)出人工智能 App。ncnn 目前已在騰訊多款應(yīng)用中使用枉昏,如 QQ、Qzone揍鸟、微信兄裂、天天P圖等句旱。

使用場景:
圖片

從NCNN的發(fā)展矩陣可以看出,NCNN覆蓋了幾乎所有常用的系統(tǒng)平臺晰奖,尤其是在移動平臺上的適用性更好谈撒,在Linux、Windows和Android匾南、以及iOS啃匿、macOS平臺上都可以使用GPU來部署模型。

框架特點:
  • 支持卷積神經(jīng)網(wǎng)絡(luò)蛆楞,支持多輸入和多分支結(jié)構(gòu)溯乒,可計算部分分支
  • 無任何第三方庫依賴,不依賴 BLAS/NNPACK 等計算框架
  • 純 C++ 實現(xiàn)豹爹,跨平臺裆悄,支持 Android / iOS 等
  • ARM Neon 匯編級良心優(yōu)化,計算速度極快
  • 精細(xì)的內(nèi)存管理和數(shù)據(jù)結(jié)構(gòu)設(shè)計臂聋,內(nèi)存占用極低
  • 支持多核并行計算加速光稼,ARM big.LITTLE CPU 調(diào)度優(yōu)化
  • 支持基于全新低消耗的 Vulkan API GPU 加速
  • 可擴展的模型設(shè)計,支持 8bit 量化和半精度浮點存儲孩等,可導(dǎo)入 caffe/pytorch/mxnet/onnx/darknet/keras/tensorflow(mlir) 模型
  • 支持直接內(nèi)存零拷貝引用加載網(wǎng)絡(luò)模型
  • 可注冊自定義層實現(xiàn)并擴展
使用方法:

[代碼示例]輸入數(shù)據(jù)并推理輸出:[https://github.com/Tencent/ncnn](https://mp.weixin.qq.com/s//wiki">https://github.com/Tencent/ncnn/wiki

 \#include \<opencv2/core/core.hpp>   \#include \<opencv2/highgui/highgui.hpp>   \#include "net.h"  
  
int main\(\)  
\{  
 // opencv讀取輸入圖片  
    cv::Mat img = cv::imread\("image.ppm", CV\_LOAD\_IMAGE\_GRAYSCALE\);  
    int w = img.cols;  
    int h = img.rows;  
  
    // 減均值以及縮放操作艾君,最后輸入數(shù)據(jù)的值域為\[-1,1\]  
    ncnn::Mat in = ncnn::Mat::from\_pixels\_resize\(img.data, ncnn::Mat::PIXEL\_GRAY, w, h, 60, 60\);  
    float mean\[1\] = \{ 128.f \};  
    float norm\[1\] = \{ 1/128.f \};  
    in.substract\_mean\_normalize\(mean, norm\);  
   
 // 構(gòu)建NCNN的net,并加載轉(zhuǎn)換好的模型  
    ncnn::Net net;  
    net.load\_param\("model.param"\);  
    net.load\_model\("model.bin"\);  
  
 // 創(chuàng)建網(wǎng)絡(luò)提取器肄方,設(shè)置網(wǎng)絡(luò)輸入冰垄,線程數(shù),light模式等等  
    ncnn::Extractor ex = net.create\_extractor\(\);  
    ex.set\_light\_mode\(true\);  
    ex.set\_num\_threads\(4\);  
    ex.input\("data", in\);  
 // 調(diào)用extract接口扒秸,完成網(wǎng)絡(luò)推理播演,獲得輸出結(jié)果  
    ncnn::Mat feat;  
    ex.extract\("output", feat\);  
  
    return 0;  

1.3 OpenVINO

簡介:

OpenVINO是一種可以加快高性能計算機視覺和深度學(xué)習(xí)視覺應(yīng)用開發(fā)速度的工具套件,支持各種英特爾平臺的硬件加速器上進行深度學(xué)習(xí)伴奥,并且允許直接異構(gòu)執(zhí)行写烤。OpenVINO?工具包是用于快速開發(fā)應(yīng)用程序和解決方案的綜合工具包,可解決各種任務(wù)拾徙,包括模擬人類視覺洲炊,自動語音識別,自然語言處理尼啡,推薦系統(tǒng)等暂衡。該工具包基于最新一代的人工神經(jīng)網(wǎng)絡(luò),包括卷積神經(jīng)網(wǎng)絡(luò)(CNN)崖瞭,循環(huán)和基于注意力的網(wǎng)絡(luò)狂巢,可在英特爾?硬件上擴展計算機視覺和非視覺工作負(fù)載,從而最大限度地提高性能书聚。它通過從邊緣到云的高性能唧领,人工智能和深度學(xué)習(xí)推理來加速應(yīng)用程序藻雌。

使用場景:
圖片
框架特點:

OpenVINO在模型部署前,首先會對模型進行優(yōu)化斩个,模型優(yōu)化器會對模型的拓?fù)浣Y(jié)構(gòu)進行優(yōu)化胯杭,去掉不需要的層,對相同的運算進行融合受啥、合并以加快運算效率做个,減少內(nèi)存拷貝;FP16滚局、INT8量化也可以在保證精度損失很小的前提下減小模型體積居暖,提高模型的性能。在部署方面核畴,OpenVIVO的開發(fā)也是相對比較簡單的膝但,提供了C、C++和python3種語言編程接口谤草。它最大的優(yōu)勢呢跟束,其實還是在Intel的不同硬件平臺上進行部署的時候,移植會很方便丑孩。推理引擎對不同的硬件提供統(tǒng)一的接口冀宴,底層實現(xiàn)直接調(diào)用硬件指令集的加速庫,應(yīng)用程序開發(fā)人員不需要關(guān)心底層的硬件實現(xiàn)温学,即可在不同的硬件平臺上加速模型推理略贮。

  • 在邊緣啟用基于CNN的深度學(xué)習(xí)推理
  • 支持通過英特爾?Movidius?VPU在英特爾?CPU,英特爾?集成顯卡仗岖,英特爾?神經(jīng)計算棒2和英特爾?視覺加速器設(shè)計之間進行異構(gòu)執(zhí)行
  • 通過易于使用的計算機視覺功能庫和預(yù)先優(yōu)化的內(nèi)核加快上市時間
  • 包括對計算機視覺標(biāo)準(zhǔn)(包括OpenCV *和OpenCL?)的優(yōu)化調(diào)用
使用方法:

[代碼示例]在應(yīng)用程序中實現(xiàn)典型的 OpenVINO? 運行推理:https://docs.openvino.ai/latest/openvino_docs_OV_UG_Integrate_OV_with_your_application.html

 \#include \<openvino/openvino.hpp>  
// 1.創(chuàng)建 OpenVINO? 核心以管理可用設(shè)備和讀取模型對象  
ov::Core core;  
// 2.為特定設(shè)備編譯模型  
ov::CompiledModel compiled\_model = core.compile\_model\("model.onnx", "AUTO"\);  
// 3.創(chuàng)建推理請求  
ov::InferRequest infer\_request = compiled\_model.create\_infer\_request\(\);  
// 4.設(shè)置輸入  
// 獲取模型的輸入端口  
auto input\_port = compiled\_model.input\(\);  
// 從外部存儲器創(chuàng)建張量  
ov::Tensor input\_tensor\(input\_port.get\_element\_type\(\), input\_port.get\_shape\(\), memory\_ptr\);  
// 為模型設(shè)置一個輸入張量  
infer\_request.set\_input\_tensor\(input\_tensor\);  
// 5.開始推理  
infer\_request.start\_async\(\);  
infer\_request.wait\(\);  
// 6.處理推理結(jié)果  
// 通過tensor\_name獲取輸出張量  
auto output = infer\_request.get\_tensor\("tensor\_name"\);  
const float \\\*output\_buffer = output.data\<const float\>\(\);  
// output\_buffer\[\] - 訪問輸出張量數(shù)據(jù)  
// 7.釋放分配的對象(僅適用于C)  
ov\_shape\_free\(\&input\_shape\);  
ov\_tensor\_free\(output\_tensor\);  
ov\_output\_const\_port\_free\(input\_port\);  
ov\_tensor\_free\(tensor\);  
ov\_infer\_request\_free\(infer\_request\);  
ov\_compiled\_model\_free\(compiled\_model\);  
ov\_model\_free\(model\);  
ov\_core\_free\(core\);  
// 為項目創(chuàng)建結(jié)構(gòu)  
project/  
   ├── CMakeLists.txt  - CMake file to build  
   ├── ...             - Additional folders like includes/  
   └── src/            - source folder  
       └── main.cpp  
build/                  - build directory  
   ...  
// 創(chuàng)建 Cmake 腳本  
cmake\_minimum\_required\(VERSION 3.10\)  
set\(CMAKE\_CXX\_STANDARD 11\)  
  
find\_package\(OpenVINO REQUIRED\)  
  
add\_executable\(\$\{TARGET\_NAME\} src/main.cpp\)  
  
target\_link\_libraries\(\$\{TARGET\_NAME\} PRIVATE openvino::runtime\)  
// 構(gòu)建項目  
cd build/  
cmake ../project  
cmake --build . 

1.4 TensorRT

簡介:

NVIDIA TensorRT? 是用于高性能深度學(xué)習(xí)推理的 SDK逃延。此 SDK 包含深度學(xué)習(xí)推理優(yōu)化器和運行時環(huán)境,可為深度學(xué)習(xí)推理應(yīng)用提供低延遲和高吞吐量轧拄。

在推理過程中揽祥,基于 TensorRT 的應(yīng)用程序的執(zhí)行速度可比 CPU 平臺的速度快 40 倍。借助 TensorRT檩电,您可以優(yōu)化在所有主要框架中訓(xùn)練的神經(jīng)網(wǎng)絡(luò)模型拄丰,精確校正低精度,并最終將模型部署到超大規(guī)模數(shù)據(jù)中心料按、嵌入式或汽車產(chǎn)品平臺中载矿。

TensorRT 以 NVIDIA 的并行編程模型 CUDA 為基礎(chǔ)構(gòu)建而成恢准,可幫助您利用 CUDA-X 中的庫魂挂、開發(fā)工具和技術(shù),針對人工智能馁筐、自主機器坠非、高性能計算和圖形優(yōu)化所有深度學(xué)習(xí)框架中的推理炎码。

TensorRT 針對多種深度學(xué)習(xí)推理應(yīng)用的生產(chǎn)部署提供 INT8 和 FP16 優(yōu)化盟迟,例如視頻流式傳輸、語音識別歉闰、推薦和自然語言處理辖众。推理精度降低后可顯著減少應(yīng)用延遲,這恰巧滿足了許多實時服務(wù)和敬、自動和嵌入式應(yīng)用的要求变骡。

使用場景:
圖片
框架特點:

\1. 權(quán)重與激活精度校準(zhǔn)

通過將模型量化為 INT8 來更大限度地提高吞吐量,同時保持高準(zhǔn)確度

\2. 層與張量融合

通過融合內(nèi)核中的節(jié)點而克,優(yōu)化 GPU 顯存和帶寬的使用

\3. 內(nèi)核自動調(diào)整

基于目標(biāo) GPU 平臺選擇最佳數(shù)據(jù)層和算法

\4. 動態(tài)張量顯存

更大限度減少顯存占用日麸,并高效地為張量重復(fù)利用內(nèi)存

\5. 多流執(zhí)行

用于并行處理多個輸入流的可擴展設(shè)計

圖片

圖片取自TensorRT的官網(wǎng),里面列出了TensorRT使用的一些技術(shù)。可以看到模型量化摔刁、動態(tài)內(nèi)存優(yōu)化海蔽、層的融合等技術(shù)均已經(jīng)在TensorRT中集成了,這也是它能夠極大提高模型推斷速度的原因准潭。總體來說TensorRT將訓(xùn)練好的模型通過一系列的優(yōu)化技術(shù)轉(zhuǎn)化為了能夠在特定平臺(GPU)上以高性能運行的代碼域仇,也就是最后圖中生成的Inference Engine刑然。

使用方法:

1.導(dǎo)出模型

2.選擇批次大小

3.選擇精度

4.轉(zhuǎn)換模型:

  • 使用 TF-TRT
  • 從文件自動轉(zhuǎn)換 ONNX
  • 使用 TensorRT API 手動構(gòu)建網(wǎng)絡(luò)(C++或python)

5.部署模型:

  • 在 TensorFlow 中部署
  • 使用獨立的 TensorRT 運行時 API
  • 使用 NVIDIA Triton 推理服務(wù)器

具體模型轉(zhuǎn)換部署方法詳見:[Quick Start Guide :: NVIDIA Deep Learning TensorRT Documentation]:https://docs.nvidia.com/deeplearning/tensorrt/quick-start-guide/index.html

1.5 Mediapipe

簡介:

MediaPipe是一款由 Google Research 開發(fā)并開源的多媒體機器學(xué)習(xí)模型應(yīng)用框架。在谷歌暇务,一系列重要產(chǎn)品泼掠,如 YouTube、Google Lens垦细、ARCore择镇、Google Home 以及 Nest,都已深度整合了 MediaPipe括改。作為一款跨平臺框架腻豌,MediaPipe 不僅可以被部署在服務(wù)器端,更可以在多個移動端 (安卓和蘋果 iOS)和嵌入式平臺(Google Coral 和樹莓派)中作為設(shè)備端機器學(xué)習(xí)推理 (On-device Machine Learning Inference)框架嘱能。

除了上述的特性吝梅,MediaPipe 還支持 TensorFlow 和 TF Lite 的推理引擎(Inference Engine),任何 TensorFlow 和 TF Lite 的模型都可以在 MediaPipe 上使用惹骂。同時苏携,在移動端和嵌入式平臺,MediaPipe 也支持設(shè)備本身的 GPU 加速对粪。

使用場景:
圖片
框架特點:
  1. 端到端加速:內(nèi)置快速 ML 推理和處理右冻,即使在普通硬件上也能加速
  2. 一次構(gòu)建,隨處部署:統(tǒng)一解決方案適用于安卓著拭、iOS纱扭、桌面/云、Web 和物聯(lián)網(wǎng)
  3. 即用型解決方案:展示框架全部功能的尖端 ML 解決方案
  4. 免費和開源:Apache 2.0下的框架和解決方案茫死,完全可擴展和可定制
使用方法:

[代碼示例]以人臉檢測為例:https://google.github.io/mediapipe/solutions/face_detection

import cv2  
import mediapipe as mp  
mp\_face\_detection = mp.solutions.face\_detection  
mp\_drawing = mp.solutions.drawing\_utils  
   \# 對于靜態(tài)圖像:  
IMAGE\_FILES = \[\]  
with mp\_face\_detection.FaceDetection\(  
    model\_selection=1, min\_detection\_confidence=0.5\) as face\_detection:  
  for idx, file in enumerate\(IMAGE\_FILES\):  
    image = cv2.imread\(file\)  
    \# 將BGR圖像轉(zhuǎn)換為RGB并使用MediaPipe人臉檢測對其進行處理.  
    results = face\_detection.process\(cv2.cvtColor\(image, cv2.COLOR\_BGR2RGB\)\)  
  
    \# 繪制每張人臉的人臉檢測.  
    if not results.detections:  
      continue  
    annotated\_image = image.copy\(\)  
    for detection in results.detections:  
      print\('Nose tip:'\)  
      print\(mp\_face\_detection.get\_key\_point\(  
          detection, mp\_face\_detection.FaceKeyPoint.NOSE\_TIP\)\)  
      mp\_drawing.draw\_detection\(annotated\_image, detection\)  
    cv2.imwrite\('/tmp/annotated\_image' + str\(idx\) + '.png', annotated\_image\)  
   \# 用于網(wǎng)絡(luò)攝像頭輸入:  
cap = cv2.VideoCapture\(0\)  
with mp\_face\_detection.FaceDetection\(  
    model\_selection=0, min\_detection\_confidence=0.5\) as face\_detection:  
  while cap.isOpened\(\):  
    success, image = cap.read\(\)  
    if not success:  
      print\("Ignoring empty camera frame."\)  
      \# 如果加載視頻跪但,請使用“中斷”而不是“繼續(xù)”.  
      continue  
  
    \# 若要提高性能他去,可以選擇將圖像標(biāo)記為不可寫以通過引用傳遞.  
    image.flags.writeable = False  
    image = cv2.cvtColor\(image, cv2.COLOR\_BGR2RGB\)  
    results = face\_detection.process\(image\)  
  
    \# 在圖像上繪制人臉檢測注釋.  
    image.flags.writeable = True  
    image = cv2.cvtColor\(image, cv2.COLOR\_RGB2BGR\)  
    if results.detections:  
      for detection in results.detections:  
        mp\_drawing.draw\_detection\(image, detection\)  
    \# 水平翻轉(zhuǎn)圖像以獲得自拍視圖顯示.  
    cv2.imshow\('MediaPipe Face Detection', cv2.flip\(image, 1\)\)  
    if cv2.waitKey\(5\) \& 0xFF == 27:  
      break  
cap.release\(\) 

2.框架對比

應(yīng)用平臺:

模型推理部署框架 應(yīng)用平臺
NCNN 移動端
OpenVINO CPU,GPU饮亏,嵌入式平臺都可以使用慨绳,尤其是在CPU上首選OPenVINO。DepthAI嵌入式空間AI平臺被环。
TensorRT 只能用在NIVDIA的GPU上的推理框架糙及。NIVDIA的Jetson平臺。
Mediapipe 服務(wù)端筛欢,移動端浸锨,嵌入式平臺,TPU版姑。

研發(fā)單位:

  • 騰訊公司開發(fā)的移動端平臺部署工具——NCNN柱搜;
  • Intel公司針對自家設(shè)備開開發(fā)的部署工具——OpenVINO;
  • NVIDIA公司針對自家GPU開發(fā)的部署工具——TensorRT剥险;
  • Google針對自家硬件設(shè)備和深度學(xué)習(xí)框架開發(fā)的部署工具——Mediapipe聪蘸;
  • 由微軟、亞馬遜 表制、Facebook 和 IBM 等公司共同開發(fā)的開放神經(jīng)網(wǎng)絡(luò)交換格式——ONNX健爬;

如何選擇:

  • ONNXRuntime 是可以運行在多平臺 (Windows,Linux么介,Mac娜遵,Android,iOS) 上的一款推理框架壤短,它接受 ONNX 格式的模型輸入设拟,支持 GPU 和 CPU 的推理。唯一不足就是 ONNX 節(jié)點粒度較細(xì)鸽扁,推理速度有時候比其他推理框架如 TensorRT 較低蒜绽。
  • NCNN是針對手機端的部署。優(yōu)勢是開源較早桶现,有非常穩(wěn)定的社區(qū)躲雅,開源影響力也較高。
  • OpenVINO 是 Intel 家出的針對 Intel 出品的 CPU 和 GPU 友好的一款推理框架骡和,同時它也是對接不同訓(xùn)練框架如 TensorFlow相赁,Pytorch,Caffe 等慰于。不足之處可能是只支持 Intel 家的硬件產(chǎn)品钮科。
  • TensorRT 針對 NVIDIA 系列顯卡具有其他框架都不具備的優(yōu)勢,如果運行在 NVIDIA 顯卡上婆赠, TensorRT 一般是所有框架中推理最快的绵脯。一般的主流的訓(xùn)練框架如TensorFlow 和 Pytorch 都能轉(zhuǎn)換成 TensorRT 可運行的模型。當(dāng)然了,TensorRT 的限制就是只能運行在 NVIDIA 顯卡上蛆挫,同時不開源 kernel赃承。
  • MediaPipe 不支持除了tensorflow之外的其他深度學(xué)習(xí)框架。MediaPipe 的主要用例是使用推理模型和其他可重用組件對應(yīng)用機器學(xué)習(xí)管道進行快速原型設(shè)計悴侵。MediaPipe 還有助于將機器學(xué)習(xí)技術(shù)部署到各種不同硬件平臺上的演示和應(yīng)用程序中瞧剖,為移動、桌面/云可免、web和物聯(lián)網(wǎng)設(shè)備構(gòu)建世界級ML解決方案和應(yīng)用程序抓于。

3.小結(jié)

本文主要介紹了5種推理框架,目的是使大家更加直觀的了解這幾種框架的特點浇借,應(yīng)用場景以及如何選擇捉撮,為大家之后的學(xué)習(xí)提供有限的幫助,不足之處請大家多多指正妇垢。

參考資料

  1. https://learn.microsoft.com/zh-cn/windows/ai/
  2. https://github.com/Tencent/ncnn
  3. https://zhuanlan.zhihu.com/p/344442534
  4. https://github.com/google/mediapipe
  5. https://www.zhihu.com/question/346965029/answer/2395418101
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末呕缭,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子修己,更是在濱河造成了極大的恐慌,老刑警劉巖迎罗,帶你破解...
    沈念sama閱讀 206,013評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件睬愤,死亡現(xiàn)場離奇詭異,居然都是意外死亡纹安,警方通過查閱死者的電腦和手機尤辱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,205評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來厢岂,“玉大人光督,你說我怎么就攤上這事∷#” “怎么了结借?”我有些...
    開封第一講書人閱讀 152,370評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長卒茬。 經(jīng)常有香客問我船老,道長,這世上最難降的妖魔是什么圃酵? 我笑而不...
    開封第一講書人閱讀 55,168評論 1 278
  • 正文 為了忘掉前任柳畔,我火速辦了婚禮,結(jié)果婚禮上郭赐,老公的妹妹穿的比我還像新娘薪韩。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,153評論 5 371
  • 文/花漫 我一把揭開白布俘陷。 她就那樣靜靜地躺著罗捎,像睡著了一般。 火紅的嫁衣襯著肌膚如雪岭洲。 梳的紋絲不亂的頭發(fā)上宛逗,一...
    開封第一講書人閱讀 48,954評論 1 283
  • 那天,我揣著相機與錄音盾剩,去河邊找鬼雷激。 笑死,一個胖子當(dāng)著我的面吹牛告私,可吹牛的內(nèi)容都是我干的屎暇。 我是一名探鬼主播,決...
    沈念sama閱讀 38,271評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼驻粟,長吁一口氣:“原來是場噩夢啊……” “哼根悼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起蜀撑,我...
    開封第一講書人閱讀 36,916評論 0 259
  • 序言:老撾萬榮一對情侶失蹤挤巡,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后酷麦,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體矿卑,經(jīng)...
    沈念sama閱讀 43,382評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,877評論 2 323
  • 正文 我和宋清朗相戀三年沃饶,在試婚紗的時候發(fā)現(xiàn)自己被綠了母廷。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 37,989評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡糊肤,死狀恐怖琴昆,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情馆揉,我是刑警寧澤业舍,帶...
    沈念sama閱讀 33,624評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站升酣,受9級特大地震影響勤讽,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜拗踢,卻給世界環(huán)境...
    茶點故事閱讀 39,209評論 3 307
  • 文/蒙蒙 一脚牍、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧巢墅,春花似錦诸狭、人聲如沸券膀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,199評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽芹彬。三九已至,卻和暖如春叉庐,著一層夾襖步出監(jiān)牢的瞬間舒帮,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,418評論 1 260
  • 我被黑心中介騙來泰國打工陡叠, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留玩郊,地道東北人。 一個月前我還...
    沈念sama閱讀 45,401評論 2 352
  • 正文 我出身青樓枉阵,卻偏偏與公主長得像译红,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子兴溜,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,700評論 2 345

推薦閱讀更多精彩內(nèi)容