<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      手把手教你使用LabVIEW TensorRT實現圖像分類實戰(含源碼)

      ????博客主頁: virobotics(儀酷智能):LabVIEW深度學習、人工智能博主

      ??本文由virobotics(儀酷智能)原創首發

      ??歡迎大家關注?點贊??收藏?留言??

      @

      前言

      Hello,大家好,我是virobotics(儀酷智能),一個深耕于LabVIEW和人工智能領域的開發工程師。

      各位朋友,今天我們一起來探究一下如何基于LabVIEW使用TensorRT實現圖像分類,本文所用到的工具包的安裝與下載方法可參考博文:https://blog.csdn.net/virobotics/article/details/129304465

      一、TensorRT簡介

      TensorRT是一個高性能的深度學習推理(Inference)優化器,可以為深度學習應用提供低延遲、高吞吐率的部署推理。TensorRT可用于對超大規模數據中心、嵌入式平臺或自動駕駛平臺進行推理加速。TensorRT現已能支持TensorFlow、Caffe、Mxnet、Pytorch等幾乎所有的深度學習框架,將TensorRT和NVIDIA的GPU結合起來,能在幾乎所有的框架中進行快速和高效的部署推理。主要用來針對 NVIDIA GPU進行高性能推理(Inference)加速。

      在這里插入圖片描述

      TensorRT與其他推理引擎速度對比:

      在這里插入圖片描述

      注:測試電腦cpu為i7-11800H,Intel集顯為i7-11650G7,獨顯為筆記本RTX 3070(包括預處理和后處理)

      二、TensorRT工具包常用函數介紹

      TensorRT工具包所在位置:

      在這里插入圖片描述
      TrtSession:推理函數系列,可直接推理engine(trt)模型和onnx模型

      TensorRT工具包常用函數介紹:

      在這里插入圖片描述

      在這里插入圖片描述

      三、使用LabVIEW TensorRT實現圖像分類完整步驟

      1、模型獲取及轉換為onnx

      • 安裝pytorch和torchvision
      • 獲取torchvision中的模型:mobile(我們獲取預訓練好的模型):
      original_model = models.mobilenet_v2(pretrained=True)
      
      • 轉onnx
      def get_pytorch_onnx_model(original_model):
          # define the directory for further converted model save
          onnx_model_path = dirname
          # define the name of further converted model
          onnx_model_name = "mobilenet.onnx"
      
          # create directory for further converted model
          os.makedirs(onnx_model_path, exist_ok=True)
      
          # get full path to the converted model
          full_model_path = os.path.join(onnx_model_path, onnx_model_name)
      
          # generate model input
          generated_input = Variable(
              torch.randn(1, 3, 224, 224)
          )
      
          # model export into ONNX format
          torch.onnx.export(
              original_model,
              generated_input,
              full_model_path,
              verbose=True,
              input_names=["input"],
              output_names=["output"],
              opset_version=11
          )
      
          return full_model_path
      

      完整獲取及模型轉換python代碼如下:

      import os
      import torch
      import torch.onnx
      from torch.autograd import Variable
      from torchvision import models
      
      dirname, filename = os.path.split(os.path.abspath(__file__))
      print(dirname)
      
      def get_pytorch_onnx_model(original_model):
          # define the directory for further converted model save
          onnx_model_path = dirname
          # define the name of further converted model
          onnx_model_name = "mobilenet.onnx"
      
          # create directory for further converted model
          os.makedirs(onnx_model_path, exist_ok=True)
      
          # get full path to the converted model
          full_model_path = os.path.join(onnx_model_path, onnx_model_name)
      
          # generate model input
          generated_input = Variable(
              torch.randn(1, 3, 224, 224)
          )
      
          # model export into ONNX format
          torch.onnx.export(
              original_model,
              generated_input,
              full_model_path,
              verbose=True,
              input_names=["input"],
              output_names=["output"],
              opset_version=11
          )
      
          return full_model_path
      
      
      def main():
          # initialize PyTorch MobileNetV2
          original_model = models.mobilenet_v2(pretrained=True)
      
          # get the path to the converted into ONNX PyTorch model
          full_model_path = get_pytorch_onnx_model(original_model)
          print("PyTorch MobileNet model was successfully converted: ", full_model_path)
      
      
      if __name__ == "__main__":
          main()
      
      

      注:該模型所用數據集為:ImageNet數據集

      2、onnx轉化為engine(save engine_Simple.vi)

      使用onnx_to_engine.vi,將該vi拖拽至前面板空白區域,創建并輸入onnx的路徑以及engine的路徑,type即精度,可選擇FP32或FP16,肉眼觀看精度無大差別。(一般FP16模型比FP32速度快一倍
      在這里插入圖片描述
      轉換的完整程序如下:
      在這里插入圖片描述
      點擊運行,等待1~3分鐘,模型轉換成功,可在剛剛設定的路徑中找到我們轉化好的mobilenet.engine.

      Q:為什么要轉換模型,不直接調用ONNX?
      A:tensorRT內部加載ONNX后其實是做了一個轉換模型的工作,該過程時間長、占用內存巨大。因此不推薦每次初始化都加載ONNX模型,而是加載engine。

      3、LabVIEW TensorRT調用 mobilenet實現圖像分類(call_tensorRT.vi)

      1、加載mobilenet.engine

      在這里插入圖片描述

      2、根據轉換前的onnx模型設置輸入輸出緩存

      在這里插入圖片描述

      3、將預處理后的輸入tensor及其數據大小(即1 * 3 * 224 * 224)送至run函數中。(可使用輸入一維數組的方式,亦可使用輸入數據指針地址的方式,后者稍快)

      在這里插入圖片描述

      4、根據模型輸出的數據量,首先初始化一個相同數據量的數組(1維、2維、3維皆可,根據用戶后處理方便可自行選擇),使用Get_Result獲取相同數據量和形狀的結果。
      默認第一個輸出的index為0,如有多個輸出,第n個輸出的index為n-1

      在這里插入圖片描述

      5、完整圖像分類源碼

      在這里插入圖片描述

      6、分類結果及速度,如下圖所示,使用tensorRT FP16,分類一幀大概需要0.5毫秒左右,速度極快

      在這里插入圖片描述

      7、不同工具包實現圖像分類速度比較,對比可見對于分類,純TenosRT推理速度是onnx使用TensoRT推理速度的2倍

      在這里插入圖片描述

      四、使用INetworkDefinition編輯模型

      1、tensorRT高級API

      1、INetworkDefinition(INetwork文件夾):可新建一個空白網絡或加載一個Onnx網絡,獲取其所有的層(算子,ILayer)、輸入和輸出張量(ITensor),用戶也可以執行以下操作:添加算子、輸入輸出、將某一個張量設置為輸出、保存成engine文件等

      在這里插入圖片描述

      2、ILayer:INetworkDefinition中的任意一層,實質為一個算子。tensorRT中共有41種Ilayer子類,如右圖。使用屬性節點可獲取、編輯每一種子類(如IConvilutionLayer)的相關信息
      使用INetwork下的多態VI addLayer可在網絡中添加指定層

      在這里插入圖片描述

      3、ITensor:INetworDefinition中的變量,一般為某一個ILayer的輸入或輸出??赏ㄟ^以下四個函數獲取某一個ITensor:
      INetworkDefinition.getInput(index)
      INetworkDefinition.getOutput(index)
      ILayer.getInput(index)
      ILayer.getOutput(index)
      在INetworkDefinition中,使用markOutput將某個ITensor設置為網絡的輸出,使用unMarkOutput將某個原本是輸出的ITensor設置為非輸出。

      在這里插入圖片描述

      2、給pytorch分類模型加一層softMax

      softMax理論知識

      假設有一個數組V,V i 表示V中的第i個元素,那么這個元素的softmax值為:
      在這里插入圖片描述
      在pytorch分類模型的輸出結果中,j=1000,i為0~999

      為什么softmax是這種形式?

      首先,我們知道概率有兩個性質:
      1)預測的概率為非負數;
      2)各種預測結果概率之和等于1。
      softmax就是將在負無窮到正無窮上的預測結果按照這兩步轉換為概率的。

      使用LabVIEW給分類模型加一層softMax(save engine_add_softMax.vi)

      1. 加載mobilenet.onnx模型;
      2. 將原來的輸出tensor設置為非輸出;
      3. 使用addSoftMax,的輸出tensor后面加一層,返回該層句柄;
      4. 使用屬性節點的Axes設置為2。因為原本的輸出shape為(1,1000),因此要在1000這個維度的基礎上添加softMax,因此Axes=2;
      5. 設置新加一層的輸出為整個模型的輸出,保存模型。

      在這里插入圖片描述

      調用并推理加了softMax的分類模型engine(call_tensorRT_softMax.vi)

      在這里插入圖片描述

      四、完整項目源碼下載

      大家可關注微信公眾號: VIRobotics,回復關鍵字:TensorRT實現mobilenet圖像分類 獲取本次分享內容的完整項目源碼及模型。

      TensorRT實現mobilenet圖像分類
      

      附加說明

      操作系統:Windows10
      python:3.6及以上
      LabVIEW:2018及以上 64位版本
      視覺工具包:techforce_lib_opencv_cpu-1.0.0.98.vip
      LabVIEW TensorRT工具包:virobotics_lib_tensorrt-1.0.0.22.vip

      總結

      以上就是今天要給大家分享的內容,希望對大家有用。我是virobotics(儀酷智能),我們下篇文章見~

      如果有問題可以在評論區里討論,如您想要探討更多關于LabVIEW與人工智能技術,歡迎加入我們:705637299。進群請備注:LabVIEW機器視覺

      **如果文章對你有幫助,歡迎?關注、??點贊、?收藏

      posted @ 2023-08-16 14:31  virobotics  閱讀(146)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 精品人妻中文字幕av| 亚洲精品国产中文字幕| 亚洲国产精品毛片av不卡在线| 国产精品∧v在线观看| 欧美啪啪网| 我国产码在线观看av哈哈哈网站| 国产成人精品亚洲一区二区| 2021国产成人精品久久| 中文有无人妻VS无码人妻激烈 | 亚洲最大天堂在线看视频| 久久国产免费观看精品3| 丰满人妻熟妇乱又伦精品软件| 天天躁夜夜躁狠狠喷水| 亚洲国产激情一区二区三区 | 一区二区中文字幕av| 丰满少妇人妻久久久久久| 热久久美女精品天天吊色| 美日韩不卡一区二区三区| 999久久久免费精品播放| 国产午夜精品福利91| 人妻一区二区三区人妻黄色| 亚洲无av中文字幕在线| 国产人妻人伦精品婷婷| 人妻日韩人妻中文字幕| 2019国产精品青青草原| 国产精品亚洲一区二区三区| 国产精品午夜福利在线观看| 人妻少妇精品视频三区二区| 麻豆国产成人AV在线播放| 国产人妻高清国产拍精品| 亚洲色大成网站WWW久久| 99riav国产精品视频| 午夜福利电影| 国产精品久久久久婷婷五月| 午夜男女爽爽影院在线| 色欧美片视频在线观看| 爱如潮水日本免费观看视频| 日韩中文字幕免费在线观看 | 人妻换着玩又刺激又爽| 久久综合97丁香色香蕉| 国产69精品久久久久777|