日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

AI视频行为分析系统项目复盘——技术篇3:tensorRT技术梳理

發布時間:2023/11/27 生活经验 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 AI视频行为分析系统项目复盘——技术篇3:tensorRT技术梳理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

0 背景

見《AI視頻行為分析系統項目復盤——技術篇1》

1 tensorRT 介紹

NVIDIA?TensorRT?是一個深度學習平臺,用于模型推理加速(僅支持NVIDIA自家GPU,CPU加速一般使用OpenVINO)。

1.1 tensorRT 誕生意義

深度學習計算量相對普通程序還是挺大的,目前CV落地還不是很普及其中一個點就是對硬件要求較高。其次,算法的計算速度直接影響產品的成本和體驗,誰能在硬件成本限制下支撐起算法精度,誰就有產品競爭力。

工程上,GPU上的模型推理,業界主流使用TensorRT去加速,一方面極大提高推理速度(主要目的),另一方面減少顯存等等。

1.2 tensorRT 原理

TensorRT主要做了兩件事:

  1. TensorRT支持INT8和FP16的計算。模型訓練通常使用float32或16,TRT推理時可以選擇不用這么高精度。
  2. TensorRT對網絡結構進行了重構,把一些能夠合并的運算合并在了一起,針對GPU的特性做了優化。

總的來說優化方向就是:

  • 數據計算角度。(降低權重參數的表示精度、整理某些網絡結構)
  • 數據傳輸角度。(整理零碎數據一起傳輸,減少傳輸次數)
  • 數據訪問內存角度。(減少數據訪存次數、減少內存占用、提高重復使用效率)

問題1:為什么DL模型訓練時不直接用INT8去訓練呢?

回答:梯度對精度敏感,模型收斂要求權重的修正量很小很小。

問題2:為什么從FP32轉int8,推理精度損失不大呢?

回答:訓練好的模型一般具有較強魯棒性,對噪聲(輸入噪聲、權重噪聲等)有一定的容忍度。

2 tensorRT 真實情況下的效果

關于tensorRT到底能加速多少,除了與加速原理相關(如某些網絡模塊加速幅度更快),這個一般好像還得看運氣,實際上挺多因素有影響。

參考1:速度提升1倍——『深度應用』YoloV5 RTX2080Ti TensorRT與PyTorch速度對比

參考2:SSD單幀推理,4倍速度提升。批量推理,9倍速度提升。https://bella722.github.io/post/f524ef1f.html

參考3:

3 tensorRT實現的幾種方案

3.1 方案1:基于TensorFlow內置的TensorRT

自TensorFlow 1.7后,TensorFlow已經集成TensorRT了(Google和NVIDIA的合作)。

  • GitHub官網:tensorflow/tensorrt
  • 官方文檔:https://docs.nvidia.com/deeplearning/frameworks/tf-trt-user-guide/index.html

TF-TRT的優缺點:

? 優點:

1. API易于使用;

2. 無需擔心插件。

? 缺點:

1. 需要將整個TensorFlow庫存儲在平臺中(這對部署環境不利)

2. 需要在運行時將TensorFlow加載到內存中

3. 通常比純TensorRT引擎運行慢

流程DEMO

(此部分引用自:https://github.com/SimonWang00/TRT-Tensorflow2)

  • 簡介:在tensorflow2.0上使用tensorrt6加速
  • 工作流程:

運行環境準備

  • OS:Ubuntu18.0.4 LST
  • python:3.6.5
  • tensorflow:2.1.0
  • tensorrt:6.0.1
  • GPU:只支持GPU

執行步驟

  • 安裝Nvidia深度學習驅動,Cudnn和Cuda驅動:此部分從略。
  • 下載安裝TensorRT 6.0

保存模型

  • save_models形式

轉換成tensorrt圖

from tensorflow.python.compiler.tensorrt import trt_convert as trt
params=trt.DEFAULT_TRT_CONVERSION_PARAMS
params._replace(precision_mode=trt.TrtPrecisionMode.FP32)
converter = trt.TrtGraphConverterV2(input_saved_model_dir='tf_savedmodel',conversion_params=params)
converter.convert()#完成轉換,但是此時沒有進行優化,優化在執行推理時完成
converter.save('trt_savedmodel')

優化并推理

import tensorflow as tf
from tensorflow.python.compiler.tensorrt import trt_convert as trt
from tensorflow.keras.datasets import mnist
import time(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_test = x_test.astype('float32')
x_test = x_test.reshape(10000, 784)
x_test /= 255saved_model_loaded = tf.saved_model.load("trt_savedmodel", tags=[trt.tag_constants.SERVING])#讀取模型
graph_func = saved_model_loaded.signatures[trt.signature_constants.DEFAULT_SERVING_SIGNATURE_DEF_KEY]#獲取推理函數,也可以使用saved_model_loaded.signatures['serving_default']
frozen_func = trt.convert_to_constants.convert_variables_to_constants_v2(graph_func)#將模型中的變量變成常量,這一步可以省略,直接調用graph_func也行t=time.time()
output = frozen_func(tf.constant(x_test))[0].numpy()
print(time.time()-t)
print((output.argmax(-1)==y_test).mean())

3.2 方案2:基于TensorRT自身語法

一般將其他框架模型轉成ONNX格式,然后使用TensorRT自身語法去加載并推理ONNX模型。

此方案一個比較好的參考資料:wang-xinyu/tensorrtx?(幾十個主流算法的tensorRT實現

C++環境下的tensorRT(yoloV5)全過程DEMO?

備注1:以下流程主要參考自wang-xinyu/tensorrtx?,相關細節為自己實踐中修改或補全。

備注2:不要下載太新版本的CUDA和tensorRT,很有可能遇到問題無法解決。(網站上的issues中有很多人遇到環境不適配問題且沒有解決方案)

備注3:Ubuntu中切換系統默認CUDA的方法見:《AI視頻行為分析系統項目復盤——技術篇1》CUDA安裝部分。

1. Install CUDA(10.0版)

改用axel下載CUDA包(wget需要翻墻,一般連不上官網),

(axel下載CUDA包,例如:axel -n 50?https://developer.download.nvidia.cn/compute/cuda/11.1.0/local_installers/cuda-repo-ubuntu1804-11-1-local_11.1.0-455.23.05-1_amd64.deb)

命令依次如下:

  • 去官網下載cuda-repo-ubuntu1804-10-0-local-10.0.130-410.48_1.0-1_amd64.deb(10.0版本沒有顯示具體下載網址,所以無法使用axel下載)
  • sudo dpkg -i?cuda-repo-ubuntu1804-10-0-local-10.0.130-410.48_1.0-1_amd64.deb
  • sudo apt-key add /var/cuda-repo-10-0-local-10.0.130-410.48/7fa2af80.pub
  • sudo apt-get update
  • (可選:apt-cache show cuda? ?#查詢本機有哪幾個CUDA版本包,并顯示他們的詳細信息)
  • sudo apt-get install cuda=10.0.130-1?

備注:如果電腦之前已經安裝了高版本CUDA,那么安裝cuda時,就需要指定本次CUDA的具體版本號,wang-xinyu/tensorrtx上并沒有說明這點。

2. Install TensorRT(7.0.0版)

Go to?nvidia-tensorrt-7x-download. You might need login,下載后執行如下命令:

  • sudo dpkg -i nv-tensorrt-repo-ubuntu1804-cuda10.0-trt7.0.0.11-ga-20191216_1-1_amd64.deb
  • sudo apt update
  • sudo apt install tensorrt

3. Install OpenCV

這一步好像Ubuntu默認裝了3.2版,不需要安裝。

4. Check your installation

如果以下3個命令,終端中都有信息回復,則表示安裝成功。

  • dpkg -l | grep cuda
  • dpkg -l | grep nvinfer
  • dpkg -l | grep opencv

5.yolo5s項目準備

下載yolo5官網V5版工程,下載yolo5s.pt預訓練模型,將yolov5s.pt模型轉為yolov5.wts格式。命令如下:

  • git clone -b v5.0 https://github.com/ultralytics/yolov5.git
  • git clone https://github.com/wang-xinyu/tensorrtx.git
  • // download https://github.com/ultralytics/yolov5/releases/download/v5.0/yolov5s.pt
  • cp {tensorrtx}/yolov5/gen_wts.py {ultralytics}/yolov5
  • cd {ultralytics}/yolov5
  • python gen_wts.py yolov5s.pt

6.build tensorrtx/yolov5 and run

cd {tensorrtx}/yolov5/
// update CLASS_NUM in yololayer.h if your model is trained on custom dataset
mkdir build
cd build
cp {ultralytics}/yolov5/yolov5s.wts {tensorrtx}/yolov5/build
cmake ..
make
sudo ./yolov5 -s [.wts] [.engine] [s/m/l/x/s6/m6/l6/x6 or c/c6 gd gw]  // serialize model to plan file
sudo ./yolov5 -d [.engine] [image folder]  // deserialize and run inference, the images in [image folder] will be processed.
// For example yolov5s
sudo ./yolov5 -s yolov5s.wts yolov5s.engine s
sudo ./yolov5 -d yolov5s.engine ../samples
// For example Custom model with depth_multiple=0.17, width_multiple=0.25 in yolov5.yaml
sudo ./yolov5 -s yolov5_custom.wts yolov5.engine c 0.17 0.25
sudo ./yolov5 -d yolov5.engine ../samples

7.check the images generated, as follows. _zidane.jpg and _bus.jpg

4 tensorRT技術未來趨勢預估

待續

總結

以上是生活随笔為你收集整理的AI视频行为分析系统项目复盘——技术篇3:tensorRT技术梳理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。