盤它!基于CANN的輔助駕駛AI實戰案例,輕松搞定車輛檢測和車距計算!( 二 )


昇騰AI基礎軟硬件平臺,依托昇騰AI處理器強大的算力,借助異構計算架構CANN的軟硬件協同優化充分釋放硬件算力,為高效訓練奠定了堅實的基礎 。
我們知道,AI算法模型可以基于不同AI框架定義 。無論是華為開源AI框架昇思MindSpore,還是TensorFlow、PyTorch、Caffe等其他常用AI框架,CANN都能輕松轉換成標準化的Ascend IR(Intermediate Representation)表達的圖格式 , 屏蔽AI框架差異,讓你快速搞定算法遷移,即刻體驗昇騰AI 處理器的澎湃算力 。
此外 , 在全新一代CANN 5.0版本中,更是能通過圖級和算子級的編譯優化、自動調優等軟硬件深度協同優化,全面釋放硬件澎湃算力,達到AI模型訓練性能的大幅提升 。針對包括分類、檢測、NLP、語義分割在內的常用模型訓練場景 , 均可實現性能翻番,讓整個訓練過程快到“飛”起 。
本項目使用的YOLOv4原始模型是基于Pytorch框架和昇騰AI處理器訓練的,開發者們可以直接下載使用,也可根據實際精度需要重訓:
https://www.hiascend.com/zh/software/modelzoo/detail/2/e2c648dc7ffb473fb41d687a1a490e28
AscendCL接口 , 助力開發者高效編程有了訓練好的AI算法模型之后,就能借助AscendCL編程接口實現對視頻車輛及車道線的智能檢測了 。AscendCL(Ascend Computing Language)是一套用于開發深度神經網絡推理應用的C語言API庫,兼具運行時資源管理、模型加載與執行、圖像預處理等能力,能夠讓開發者輕松解鎖圖片分類、目標檢測等各類AI應用 。并且為開發者屏蔽底層處理器的差異,讓開發者只需要掌握一套API,就可以全面應用于昇騰全系列AI處理器 。借助AscendCL編程接口 , 采用如下圖所示的模塊化設計,便能快速實現一個基于YOLOv4算法的目標檢測應用 。

盤它!基于CANN的輔助駕駛AI實戰案例,輕松搞定車輛檢測和車距計算!

文章插圖
首先介紹一下核心代碼 。在預處理階段,主要將opencv讀到的圖像轉換成符合模型輸入標準格式和尺寸的圖像(源碼如下圖所示,完整版代碼請查看文末鏈接) 。
1. 首先將opencv每幀讀到的BGR圖像轉換成RGB圖像,并通過模型輸入所需寬高與原圖像寬高得到縮放系數scale、偏移量shift、偏移系數shift_ratio 。2. 將原圖像resize到新的寬高得到image_,構建一個全0的新圖像,寬高和模型輸入寬高相同 。將image_以np.array的形式填充到全0的圖像中 , 不在偏移范圍內的則都是0,將的圖像的數據類型轉換成np中32位浮點型 。3. 為了消除奇異樣本數據的影像,進一步做歸一化處理 。4. 最后將通道數換到圖像的第一維度 , 返回新生成的圖像和原始圖像 。
盤它!基于CANN的輔助駕駛AI實戰案例,輕松搞定車輛檢測和車距計算!

文章插圖
在推理階段 , 調用acl_model中的execute函數執行模型(完整版代碼請查看文末鏈接),預處理后的圖像會被送至轉成om的YOLOv4模型 , 返回推理結果 。
盤它!基于CANN的輔助駕駛AI實戰案例,輕松搞定車輛檢測和車距計算!

文章插圖
盤它!基于CANN的輔助駕駛AI實戰案例,輕松搞定車輛檢測和車距計算!

文章插圖
在后處理階段中 , 后處理包括根據推理結果獲取檢測框坐標和置信度,使用NMS消除多余的邊框 , 使用透視變換矩陣計算車距,用opencv檢測車道線,最終繪制帶有車輛檢測框、檢測框類別、車距和車道線的新圖像 。
梳理一下整體開發流程:
1. 運行管理資源申請:用于初始化系統內部資源 , 此部分為固定的調用流程 。2. 加載模型文件并構建輸出的內存:將訓練好的模型轉換成om離線模型并且從文件加載 。此時需要由用戶自行管理模型運行的內存,根據內存中加載的模型獲取模型的基本信息包括模型輸入、輸出數據的buffer大小 。由模型的基本信息構建模型輸出內存,為接下來的模型推理做準備 。3. 數據預處理:對讀入的圖像數據進行預處理,然后構建模型的輸入數據 。首先會對輸入視頻中的圖像畫面按每幀進行處理;然后由BGR轉成RGB格式;接著使用resize將圖像大小變成416x416,最后除以255進行歸一化處理以消除奇異數據的影響 。4. 模型推理:根據構建好的模型輸入數據進行模型推理 。5. 解析推理結果:基于推理得到的檢測邊框和各邊框的置信度,使用NMS消除多余的邊框,將新的邊框和類別繪制在輸出圖像上 。這樣,一個基于CANN開發的簡易版AI輔助駕駛小應用就開發完成了,小伙伴們點擊如下鏈接就能直接體驗效果啦!https://www.hiascend.com/zh/developer/mindx-sdk/driveassist

推薦閱讀