Transfer Learning Toolkit (TLT) + DeepStream (DS)快速部署深度学习模型(以口罩检测为例)
文章目錄
- 簡介
- TLT
- DS
- 基于TLT進(jìn)行遷移學(xué)習(xí)
- 環(huán)境準(zhǔn)備
- 模型訓(xùn)練
- 基于DS的模型部署
- 總結(jié)
最近在做一個(gè)深度學(xué)習(xí)的橫向,被實(shí)時(shí)性搞的很頭疼,遂打算研究研究新的技術(shù)路線,做點(diǎn)技術(shù)儲(chǔ)備。TLT+DS的中文資料很少,本文以官方資料為基礎(chǔ)做了一點(diǎn)整理工作。
簡介
TLT
如何快速訓(xùn)練和部署深度學(xué)習(xí)模型是工業(yè)界關(guān)注的重點(diǎn)問題,英偉達(dá)推出的TLT+DS工具鏈為訓(xùn)練自有數(shù)據(jù)集進(jìn)而進(jìn)行快速部署提供了端到端的解決方案。
其中,TLT是英偉達(dá)遷移學(xué)習(xí)工具,提供對(duì)預(yù)訓(xùn)練模型的遷移訓(xùn)練、模型剪紙、量化,的一站式解決方案。文檔 指南
Nvidia在NGC倉庫中提供了一組為TLT工具維護(hù)的預(yù)訓(xùn)練模型,囊括了常見CV任務(wù)的經(jīng)典模型(人臉識(shí)別、目標(biāo)檢測(cè)、語義分割、人體姿態(tài)估計(jì)、分類等):
DS
DeepStream(DS)則是一套經(jīng)高度優(yōu)化的推理系統(tǒng),提供完整的檢測(cè)流水線實(shí)現(xiàn),包含高速編解碼器、預(yù)處理器、模板跟蹤器、TensorRT推理引擎等組件,并配套有完善的可視化、精度校驗(yàn)工具。
- 文檔中包含了基本概念的介紹。
- 手冊(cè)描述了DeepStream的配置方法及其提供的GStreamer插件的輸入、輸出和控制參數(shù)。
- 宣傳PPT給出了DS的基本特性和DS配置文件的簡要編寫方法。
- GStreamer是DeepStream的底層依賴,閱讀其文檔可以幫助理解DeepStream的相關(guān)概念。
- 官方示例:
(1)Creating a Human Pose Estimation Application with NVIDIA DeepStream
(2) Building Intelligent Video Analytics Apps Using NVIDIA DeepStream 5.0 (Updated for GA)
本文主要參照官方提供的口罩檢測(cè)demo對(duì)使用TLT+DS進(jìn)行深度學(xué)習(xí)模型訓(xùn)練、部署的方法進(jìn)行初步探索,并對(duì)demo缺少的細(xì)節(jié)進(jìn)行補(bǔ)充,修正demo的部分bug,添加部分配置文件。
基于TLT進(jìn)行遷移學(xué)習(xí)
環(huán)境準(zhǔn)備
使用Docker鏡像是獲取TLT和DS工具的最佳方式。
本文使用的運(yùn)行環(huán)境:
- Ubuntu 18.04
- Docker 19.04
- nvidia-docker(提供GPU的Docker虛擬化支持)
- GTX 2080Ti
首先拉取官方鏡像:
# TLT docker pull nvcr.io/nvidia/tlt-streamanalytics:v2.0_py3 # DeepStream docker pull nvcr.io/nvidia/deepstream:5.0.1-20.09-samples2021/3/13注:官方tlt鏡像已升級(jí)到3.0:鏈接
注冊(cè)一個(gè)NGC賬戶,并獲取一個(gè)API Key,API key將用于訪問NGC相關(guān)的服務(wù)(如預(yù)訓(xùn)練模型下載):
API key僅顯示一次,請(qǐng)注意保存,如丟失可以重新生成一個(gè)。
為便于陳述,下文使用xxx/tlt-demo指代項(xiàng)目根路徑,目錄結(jié)構(gòu)如下:
其中原始數(shù)據(jù)集data/raw_data、代碼部分face-mask-detection、最終訓(xùn)練好的模型data/experiment_dir_final和預(yù)訓(xùn)練模型data/pretrained_resnet18已經(jīng)打包上傳到網(wǎng)盤,其他文件可通過代碼生成。
鏈接:https://pan.baidu.com/s/1VCp5nPF5NHGtD00GNPmiPA
提取碼:7sxb
如已下載上面的文件,則下面git clone 和數(shù)據(jù)集下載兩步可跳過。
拉取demo項(xiàng)目(face-mask-detection)github倉庫到xxx/tlt-demo路徑
下載數(shù)據(jù)集文件,存放到xxx/tlt_demo/data路徑下。
face-mask-detection同時(shí)使用了四個(gè)公共數(shù)據(jù)集作為訓(xùn)練數(shù)據(jù)。
模型訓(xùn)練
在啟動(dòng)容器前,先填一下API key,執(zhí)行:
docker login nvcr.io填入:
Username: $oauthtoken
Password: 【Your Key】
啟動(dòng)TLT訓(xùn)練容器:
參數(shù)解釋:
- –gpus all 指定使用的GPU
- -v “xxx/tlt-demo”:"/tlt-demo" 映射宿主機(jī)文件
- -p 8888:8888 綁定8888端口方便訪問jupyter notebook
進(jìn)入容器后,首先運(yùn)行數(shù)據(jù)集轉(zhuǎn)換腳本。
cd /tlt-demo/face-mask-detection python data2kitti.py --kaggle-dataset-path /tlt-demo/data/raw_dataset/Kaggle-Medical-Mask-Dataset \--mafa-dataset-path /tlt-demo/data/raw_dataset/MAFA \--fddb-dataset-path /tlt-demo/data/raw_dataset/FDDB \--widerface-dataset-path /tlt-demo/data/raw_dataset/WiderFace \--kitti-base-path /tlt-demo/data/kitti_dataset \--train該腳本將四種數(shù)據(jù)集合并,轉(zhuǎn)換為kitti數(shù)據(jù)格式,并存放在容器的/tlt-demo/data/kitti_dataset路徑(即宿主機(jī)xxx/tlt-demo/data/kitti_dataset路徑)下。轉(zhuǎn)換中產(chǎn)生的警告可忽略。
對(duì)data2kitti.py的補(bǔ)充說明:
用于目標(biāo)檢測(cè)的kitti數(shù)據(jù)集格式具有如下組織結(jié)構(gòu):
其中kitti_seq_to_map.json文件是可選的,用于描述訓(xùn)練集/測(cè)試集的劃分。
labels文件中每一行描述一個(gè)邊界框的信息,具有如下字段:
如:
在data2kitti.py腳本中,四個(gè)數(shù)據(jù)集的圖片被統(tǒng)一resize到(960,544),存儲(chǔ)為jpg格式文件。
下一步,啟動(dòng)jupyter-notebook并按照face-mask-detection.ipynb提供的指示進(jìn)行模型訓(xùn)練,本文網(wǎng)盤中的版本已對(duì)face-mask-detection.ipynb的bug進(jìn)行修正,并補(bǔ)充了一些內(nèi)容。
jupyter-notebook --ip 0.0.0.0 --no-browser --allow-root
啟動(dòng)后,訪問【宿主機(jī)ip】:8888即可。其中token可在jupyter-notebook的啟動(dòng)消息中獲得。
下面對(duì)face-mask-detection.ipynb中的主要步驟進(jìn)行簡要說明和補(bǔ)充。
設(shè)置一些環(huán)境變量,注意修改路徑和KEY:
執(zhí)行數(shù)據(jù)集轉(zhuǎn)換和切分:
其中使用的配置文件detectnet_v2_tfrecords_kitti_trainval.txt 內(nèi)容如下:
ref: https://docs.nvidia.com/metropolis/TLT/tlt-getting-started-guide/text/preparing_data_input.html#conversion-to-tfrecords
參數(shù)如下:
因此在detectnet_v2_tfrecords_kitti_trainval.txt 表示我們以數(shù)據(jù)集/tlt-demo/data/kitti_dataset/train/為輸入,切分20%作為驗(yàn)證集,其余為訓(xùn)練集。
下載與訓(xùn)練模型:
此處使用英偉達(dá)的detectnet_v2模型,鑒于數(shù)據(jù)集不大,任務(wù)也比較簡單,選用較為精簡的resnet18作為骨架網(wǎng)絡(luò)。
啟動(dòng)訓(xùn)練:
這里對(duì)配置文件detectnet_v2_train_resnet18_kitti.txt的內(nèi)容進(jìn)行簡單解釋。
配置文件約定所使用的數(shù)據(jù)增強(qiáng)方法和訓(xùn)練參數(shù),其參數(shù)說明見:
https://docs.nvidia.com/metropolis/TLT/tlt-getting-started-guide/text/creating_experiment_spec.html#specification-file-for-detectnet-v2
我僅修改了路徑相關(guān)的幾行:
筆者使用2塊2080Ti訓(xùn)練的用時(shí)為1:32:42.382548.
模型剪枝:
筆者此處設(shè)置剪紙閾值為0.1(參數(shù)越大,剪的越狠),效果不錯(cuò),精度沒有降低。
剪枝后還需要再重新訓(xùn)一下:
配置文件detectnet_v2_retrain_resnet18_kitti.txt的修改方法和detectnet_v2_train_resnet18_kitti.txt相似。
最終精度是
可視化檢查:
在宿主機(jī)xxx/tlt-demo/data/test_images路徑中放入待檢圖片。
對(duì)test_images中的圖片執(zhí)行推理:
可視化:
注意在箭頭處需加個(gè)int修復(fù)源程序bug。
可見訓(xùn)練效果非常理想。
最后,導(dǎo)出模型,格式為etlt,etlt格式可被轉(zhuǎn)換為trt或tensorRT的engine文件,亦可被DeepStream加載并自動(dòng)轉(zhuǎn)化為所需的trt格式模型。
我們也可進(jìn)一步將其轉(zhuǎn)換成TensorRT的engine文件:
上面導(dǎo)出的模型是Float32類型的,為了追求更快的推理速度,可將Float32類型的模型量化int8模型。為了解決解決參數(shù)轉(zhuǎn)換為int8類型后動(dòng)態(tài)范圍下降的問題,量化的一個(gè)關(guān)鍵步驟是確定float32到int8的量化映射,映射參數(shù)是根據(jù)模型對(duì)數(shù)據(jù)集的響應(yīng)進(jìn)行的,下面的命令抽取40個(gè)batch的數(shù)據(jù)生成calibration tensorfile。
隨后我們調(diào)用tlt-convert導(dǎo)出int8推理engine:
engine文件是平臺(tái)相關(guān)的,比如3080系顯卡上執(zhí)行tlt-convert導(dǎo)出的engine并不能在10系顯卡上運(yùn)行,需注意。Nvidia也提供了不同平臺(tái)的tlt-convert工具供使用。
至此我們已經(jīng)得到了如下文件:
- /tlt-demo/data/experiment_dir_unpruned/下存放原始訓(xùn)練模型
- /tlt-demo/data/experiment_dir_pruned/存放經(jīng)過剪枝的模型
- /tlt-demo/data/experiment_dir_retrain/存放經(jīng)過再次訓(xùn)練后的剪枝模型
- /tlt-demo/data/experiment_dir_final/存放導(dǎo)出模型,包括原始的resnet18_detector.etlt模型文件和經(jīng)過int8量化并轉(zhuǎn)化為tensorRT推理引擎的resnet18_detector_int8.engine文件,未經(jīng)過int8量化但轉(zhuǎn)化為tensorRT推理引擎的resnet18_detector.engine文件。還有保存有int8映射信息的calibration.bin文件。
2021/1/12注:為了查看不同剪枝閾值的影響,對(duì)pth=[0.15,0.2,0.25,0.3,0.35,0.45]分別進(jìn)行了實(shí)驗(yàn):
| 0.15 | 84.7971 | 81.9967 | 83.3969 |
| 0.2 | 84.8928 | 81.5916 | 83.2422 |
| 0.25 | 83.9029 | 81.9541 | 82.9285 |
| 0.3 | 84.6431 | 82.0092 | 83.3262 |
| 0.35 | 84.9796 | 82.394 | 83.6868 |
| 0.45 | 83.9478 | 81.4966 | 82.7222 |
可見在本例中,對(duì)pth的裕度是很大的。但有些模型對(duì)pth很敏感,需仔細(xì)調(diào)整。
下一節(jié)將探討如何在DS框架上部署這些模型。
基于DS的模型部署
DeepStream SDK提供了完整的流分析工具鏈,可用于基于AI的視頻和圖像理解以及多傳感器處理。
如前所述,DeepStream的相關(guān)資料較少,尚未由較為詳細(xì)的中文技術(shù)博客對(duì)其進(jìn)行介紹,DS開發(fā)的主要的參考來源是官方文檔和例子:
- 文檔中包含了基本概念的介紹。
- 手冊(cè)描述了DeepStream的配置方法及其提供的GStreamer插件的輸入、輸出和控制參數(shù)。
- 宣傳PPT給出了DS的基本特性和DS配置文件的簡要編寫方法。
- python API
- GStreamer是DeepStream的底層依賴,閱讀其文檔可以幫助理解DeepStream的相關(guān)概念。
依舊通過容器運(yùn)行DeepStream,擺脫繁瑣的環(huán)境配置工作:
其中xhost +用于開放宿主機(jī)圖形界面的接入權(quán)限
參數(shù)解釋:
- –gpus all 指定容器可見的GPU
- –device=/dev/video0 將攝像頭1映射進(jìn)入容器
- -it -p 8554:8554 映射RTSPStreaming RTSP端口(可選)
- -p 5400:5400/udp 映射RTSPStreaming UDP端口(可選)
- -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=:0 連接圖形界面到宿主機(jī)
- -v “xxx/tlt-demo”:"/tlt-demo" 映射宿主機(jī)文件夾
- -w /tlt-demo/face-mask-detection/ds_configs 設(shè)置進(jìn)入容器后開啟的路徑
注意這里使用的是deepstream:5.0.1-20.09-samples版本鏡像而非更精簡的deepstream:5.0.1-20.09-base,該鏡像包含重要的例程文件(deepstream-app)。
進(jìn)入容器后,我們運(yùn)行demo寫好的配置文件(有改動(dòng))。
通過指定的配置文件啟動(dòng)deepstream-app檢測(cè)程序:
這個(gè)配置文件以640*480的分辨率,30fps的幀率從/dev/video0這個(gè)usb攝像頭讀入視頻流,進(jìn)行推理,跟蹤,并渲染檢測(cè)結(jié)果,最后推送到宿主機(jī)的圖形界面,同時(shí)發(fā)送RTSP流。
RTSP是流行的流傳輸協(xié)議,使用VLC,potplayer等視頻播放器均可訪問,其地址是
其他配置文件說明:
- deepstream_app_source1_camera_masknet_gpu_fp32.txt 加載fp32推理模型、攝像頭0為輸入
- deepstream_app_source1_camera_masknet_gpu_int8.txt 加載int8推理模型、攝像頭0為輸入
- deepstream_app_source1_video_masknet_gpu_fp32.txt 加載fp32推理模型、/tlt-demo/test.mp4為輸入
- deepstream_app_source1_video_masknet_gpu_int8.txt 加載int8推理模型、/tlt-demo/test.mp4為輸入
若一切正常,則可通過GUI或視頻瀏覽器看到標(biāo)注由檢測(cè)結(jié)果的輸出視頻流,整個(gè)檢測(cè)流水線運(yùn)行速度很快,顯卡的占用率也很低。
下面簡要分析一下demo中配置文件的編寫方法。
DeepStream的底層是GStreamer,GStreamer是用于創(chuàng)建流媒體應(yīng)用程序的極其強(qiáng)大且通用的框架。 GStreamer框架的核心優(yōu)點(diǎn)來自其模塊化,視頻處理的各個(gè)環(huán)節(jié)均有豐富的插件進(jìn)行支撐,基于GStreamer進(jìn)行開發(fā)的核心內(nèi)容就是合理的將各個(gè)環(huán)節(jié)的模塊串接為一個(gè)處理管線。GStreamer是純C編寫的,底層基于Glib庫,并使用G-object提供對(duì)C語言的面向?qū)ο笾С?#xff08;暗黑科技)。
DeepStream在GStreamer提供的基礎(chǔ)模塊(如編解碼,文件I/O,合成器等)的基礎(chǔ)上,又為深度學(xué)習(xí)的應(yīng)用場(chǎng)景實(shí)現(xiàn)了一組插件:
如nvinfer用于支持tensorRT推理,nvtracker用于邊界框的跟蹤,nvdsosd用于渲染檢測(cè)結(jié)果。
看DS提供的例程是學(xué)習(xí)DS開發(fā)的最佳途徑:
其中C語言版本位于容器的如下路徑:
python語言版本可在這里下載。
更多例程可見這里。
其中一個(gè)很重要的例程是deepstream-test5 app。
除常規(guī)推理管道外,Test5應(yīng)用程序還支持以下功能:
- 將消息發(fā)送到后端服務(wù)器。
- 充當(dāng)使用者以從后端服務(wù)器接收消息。
- 基于從服務(wù)器收到的消息觸發(fā)基于事件的記錄。
- OTA模型更新。
除此之外。鑒于通過DS的底層C接口和Python接口構(gòu)建檢測(cè)流水線仍有些繁瑣,Nvidia針對(duì)最常見的深度學(xué)習(xí)模型處理流程提煉并設(shè)計(jì)了參考程序deepstream-app,該程序允許用戶通過傳入配置文件描述檢測(cè)流水線,deepstream-app會(huì)根據(jù)配置文件的描述調(diào)用相應(yīng)DS插件,構(gòu)建流水線。因此,雖然deepstream-app是個(gè)參考程序,但常被當(dāng)做DS的CLI工具使用。
如下是deepstream-app提供的流水線的結(jié)構(gòu)框圖,其中很多組件是可選的(如secondary classifiers):
首先,前端使用decode插件讀入視頻流(來源可以是RTSP、文件、usb攝像頭等),多個(gè)攝像頭經(jīng)過MUX進(jìn)行合并,組成batch,送入主檢測(cè)器(目標(biāo)檢測(cè))獲得邊界框,隨后送入tracker進(jìn)行跟蹤,每個(gè)跟蹤的邊界框繼續(xù)送入次級(jí)檢測(cè)器(一般是分類器),檢測(cè)結(jié)果發(fā)送到tilter形成2D幀數(shù)組,進(jìn)而用osd插件渲染檢測(cè)結(jié)果。最后,要輸出結(jié)果(sink),DeepStream提供了各種選項(xiàng):在屏幕上用邊框顯示輸出,將輸出保存到本地磁盤,通過RTSP進(jìn)行流傳輸或僅將元數(shù)據(jù)發(fā)送到云。為了將元數(shù)據(jù)發(fā)送到云,DeepStream使用Gst-nvmsgconv和Gst-nvmsgbroker插件。 Gst-nvmsgconv將元數(shù)據(jù)轉(zhuǎn)換為架構(gòu)有效負(fù)載,而Gst-nvmsgbroker建立與云的連接并發(fā)送遙測(cè)數(shù)據(jù)。 有幾種內(nèi)置的代理協(xié)議,例如Kafka,MQTT,AMQP和Azure IoT。 可以創(chuàng)建自定義代理適配器。
deepstream-app的配置文件使用freedesktop格式,是一種非常精簡的鍵值對(duì)描述文件,形如:
# demo [Desktop Entry] Version=1.0 Type=Application Name=Foo Viewer Comment=The best viewer for Foo objects available! TryExec=fooview Exec=fooview %F Icon=fooview MimeType=image/x-foo; Actions=Gallery;Create;[Desktop Action Gallery] Exec=fooview --gallery Name=Browse Gallery[Desktop Action Create] Exec=fooview --create-new Name=Create a new Foo! Icon=fooview-new描述文件由若干個(gè)組(Group )組成,[groupname]表示參數(shù)組的名字,每行用Key=Value的形式描述一個(gè)鍵值。使用“# ”表明注釋行。
deepstream-app的配置文件有如下可選的配置組。
本文的口罩檢測(cè)demo程序正是使用deepstream-app來構(gòu)建DS流水線的。我們以調(diào)用int8推理模型的配置文件為例進(jìn)行說明。
int8推理的配置包含兩個(gè)文件:
- deepstream_app_source1_camera_masknet_gpu_int8.txt
- config_infer_primary_masknet_gpu_int8.txt
前者描述流水線的配置情況,后者對(duì)流水線的nvinfer推理模塊進(jìn)行配置(因nvinfer參數(shù)比較多,故單獨(dú)拆分為一個(gè)配置文件),下面分別說明兩個(gè)文件中配置項(xiàng)的含義。
deepstream_app_source1_camera_masknet_gpu_int8.txt:
application配置組指定是否在命令行打印性能評(píng)估信息:
[application] enable-perf-measurement=1 perf-measurement-interval-sec=1
source組指定輸入源,這里指定兩個(gè)輸入源同時(shí)輸入:攝像頭和視頻文件
streammux組開啟mux插件,將兩個(gè)輸入源的圖像集成打包為batch,由于先前導(dǎo)出int8.engine時(shí)設(shè)置batch-size=4,故這里保持一致
[streammux] gpu-id=0 batch-size=4 batched-push-timeout=40000 ## Set muxer output width and height width=640 height=480osd組指定檢測(cè)標(biāo)簽的渲染顏色、字體
[osd] enable=1 gpu-id=0 border-width=4 text-size=18 text-color=1;1;1;1; text-bg-color=0.3;0.3;0.3;1 font=Arialprimary-gie組設(shè)置主推理引擎,注意導(dǎo)入了config_infer_primary_masknet_gpu_int8.txt文件
[primary-gie] enable=1 gpu-id=0 # Modify as necessary # GPU engine file # model-engine-file=/tlt-demo/data/experiment_dir_final/resnet18_detector_int8.engine # batch-size=4 # Required by the app for OSD, not a plugin property bbox-border-color0=0;1;0;1 bbox-border-color1=1;0;0;1 #bbox-border-color2=0;0;1;1 # Blue #bbox-border-color3=0;1;0;1 gie-unique-id=1 config-file=config_infer_primary_masknet_gpu_int8.txttracker組使能邊界框跟蹤器,此處選擇klt跟蹤算法
[tracker] enable=1 tracker-width=640 tracker-height=384 #ll-lib-file=/opt/nvidia/deepstream/deepstream-5.0/lib/libnvds_mot_iou.so #ll-lib-file=/opt/nvidia/deepstream/deepstream-5.0/lib/libnvds_nvdcf.so ll-lib-file=/opt/nvidia/deepstream/deepstream-5.0/lib/libnvds_mot_klt.so #ll-config-file required for DCF/IOU only #ll-config-file=../deepstream-app/tracker_config.yml #ll-config-file=iou_config.txt gpu-id=0 #enable-batch-process applicable to DCF only enable-batch-process=1tiled-display組將兩個(gè)視頻源的檢測(cè)結(jié)果分開,并排渲染為一個(gè)視頻流,故這里設(shè)置的輸出寬度為640*2=1280
[tiled-display] enable=1 rows=1 columns=2 width=1280 #640 height=480 #480 gpu-id=0sink組指定了兩個(gè)輸出源,一是在GUI顯示,二是編碼并推流RTSP到8554端口
[sink0] enable=0 #Type - 1=FakeSink 2=EglSink 3=File type=2 sync=1 source-id=0 gpu-id=0 container=2 codec=1 bitrate=2000000 output-file=/tlt-demo/out.mp4[sink1] enable=1 #Type - 1=FakeSink 2=EglSink 3=File 4=RTSPStreaming type=4 #1=h264 2=h265 codec=1 sync=0 bitrate=4000000 # set below properties in case of RTSPStreaming rtsp-port=8554 #udp-port=5400最后,tests組的含義設(shè)置視頻循環(huán)播放,方便調(diào)試時(shí)能夠?qū)Χ桃曨l文件持續(xù)反復(fù)的觀察
[tests] file-loop=1config_infer_primary_masknet_gpu_int8.txt文件則有三個(gè)配置組。
property組對(duì)推理引擎進(jìn)行設(shè)置,包括engine文件路徑、推理模型類型、輸入大小、推理batch大小、int8映射文件路徑、分類閾值等。
[class-attrs-all]組為所有類別配置檢測(cè)參數(shù),由于任務(wù)是目標(biāo)檢測(cè),故設(shè)置項(xiàng)主要包含極大值抑制算法的相關(guān)參數(shù)。
[class-attrs-0] pre-cluster-threshold=0.3 group-threshold=1 eps=0.5 #minBoxes=1 detected-min-w=0 detected-min-h=0 detected-max-w=0 detected-max-h=0[class-attrs-1] pre-cluster-threshold=0.3 group-threshold=1 eps=0.3 #minBoxes=1 detected-min-w=0 detected-min-h=0 detected-max-w=0 detected-max-h=0關(guān)于字段的具體含義,可查詢文檔,這里不再贅述。
總結(jié)
總體來看,TLT和DS構(gòu)成的工具鏈將模型的訓(xùn)練和部署變得極為方便,唯一需要編程的部分僅僅是一些數(shù)據(jù)集轉(zhuǎn)換腳本。最關(guān)鍵的是,借助DS框架,算法可以達(dá)到極高的幀率,TLT+DS絕對(duì)是做工(heng)程(xiang)的利器!
當(dāng)然,使用deepstream-app+配置文件仍然有很多限制,后續(xù)有機(jī)會(huì)將探索DS的python接口的使用方法。
總結(jié)
以上是生活随笔為你收集整理的Transfer Learning Toolkit (TLT) + DeepStream (DS)快速部署深度学习模型(以口罩检测为例)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用让新海诚本人惊讶的 AI 模型制作属于
- 下一篇: uniapp 自定义相机人脸和人脸识别