帶你玩轉OpenHarmony AI-基於海思NNIE的AI能力自定義
簡介
相信大家從玩轉OpenAtom OpenHarmony(簡稱“OpenHarmony”)AI系列專題的其他文章中,已經擴充了OpenHarmony AI在智慧出行、智慧辦公等多場景下的AI自動檢測、識別和判斷的新體驗,對於OpenHarmony平臺上的AI開發有了一定認識。
如果你已經有了一個AI創意,怎樣訓練出相關模型?怎樣在你的OpenHarmony裝置上部署你的AI模型?接下來以OpenHarmony Hi3516dv300小型系統為例,帶領大家使用Hi3516dv300 NNIE硬體單元完成手勢檢測與分類功能。
NNIE是Neural Network Inference Engine的簡稱,是上海海思媒體SoC中專門針對神經網路特別是深度學習卷積神經網路進行加速處理的硬體單元,支援現有大部分的公開網路,如相關分類網路、檢測網路、分割網路等。(詳細資料見文末參考連結:《Hi3516dv300平臺NNIE開發指南文件》)
開發流程
下面以手勢分類這一需求為例,梳理一下相關AI需求在Hi3516dv300開發板端落地的開發步驟:
1) 資料採集:針對設想的手勢場景,錄製相關場景素材。其中必須考慮到樣本的豐富性和可靠性;
2) 資料集製作和標註:對步驟1中的素材抽取生成資料集,同時還必須對資料集進行相應資料清洗和資料標註動作;
3) 演算法模型設計:你可以參考相關開源演算法模型,並針對於應用場景做相應修改。相關模型選擇請參考《Hi3516dv300平臺NNIE開發指南文件》3.3公開模型下載章節;本例項中,需要完成手勢的檢測和分類,其中對於手勢檢測選用了Yolov2模型,對於手勢的分類則選用Resnet18模型;
4) 模型訓練:利用演算法模型和相應資料集訓練出目標模型。模型訓練可以部署在本地或者雲平臺上;
5) 模型轉換:目前Hi3516dv300 NNIE配套軟體及工具鏈僅支援Caffe框架,使用其他框架的網路模型需要轉化為Caffe框架下的模型。所以必須有相關模型轉換步驟;
6) 模型量化模擬:利用RuyiStudio的Runtime wk功能和模擬NNIE功能不斷最佳化模型檔案,最終生成部署所需的wukong檔案(檔案字尾為.wk) ;
7) 板端推理:透過Hi3516dv300攝像頭獲取的實時圖片,載入相關WK檔案來完成相關推理動作。(詳細開發流程見參考文件:《分類網相關開發流程文件》)
板端推理關鍵程式碼
Hi3516dv300板端推理的關鍵程式碼,按照執行步驟分成如下三部分:
1) 實時圖片獲取
獲取實時圖片的前提需要保證Hi3516dv300相關影片輸入VI(Video In)、影片處理子系統VPSS(Video Process Sub-System)、影片輸出VO(Video Out)模組做好相應初始化動作和完成模組之間的繫結動作。(詳細初始化流程見參考文件:《Hi3516dv300平臺HiMPP媒體處理軟體開發參考文件》)
2) 模型檔案載入
本例項中,需要完成手勢的檢測和分類,需要載入相關兩個模型檔案。
3) 輸出推理結果
結果推理過程中,先判斷是否檢測到手勢動作,隨後對這個手勢動作進行分類檢測。
文末小結
本文主要從開發流程和關鍵板端推理程式碼等方面介紹了,Hi3516dv300 NNIE AI能力開發的關鍵流程和細節。方便廣大開發者更好地瞭解和掌握海思NNIE AI開發。OpenHarmony AI能力的豐富離不開廣大開發者的參與和共建,也期待更多的開發者加入知識體系組,做出更多富有想象力的作品!
參考連結
OpenHarmony知識體系工作組
Hi3516dv300平臺NNIE開發指南文件
Hi3516dv300平臺NNIE相關API文件
Hi3516dv300平臺HiMPP媒體處理軟體開發參考文件
Hi3516dv300 AI實驗文件
分類網相關開發流程文件
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70011554/viewspace-2931889/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 帶你玩轉OpenHarmony AI:基於Seetaface2的人臉識別AI
- 帶你玩轉OpenHarmony AI:打造智慧語音子系統AI
- AI- AI工具AI
- 帶你重新“玩轉”FlutterFlutter
- 玩轉docker之自定義PHP容器DockerPHP
- Android中的Gradle之玩轉自定義功能AndroidGradle
- 基於SpringBoot 、AOP與自定義註解轉義字典值Spring Boot
- 手摸手帶你玩轉Xcode ExtensionsXCode
- CryptAssist-帶你玩轉幣圈
- 手把手帶你玩轉LinuxLinux
- 帶你玩轉RabbitMQ的五種佇列MQ佇列
- 帶你深入理解Android中的自定義屬性!!!Android
- 基於Spring-AOP的自定義分片工具Spring
- 帶你讀AI論文:基於Transformer的直線段檢測AIORM
- Spring Security 實戰乾貨:玩轉自定義登入Spring
- 純乾貨:21天帶你玩轉容器
- 老司機帶你玩轉Radare2
- 架構師帶你玩轉分散式鎖架構分散式
- EasyNLP帶你玩轉CLIP圖文檢索
- 玩轉OpenHarmony PID:教你打造兩輪平衡車
- 帶你自定義實現Spring事件驅動模型Spring事件模型
- IDE AI- vscode / cursor / openfuse ideIDEAIVSCode
- 自定義帶標尺的seekbar
- OpenHarmony自定義構建函式:@Builder裝飾器函式UI
- OpenHarmony裝飾指定自定義元件:@BuilderParam裝飾器元件UI
- 基於shiro的自定義註解的擴充套件套件
- 三步帶你玩轉前端裝飾器前端
- Higress 基於自定義外掛訪問 RedisRedis
- Potree 003 基於Potree Desktop建立自定義工程
- 帶你7天玩轉視覺化建站平臺視覺化
- 七天帶你玩轉MySQL之SQL語句MySql
- 【12月11日】真香現場,帶你玩轉 EKS!
- 程式設計師大殺器?帶你玩轉ChatGPT程式設計師ChatGPT
- 【轉】Android三種姿勢帶你玩轉360度全景圖功能Android
- 雲開發實踐:從 0 到 1 帶你玩 AIAI
- 一個例子帶你瞭解兩種自定義註解
- 手把手帶你自定義 Gradle 外掛 —— Gradle 系列(2)Gradle
- 帶你梳理Jetty自定義ProxyServlet實現反向代理服務JettyServlet