帶你瞭解CANN的目標檢測與識別一站式方案
摘要:瞭解通用目標檢測與識別一站式方案的功能與特性,還有實現流程,以及可定製點。
本文分享自華為雲社群《 玩轉CANN目標檢測與識別一站式方案 》,作者: Tianyi_Li。
背景介紹
目標檢測與識別是計算機視覺領域中的關鍵技術,隨著深度學習技術的發展,目標檢測與識別的應用場景也越來越廣泛。當前, 主要有以下幾個應用場景:
安全領域:指紋識別、物體識別等。
交通領域:車牌號識別、無人駕駛、交通標誌識別等。
醫療領域:心電圖、B超、健康管理、營養學等。
生活領域:智慧家居、智慧購物、智慧測膚等。
但當前人工智慧應用開發面臨著開發週期長、AI軟體棧理解成本高、演算法模型與業務結合難度高、對開發人員技能要求高等門檻。為了降低AI應用開發的門檻,昇騰CANN開源了高效能的通用目標檢測與識別一站式方案,通過其強大的可定製、可擴充套件性,旨在為AI開發者們提供更好的程式設計選擇。
特別提示,如果您具有以下知識儲備,將有助於學習:
- 具有C&C++程式設計經驗。
- 瞭解異構計算架構CANN在昇騰AI全棧中的位置和作用。
- 瞭解應用程式設計框架AscendCL的關鍵特性,並能夠基於AscendCL介面開發簡單的AI應用。
目標
- 瞭解通用目標檢測與識別一站式方案的功能與特性
- 瞭解ACLlite的背景及介面使用方法
- 深入瞭解通用目標檢測與識別一站式方案的實現流程
- 能夠基於此方案定製自己的AI應用
目標檢測與識別一站式方案介紹
方案特性
點此 detect_and_classify ,可檢視方案原始碼。
方案整體特性概括如下:
1.支援多格式輸入和輸出
通用目標檢測和識別一站式方案支援圖片、離線視訊、RTSP視訊流等多輸入格式,開發者可基於此方案實現對圖片和視訊等不同格式的目標進行識別。另外在結果展示方面,支援圖片、離線視訊、Web前端等多形式展現,開發者可根據業務場景靈活呈現識別結果。
2.支援輕鬆替換和串接模型
該方案當前選用的是YoloV3圖片檢測模型與CNN顏色分類模型的串接,可實現基本的車輛檢測和車輛顏色識別,開發者可輕鬆修改程式程式碼,自行替換/增加/刪除AI模型,實現更多AI功能。
3.支援高效資料預處理
圖片、視訊等各類資料是進行目標檢測和識別的原料,在把資料投入AI演算法或模型前,我們需要對資料進行預加工,才能達到更加高效和準確的計算。該樣例採用獨立資料預處理模組,支援開發者按需定製,高效實現解碼、摳圖、縮放、色域轉換等各種常見資料處理功能。
4.支援圖片數、解析度可變場景定製
在目標檢測和識別領域,開發者們除了需要應對輸入資料格式等方面差異,還會經常遇到圖片數量、解析度不確定的場景,這也是格外頭疼的問題之一。比如,在目標檢測和識別過程中,由於檢測出的目標個數不固定,導致程式要等到圖片攢到固定數量再進行AI計算,浪費了大量寶貴的AI計算資源。該樣例開放了便捷的定製入口,支援設定多種資料量Batch檔位、多種解析度檔位,在推理時根據實際輸入情況靈活匹配,不僅擴寬了業務場景,更有效節省計算資源,大大提升AI計算效率。
5.支援多路多執行緒高效能程式設計
為了進一步提高程式設計的靈活性,滿足開發者實現高效能AI應用,該樣例支援通過極為友好和便捷的方式調整執行緒數和裝置路數,極大降低學習成本,提升裝置資源利用率。
6.高效後處理計算
除此之外,該樣例後續還會將原本需要在CPU上進行處理的功能推送到昇騰AI處理器上執行,利用昇騰AI處理器強大的算力實現後處理的加速,進一步提升整個AI應用的計算效率。
實現流程
該樣例使用了圖片檢測模型與顏色分類模型,基於CANN AI應用程式設計介面,對資料預處理、模型推理、模型後處理等AI核心計算邏輯進行模組化組裝,實現了車輛檢測和車身顏色識別基礎功能,以輸入圖片是JPEG壓縮圖片為例,該樣例功能流程如下所示:
- 首先輸入圖片送入Device的DVPP進行資料預處理,因為模型的輸入要求是非壓縮的、指定編碼格式的圖片,所以首先使用DVPP進行圖片的解碼操作,解碼後格式為YUV420SP_U8。
- 由於圖片的大小與模型要求的大小不一致,解碼後我們使用DVPP的VPC功能進行大小的調整。
- 經過前面的一系列處理後,輸入到模型的編碼格式YUV420SP_U8仍與模型要求不一致,此時我們可以在模型轉換時通過AIPP的色域轉換功能實現格式轉換,將YUV420SP_U8格式轉換為模型要求的BGR格式,這裡的色域轉換功能其實就相當於在模型中添加了一個色域轉換運算元,直接在模型推理前實現了編碼格式的轉換,而無需程式碼層面的修改。
- 檢測模型推理後的結果就可以送入模型後處理模組,後處理模組根據業務流程需要,進行檢測座標點的儲存。
- 下一步,就是將檢測座標點以及前面預處理後的YUV圖片,一起送入分類模型的預處理模組,首先根據檢測結果的座標點資訊對輸入的圖片進行摳圖,然後再將其縮放為分類模型要求的大小。
- 由於顏色分類模型要求的圖片編碼格式是RGB,同前面的檢測模型一樣,需要使用AIPP的色域轉換功能,在模型推理前將YUV轉換為RGB。
- 最後對分類模型推理後的結果進行處理,在圖片上進行畫框,標註結果,並根據使用者的輸出要求進行儲存或者線上展示。
快速體驗
下面介紹讓樣例快速跑起來,瞭解通用目標檢測與識別一站式方案的總體編譯執行流程,主要是:
- 輸入/輸出資料都為圖片,其中輸入資料請選擇jpeg格式的圖片
- 使用1個Device執行
準備環境
這裡不做過多介紹,使用的是ECS + 官方推送的映象,很簡單就能搞定了,需要注意的是環境準備好後,請以HwHiAiUser使用者體驗如下任務。HwHiAiUser使用者下已經配置好了環境變數,安裝好了應用所需基本依賴。
編譯執行樣例
因為映象已經做好了配置,可以直接下載樣例,模型與資料,直接編譯執行即可。詳細步驟如下:
步驟 1 :下載samples原始碼倉。
此處已將samples倉下載到$HOME路徑下為例, 可以使用以下兩種方式下載,請選擇其中一種即可
【命令列下載】
cd ${HOME} git clone http://gitee.com/ascend/samples.git
【壓縮包下載】
a. 在samples倉右上角選擇【克隆/下載】下拉框,並選擇【下載ZIP】。
b. 將ZIP包以HwHiAiUser使用者上傳到開發環境的普通使用者家目錄中。
例如:${HOME}/ascend-samples-master.zip
c. 執行以下命令,解壓縮zip包。
cd ${HOME} unzip ascend-samples-master.zip
步驟 2 : 準備模型及資料。
請參見README中的模型及資料準備章節。
步驟 3 : 樣例編譯執行。
請參見README中的樣例編譯執行章節。
【說明】
- 輸入/輸出資料都要求為圖片,其中輸入資料請選擇jpeg格式的圖片
- 使用1個Device執行
結果輸出
如下圖所示,左圖為執行的列印輸出,右圖為輸出的推理結果圖片:
此外,還支援多種輸入輸出模式:
根據官方的測試,單device最多支援22路,在輸入解析度1280 * 720的視訊下,單幀影象處理耗時20ms,每秒最大處理幀數為50幀。
結語
本次的CANN目標檢測與識別一站式方案總體流程圖如下圖所示,
方案中大量使用了執行緒,多路執行緒分別進行資料流轉和協同合作,以單device為例,執行緒關係如下圖所示:
此外,還支援定製開發,開發者可根據需要,自行新增包括但不限於如下功能:
詳細的操作位置如下圖所示,具體可參考本方案程式碼庫的README:
好了,最後奉上本方案程式碼庫的獲取方式,如下圖所示,當然,也可以點選在前文中咱們提供的連結。
- 設計模式之狀態模式
- 如何實現資料庫讀一致性
- 我是怎麼入行做風控的
- C 11精要:部分語言特性
- 吳恩達來信:人工智慧領域的求職小 tips
- EasyCV帶你復現更好更快的自監督演算法-FastConvMAE
- 某車聯網App 通訊協議加密分析(四) Trace Code
- 帶你瞭解CANN的目標檢測與識別一站式方案
- EasyNLP玩轉文字摘要(新聞標題)生成
- PostgreSQL邏輯複製解密
- 基於 CoreDNS 和 K8s 構建雲原生場景下的企業級 DNS
- 迴圈神經網路(RNN)可是在語音識別、自然語言處理等其他領域中引起了變革!
- 技術分享| 分散式系統中服務註冊發現元件的原理及比較
- 利用谷歌地圖採集外貿客戶的電話和手機號碼
- 跟我學Python影象處理丨關於影象金字塔的影象向下取樣和向上取樣
- 帶你掌握如何使用CANN 運算元ST測試工具msopst
- 一招教你如何高效批量匯入與更新資料
- 一步步搞懂MySQL元資料鎖(MDL)
- 你知道如何用 PHP 實現多程序嗎?
- KubeSphere 閘道器的設計與實現(解讀)