英偉達(dá)CV公開課第1期:快速搭建基于Python的車輛信息識別系統(tǒng)
隨著智慧城市、自動駕駛的快速落地,車輛的檢測和識別應(yīng)用場景非常廣泛,如車牌識別、車流統(tǒng)計、車輛屬性識別等。
近日,在英偉達(dá)x量子位發(fā)起的系列CV公開課第一期課程直播中,NVIDIA社區(qū)開發(fā)者經(jīng)理何琨老師分享了如何利用TLT 3.0、DeepStream等工具低門檻、快速搭建一個車輛信息識別系統(tǒng)。
分享大綱如下:
·?車輛信息識別任務(wù)介紹
·?NVIDIA DeepStream SDK簡介及其使用
·?NVIDIA Transfer Learning Toolkit介紹及其使用
·?實戰(zhàn)演示:快速搭建車輛信息識別系統(tǒng)
·?下期直播報名
以下為分享內(nèi)容整理:
大家好,我來自NVIDIA開發(fā)者社區(qū),今天的分享內(nèi)容是“快速搭建基于Python的車輛信息識別系統(tǒng)”。
今天的分享仍然以一個具體的項目來做實例,包含源碼和部署流程,課后會把課程PPT、源碼分享給大家(見文末),希望大家能夠有所收獲。
車輛信息識別任務(wù)
首先,通過這個動圖說明我們今天“車輛信息識別”的任務(wù),首先我們需要檢測到車輛,然后檢測到這輛車的車牌并識別;另外我們還需要識別這輛車的顏色、品牌、類型等。這就是我們今天課程的任務(wù),我們可以將上述任務(wù)拆解為5個小任務(wù):
1.檢測到車輛
2.識別車類型
3.識別車品牌
4.檢測到車牌
5.識別車牌號
我將分兩部分演示這5個小任務(wù)。一部分是完成車輛檢測,車牌檢測與識別;另一部分是識別車輛品牌與車輛型號。
拿到這個任務(wù),首先我們需要考慮采用什么樣的數(shù)據(jù)集;其次在訓(xùn)練過程中還要考慮在什么框架下完成訓(xùn)練,如何對模型進(jìn)行剪枝、優(yōu)化;模型訓(xùn)練完成后,還需要考慮部署到哪里,比如服務(wù)器終端還是一些嵌入式產(chǎn)品。
首先,是數(shù)據(jù)的準(zhǔn)備部分。NVIDIA提供的是一些美國車牌的視頻,跟國內(nèi)車牌有一些區(qū)別。大家在實際訓(xùn)練中,可以自行收集更合適的數(shù)據(jù)集。
其次,為快速完成一個模型訓(xùn)練,需要用到遷移學(xué)習(xí)工具:Transfer Learning Toolkit(TLT)。
最后,部署模型時,可以使用DeepStream工具便捷實現(xiàn)。
在今天的示例展示開始前,先為大家介紹一下這兩個工具的功能及如何使用。
NVIDIA DeepStream SDK
DeepStream是NVIDIA專門為視覺相關(guān)的應(yīng)用來設(shè)計的一整套工具鏈,集成了很多工具。
它的核心任務(wù)之一是幫用戶搭建視頻應(yīng)用的完整產(chǎn)業(yè)鏈。當(dāng)我們要做一個基于視覺的應(yīng)用時,我們不只是在訓(xùn)練一個模型,還需要處理很多流程,比如編解碼、批處理等,DeepStream可以幫助用戶完成這些流程。
如上圖,最底層基礎(chǔ)部分,NVIDIA有一系列的硬件;
再往上看,在不同硬件部署時,我們可以再采用不同的基于CUDA-X的工具,比如要做視頻的編、解碼可能用到CUDA,做視頻的inference時可以用到TensorRT、Triton Inference Server,不同的工具對應(yīng)不同的調(diào)用方式;
大家用DeepStream搭建系統(tǒng)時,只需要調(diào)用DeepStream SDK這一個應(yīng)用,它是一系列軟件搭建起來的工具的集合,并且可以投產(chǎn)于真實的項目中。
如何使用DeepStream?
說明文檔:https://docs.nvidia.com/metropolis/deepstream/dev-guide/text/DS_Quickstart.html#quickstart-guide
具體看下DeepStream SDK每一步的處理過程。
我們要搭建一個基于視覺應(yīng)用的程序,第一步是數(shù)據(jù)源。今天我們展示的實例代碼是基于本地的視頻,大家也可以使用不同的視頻源,都可以接入到SDK系統(tǒng)里。
第二步,對視頻源的數(shù)據(jù)進(jìn)行處理。包括Code、DeCode的過程,使程序、算法能夠直接使用和識別數(shù)據(jù)。這一步可以極大提升我們的處理效率、節(jié)省時間。
第三步,視頻預(yù)處理,包括縮放、剪切、調(diào)整分辨率等。
第四步,Batching,即設(shè)置一定延遲,將幾張圖片組合起來,組成一張大圖再傳輸給GPU,同時處理多張圖片來提高效率。
第五步,深度學(xué)習(xí)推理任務(wù)。這里可以使用您已有的模型、或者NVIDIA提供的預(yù)訓(xùn)練模型等,不需要再從頭開始進(jìn)行訓(xùn)練。推理主要包含檢測、識別、圖像分割三部分,今天的課程任務(wù)都會涵蓋到。
推理完成后,還可以進(jìn)行二級推理網(wǎng)絡(luò)或者多級網(wǎng)絡(luò)的搭建。比如今天的課程任務(wù),檢測到車輛后,再在檢測框里檢測車牌,就是二級網(wǎng)絡(luò)。接下來可能還要識別車牌號,這個識別網(wǎng)絡(luò)就是三級網(wǎng)絡(luò)。
第六步,深度學(xué)習(xí)的結(jié)果出來之后,針對某些需要Tracking的任務(wù),DeepStream里邊也已經(jīng)內(nèi)置了相應(yīng)模塊,直接調(diào)用就可以進(jìn)行跟蹤任務(wù)的處理。
這時,主要的計算任務(wù)就完成了,第七步就需要將結(jié)果顯示出來,比如顯示在屏幕上、傳輸?shù)竭h(yuǎn)端,或者儲存為本地的文件。(今天直播里我們將用到一個嵌入式設(shè)備—NX來顯示畫面,將處理完的視頻存到本地后播放。)
以上就是一套完整的流程,我們通過使用DeepStream SDK,只需100多行代碼就可以實現(xiàn)整個流程。
上圖是關(guān)于DeepStream的注意事項,大家在實際應(yīng)用的時候,可以參考相關(guān)內(nèi)容、應(yīng)用場景等。
TensorRT
TensorRT是英偉達(dá)專門為GPU深度學(xué)習(xí)推理設(shè)置的一個工具(相關(guān)課程可參考英偉達(dá)開發(fā)者社區(qū):https://www.nvidia.cn/developer/online-training/community-training/),可以幫助GPU更快的做深度學(xué)習(xí)推理任務(wù)。
它會在內(nèi)部做一系列優(yōu)化,如精度校正,動態(tài)Memory,多流的執(zhí)行,Kernel調(diào)用,網(wǎng)絡(luò)層融合計算等。正是通過這一系列優(yōu)化,生成了可執(zhí)行的推理引擎,就可以進(jìn)行一個深度學(xué)習(xí)推理任務(wù)。
NVIDIA Transfer Learning Toolkit
接下來介紹一下NVIDIA Transfer Learning Toolkit(TLT)工具。
上述介紹了部署工具,那么如何得到推理引擎呢?這就需要用到TLT工具(目前版本已更新至TLT 3.0)。
TLT 3.0是一個簡單的、集成化的工具,可以幫助大家快速地訓(xùn)練一個模型,并且把這個模型轉(zhuǎn)化成TensorRT或者DeepStream可以直接使用的深度學(xué)習(xí)推理引擎。
TLT 3.0為開發(fā)者提供了一系列的預(yù)訓(xùn)練模型,并且提供了一系列工具,大家可以在預(yù)訓(xùn)練模型的基礎(chǔ)上進(jìn)行模型訓(xùn)練、調(diào)整、剪枝,以及導(dǎo)出模型進(jìn)行部署等。而且大家可以通過簡單的幾行代碼來實現(xiàn)上述功能。
目前,TLT 3.0已經(jīng)涵蓋了很多內(nèi)容,在視覺、語音等方面都有很多可以實際應(yīng)用的模型。
我們今天的主題是“車輛信息識別”,課程任務(wù)中主要會涉及圖像分類、目標(biāo)檢測和圖像分割方面的預(yù)訓(xùn)練模型,大家都可以去NGC下載(ngc.nvidia.com)。
實戰(zhàn)演示:快速搭建車輛信息識別系統(tǒng)
接下來,何琨老師通過代碼演示,帶大家實現(xiàn)了“車輛信息識別”任務(wù)。大家可觀看視頻、繼續(xù)學(xué)習(xí):
直播回放:
源代碼下載鏈接:
Python:https://github.com/NVIDIA-AI-IOT/deepstream_python_apps
C:https://github.com/NVIDIA-AI-IOT/deepstream_lpr_app
課程PPT鏈接:https://images.nvidia.cn/cn/webinars/2021/May18/%E5%BF%AB%E9%80%9F%E6%90%AD%E5%BB%BA%E5%9F%BA%E4%BA%8EPython%E7%9A%84%E8%BD%A6%E8%BE%86%E4%BF%A1%E6%81%AF%E8%AF%86%E5%88%AB%E7%B3%BB%E7%BB%9F.pdf
—?完?—